diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..a9190658 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,78 @@ +name: CI + +on: + pull_request: + push: + +jobs: + test: + strategy: + matrix: + # os: [windows-latest, ubuntu-latest, macos-latest] + os: [windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-build-stable-${{ hashFiles('**/Cargo.toml') }} + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Install alsa and udev + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev + if: runner.os == 'linux' + - name: Build & run tests + run: cargo test + all-doc-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ubuntu-latest-cargo-build-stable-${{ hashFiles('**/Cargo.toml') }} + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + - name: Install alsa and udev + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev + - name: Run doc tests with all features (this also compiles README examples) + run: cargo test --doc --all-features + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/cache@v2 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ubuntu-latest-cargo-build-stable-${{ hashFiles('**/Cargo.toml') }} + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + components: rustfmt, clippy + override: true + - name: Install alsa and udev + run: sudo apt-get update; sudo apt-get install --no-install-recommends libasound2-dev libudev-dev + - name: Run clippy + run: cargo clippy --workspace --all-targets --all-features + - name: Check format + run: cargo fmt --all -- --check \ No newline at end of file diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml deleted file mode 100644 index 50ef95e2..00000000 --- a/.github/workflows/rust.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Rust - -on: [push] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v1 - - name: Build - run: cd raylib && cargo build --verbose --features nobuild - # - name: Run tests [Requires window system] - # run: cargo test -p raylib-test --verbose diff --git a/.gitmodules b/.gitmodules index a25d66a8..c5046731 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,9 @@ [submodule "raylib-sys/raylib"] path = raylib-sys/raylib url = https://github.com/raysan5/raylib + branch = "4.5.0" + +[submodule "raylib-sys/raygui"] + path = raylib-sys/raygui + url = https://github.com/raysan5/raygui + branch = "master" diff --git a/Cargo.toml b/Cargo.toml index d7a8786b..31ed3ba6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,2 +1,2 @@ [workspace] -members = ["raylib", "raylib-sys", "raylib-test", "samples", "showcase"] +members = ["raylib", "raylib-sys", "examples", "example"] diff --git a/DECISIONS.md b/DECISIONS.md index 239cb6bc..2d7b6be6 100644 --- a/DECISIONS.md +++ b/DECISIONS.md @@ -9,3 +9,8 @@ Now we cast buffers to `ManuallyDrop>` This allows us to created a box slice and have all the crazy iterator shenanigans users love, without invoking a copy allocation. We use `Box::leak` and `ManuallyDrop::take` to get the slice and then cast that to a `* void` for raylibs various `UnloadX` functions. If an `UnloadX` function doesn't exist, we use the `MemFree` function to return memory using the same allocator as raylib. + + +2. impl Into + +Where posible, have the library call `.into` on function params instead of relying on the user to make the call. diff --git a/LICENSE.md b/LICENSE.md index 963771b6..f1d5b815 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,8 @@ # License Copyright (c) 2018-2019 Paul Clement (@deltaphc) +Copyright (c) 2020 Mia Ayeke (@dacode45) +Copyright (c) 2023 Teddy Astie (@tsnake41) This software is provided "as-is", without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. diff --git a/README.md b/README.md index cf3a14b7..bb9e5b90 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ # raylib-rs -raylib-rs is a Rust binding for [raylib](http://www.raylib.com/) 3.5. It currently targets the _stable_ Rust toolchain, version 1.31 or higher. +raylib-rs is a Rust binding for [raylib](http://www.raylib.com/) 4.5. It currently targets the _stable_ Rust toolchain, version 1.31 or higher. Please checkout the showcase directory to find usage examples! @@ -27,23 +27,20 @@ Though this binding tries to stay close to the simple C API, it makes some chang ## Supported Platforms -| API | Windows | Linux | macOS | Web | Android | Raspberry Pi | -| ------ | ------------------ | ------------------ | ------------------ | -------------- | ------- | ------------ | -| core | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :construction: | | | -| rgui | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | | -| physac | :construction: | :construction: | :construction: | | | | -| rlgl | :heavy_check_mark: | :x: | :x: | | | | +| API | Windows | Linux | macOS | Web | Android | Raspberry Pi | +| ------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| core | :heavy_check_mark: | :heavy_check_mark: | :question: | :heavy_check_mark: | | :question: | +| rgui | :heavy_check_mark: | :heavy_check_mark: | :question: | :heavy_check_mark: | | :question: | +| physac | :heavy_check_mark: | :heavy_check_mark: | :question: | :heavy_check_mark: | | :question: | +| rlgl | :heavy_check_mark: | :heavy_check_mark: | :question: | :question: | | :question: | ## Build Dependencies -Requires glfw, cmake, and curl. Tips on making things work smoothly on all platforms is appreciated. -Follow instructions for building raylib for your platform [here](https://github.com/raysan5/raylib/wiki) - 1. Add the dependency to your `Cargo.toml`: ```toml [dependencies] -raylib = { version = "3.7" } +raylib = { branch = "4.5.0-redesign", git = "https://github.com/TSnake41/raylib-rs" } ``` 2. Start coding! @@ -52,16 +49,16 @@ raylib = { version = "3.7" } use raylib::prelude::*; fn main() { - let (mut rl, thread) = raylib::init() + let (rl, thread) = raylib::init() .size(640, 480) .title("Hello, World") .build(); while !rl.window_should_close() { - let mut d = rl.begin_drawing(&thread); - - d.clear_background(Color::WHITE); - d.draw_text("Hello, world!", 12, 12, 20, Color::BLACK); + rl.begin_drawing(&thread, |d| { + d.clear_background(Color::WHITE); + d.draw_text("Hello, world!", 12, 12, 20, Color::BLACK); + }); } } ``` @@ -73,12 +70,21 @@ fn main() { - In C, `LoadFontData` returns a pointer to a heap-allocated array of `CharInfo` structs. In this Rust binding, said array is copied into an owned `Vec`, the original data is freed, and the owned Vec is returned. - In C, `GetDroppedFiles` returns a pointer to an array of strings owned by raylib. Again, for safety and also ease of use, this binding copies said array into a `Vec` which is returned to the caller. - I've tried to make linking automatic, though I've only tested on Windows 10, Ubuntu, and MacOS 15. Other platforms may have other considerations. +- OpenGL 3.3, 2.1, and ES 2.0 may be forced via adding `["opengl_33"]`, `["opengl_21"]` or `["opengl_es_20]` to the `features` array in your Cargo.toml dependency definition. ## Building from source 1. Clone repository: `git clone --recurse-submodules` 2. `cargo build` +### If building for Wayland on Linux + +3. Install these packages: +`libglfw3-dev wayland-devel libxkbcommon-devel wayland-protocols wayland-protocols-devel libecm-dev` +###### Note that this may not be a comprehensive list, please add details for your distribution or expand on these packages if you believe this to be incomplete. + +4. Enable wayland by adding `features=["wayland"]` to your dependency definition + ## Cross-compiling using `cross` The [@rust-embedded](https://github.com/rust-embedded) project provides a handy tool called [`cross`](https://github.com/rust-embedded/cross) that uses docker to cross-compile any cargo project to one of their many [supported platforms](https://github.com/rust-embedded/cross#supported-targets). This tool makes it easy to cross-compile `raylib-rs` for binary distribution (in cases where you are producing a pre-compiled game for example). diff --git a/raylib-sys/raylib.h b/checklist.md similarity index 52% rename from raylib-sys/raylib.h rename to checklist.md index a9fbe6b4..58ffbf36 100644 --- a/raylib-sys/raylib.h +++ b/checklist.md @@ -1,910 +1,4 @@ -/********************************************************************************************** -* -* raylib - A simple and easy-to-use library to enjoy videogames programming (www.raylib.com) -* -* FEATURES: -* - NO external dependencies, all required libraries included with raylib -* - Multiplatform: Windows, Linux, FreeBSD, OpenBSD, NetBSD, DragonFly, -* MacOS, Haiku, UWP, Android, Raspberry Pi, HTML5. -* - Written in plain C code (C99) in PascalCase/camelCase notation -* - Hardware accelerated with OpenGL (1.1, 2.1, 3.3 or ES2 - choose at compile) -* - Unique OpenGL abstraction layer (usable as standalone module): [rlgl] -* - Multiple Fonts formats supported (TTF, XNA fonts, AngelCode fonts) -* - Outstanding texture formats support, including compressed formats (DXT, ETC, ASTC) -* - Full 3d support for 3d Shapes, Models, Billboards, Heightmaps and more! -* - Flexible Materials system, supporting classic maps and PBR maps -* - Animated 3D models supported (skeletal bones animation) (IQM, glTF) -* - Shaders support, including Model shaders and Postprocessing shaders -* - Powerful math module for Vector, Matrix and Quaternion operations: [raymath] -* - Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD) -* - VR stereo rendering with configurable HMD device parameters -* - Bindings to multiple programming languages available! -* -* NOTES: -* One default Font is loaded on InitWindow()->LoadFontDefault() [core, text] -* One default Texture2D is loaded on rlglInit() [rlgl] (OpenGL 3.3 or ES2) -* One default Shader is loaded on rlglInit()->rlLoadShaderDefault() [rlgl] (OpenGL 3.3 or ES2) -* One default RenderBatch is loaded on rlglInit()->rlLoadRenderBatch() [rlgl] (OpenGL 3.3 or ES2) -* -* DEPENDENCIES (included): -* [core] rglfw (Camilla Löwy - github.com/glfw/glfw) for window/context management and input (PLATFORM_DESKTOP) -* [rlgl] glad (David Herberth - github.com/Dav1dde/glad) for OpenGL 3.3 extensions loading (PLATFORM_DESKTOP) -* [raudio] miniaudio (David Reid - github.com/dr-soft/miniaudio) for audio device/context management -* -* OPTIONAL DEPENDENCIES (included): -* [core] msf_gif (Miles Fogle) for GIF recording -* [core] sinfl (Micha Mettke) for DEFLATE decompression algorythm -* [core] sdefl (Micha Mettke) for DEFLATE compression algorythm -* [textures] stb_image (Sean Barret) for images loading (BMP, TGA, PNG, JPEG, HDR...) -* [textures] stb_image_write (Sean Barret) for image writting (BMP, TGA, PNG, JPG) -* [textures] stb_image_resize (Sean Barret) for image resizing algorithms -* [textures] stb_perlin (Sean Barret) for Perlin noise image generation -* [text] stb_truetype (Sean Barret) for ttf fonts loading -* [text] stb_rect_pack (Sean Barret) for rectangles packing -* [models] par_shapes (Philip Rideout) for parametric 3d shapes generation -* [models] tinyobj_loader_c (Syoyo Fujita) for models loading (OBJ, MTL) -* [models] cgltf (Johannes Kuhlmann) for models loading (glTF) -* [raudio] dr_wav (David Reid) for WAV audio file loading -* [raudio] dr_flac (David Reid) for FLAC audio file loading -* [raudio] dr_mp3 (David Reid) for MP3 audio file loading -* [raudio] stb_vorbis (Sean Barret) for OGG audio loading -* [raudio] jar_xm (Joshua Reisenauer) for XM audio module loading -* [raudio] jar_mod (Joshua Reisenauer) for MOD audio module loading -* -* -* LICENSE: zlib/libpng -* -* raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software: -* -* Copyright (c) 2013-2021 Ramon Santamaria (@raysan5) -* -* This software is provided "as-is", without any express or implied warranty. In no event -* will the authors be held liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, including commercial -* applications, and to alter it and redistribute it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not claim that you -* wrote the original software. If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be misrepresented -* as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -**********************************************************************************************/ - -#ifndef RAYLIB_H -#define RAYLIB_H - -#include // Required for: va_list - Only used by TraceLogCallback - -#if defined(_WIN32) - // Microsoft attibutes to tell compiler that symbols are imported/exported from a .dll - #if defined(BUILD_LIBTYPE_SHARED) - #define RLAPI __declspec(dllexport) // We are building raylib as a Win32 shared library (.dll) - #elif defined(USE_LIBTYPE_SHARED) - #define RLAPI __declspec(dllimport) // We are using raylib as a Win32 shared library (.dll) - #else - #define RLAPI // We are building or using raylib as a static library - #endif -#else - #define RLAPI // We are building or using raylib as a static library (or Linux shared library) -#endif - -//---------------------------------------------------------------------------------- -// Some basic Defines -//---------------------------------------------------------------------------------- -#ifndef PI - #define PI 3.14159265358979323846f -#endif - -#define DEG2RAD (PI/180.0f) -#define RAD2DEG (180.0f/PI) - -// Allow custom memory allocators -#ifndef RL_MALLOC - #define RL_MALLOC(sz) malloc(sz) -#endif -#ifndef RL_CALLOC - #define RL_CALLOC(n,sz) calloc(n,sz) -#endif -#ifndef RL_REALLOC - #define RL_REALLOC(ptr,sz) realloc(ptr,sz) -#endif -#ifndef RL_FREE - #define RL_FREE(ptr) free(ptr) -#endif - -// NOTE: MSVC C++ compiler does not support compound literals (C99 feature) -// Plain structures in C++ (without constructors) can be initialized from { } initializers. -#if defined(__cplusplus) - #define CLITERAL(type) type -#else - #define CLITERAL(type) (type) -#endif - -// Some Basic Colors -// NOTE: Custom raylib color palette for amazing visuals on WHITE background -#define LIGHTGRAY CLITERAL(Color){ 200, 200, 200, 255 } // Light Gray -#define GRAY CLITERAL(Color){ 130, 130, 130, 255 } // Gray -#define DARKGRAY CLITERAL(Color){ 80, 80, 80, 255 } // Dark Gray -#define YELLOW CLITERAL(Color){ 253, 249, 0, 255 } // Yellow -#define GOLD CLITERAL(Color){ 255, 203, 0, 255 } // Gold -#define ORANGE CLITERAL(Color){ 255, 161, 0, 255 } // Orange -#define PINK CLITERAL(Color){ 255, 109, 194, 255 } // Pink -#define RED CLITERAL(Color){ 230, 41, 55, 255 } // Red -#define MAROON CLITERAL(Color){ 190, 33, 55, 255 } // Maroon -#define GREEN CLITERAL(Color){ 0, 228, 48, 255 } // Green -#define LIME CLITERAL(Color){ 0, 158, 47, 255 } // Lime -#define DARKGREEN CLITERAL(Color){ 0, 117, 44, 255 } // Dark Green -#define SKYBLUE CLITERAL(Color){ 102, 191, 255, 255 } // Sky Blue -#define BLUE CLITERAL(Color){ 0, 121, 241, 255 } // Blue -#define DARKBLUE CLITERAL(Color){ 0, 82, 172, 255 } // Dark Blue -#define PURPLE CLITERAL(Color){ 200, 122, 255, 255 } // Purple -#define VIOLET CLITERAL(Color){ 135, 60, 190, 255 } // Violet -#define DARKPURPLE CLITERAL(Color){ 112, 31, 126, 255 } // Dark Purple -#define BEIGE CLITERAL(Color){ 211, 176, 131, 255 } // Beige -#define BROWN CLITERAL(Color){ 127, 106, 79, 255 } // Brown -#define DARKBROWN CLITERAL(Color){ 76, 63, 47, 255 } // Dark Brown - -#define WHITE CLITERAL(Color){ 255, 255, 255, 255 } // White -#define BLACK CLITERAL(Color){ 0, 0, 0, 255 } // Black -#define BLANK CLITERAL(Color){ 0, 0, 0, 0 } // Blank (Transparent) -#define MAGENTA CLITERAL(Color){ 255, 0, 255, 255 } // Magenta -#define RAYWHITE CLITERAL(Color){ 245, 245, 245, 255 } // My own White (raylib logo) - -// Temporal hacks to avoid breaking old codebases using -// deprecated raylib implementation or definitions -#define FormatText TextFormat -#define LoadText LoadFileText -#define GetExtension GetFileExtension -#define GetImageData LoadImageColors -#define FILTER_POINT TEXTURE_FILTER_POINT -#define FILTER_BILINEAR TEXTURE_FILTER_BILINEAR -#define MAP_DIFFUSE MATERIAL_MAP_DIFFUSE -#define PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 PIXELFORMAT_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 - -//---------------------------------------------------------------------------------- -// Structures Definition -//---------------------------------------------------------------------------------- -// Boolean type -#if defined(__STDC__) && __STDC_VERSION__ >= 199901L - #include -#elif !defined(__cplusplus) && !defined(bool) - typedef enum { false, true } bool; -#endif - -// Vector2 type -typedef struct Vector2 { - float x; - float y; -} Vector2; - -// Vector3 type -typedef struct Vector3 { - float x; - float y; - float z; -} Vector3; - -// Vector4 type -typedef struct Vector4 { - float x; - float y; - float z; - float w; -} Vector4; - -// Quaternion type, same as Vector4 -typedef Vector4 Quaternion; - -// Matrix type (OpenGL style 4x4 - right handed, column major) -typedef struct Matrix { - float m0, m4, m8, m12; - float m1, m5, m9, m13; - float m2, m6, m10, m14; - float m3, m7, m11, m15; -} Matrix; - -// Color type, RGBA (32bit) -typedef struct Color { - unsigned char r; - unsigned char g; - unsigned char b; - unsigned char a; -} Color; - -// Rectangle type -typedef struct Rectangle { - float x; - float y; - float width; - float height; -} Rectangle; - -// Image type, bpp always RGBA (32bit) -// NOTE: Data stored in CPU memory (RAM) -typedef struct Image { - void *data; // Image raw data - int width; // Image base width - int height; // Image base height - int mipmaps; // Mipmap levels, 1 by default - int format; // Data format (PixelFormat type) -} Image; - -// Texture type -// NOTE: Data stored in GPU memory -typedef struct Texture { - unsigned int id; // OpenGL texture id - int width; // Texture base width - int height; // Texture base height - int mipmaps; // Mipmap levels, 1 by default - int format; // Data format (PixelFormat type) -} Texture; - -// Texture2D type, same as Texture -typedef Texture Texture2D; - -// TextureCubemap type, actually, same as Texture -typedef Texture TextureCubemap; - -// RenderTexture type, for texture rendering -typedef struct RenderTexture { - unsigned int id; // OpenGL framebuffer object id - Texture texture; // Color buffer attachment texture - Texture depth; // Depth buffer attachment texture -} RenderTexture; - -// RenderTexture2D type, same as RenderTexture -typedef RenderTexture RenderTexture2D; - -// N-Patch layout info -typedef struct NPatchInfo { - Rectangle source; // Texture source rectangle - int left; // Left border offset - int top; // Top border offset - int right; // Right border offset - int bottom; // Bottom border offset - int layout; // Layout of the n-patch: 3x3, 1x3 or 3x1 -} NPatchInfo; - -// Font character info -typedef struct CharInfo { - int value; // Character value (Unicode) - int offsetX; // Character offset X when drawing - int offsetY; // Character offset Y when drawing - int advanceX; // Character advance position X - Image image; // Character image data -} CharInfo; - -// Font type, includes texture and charSet array data -typedef struct Font { - int baseSize; // Base size (default chars height) - int charsCount; // Number of characters - int charsPadding; // Padding around the chars - Texture2D texture; // Characters texture atlas - Rectangle *recs; // Characters rectangles in texture - CharInfo *chars; // Characters info data -} Font; - -#define SpriteFont Font // SpriteFont type fallback, defaults to Font - -// Camera type, defines a camera position/orientation in 3d space -typedef struct Camera3D { - Vector3 position; // Camera position - Vector3 target; // Camera target it looks-at - Vector3 up; // Camera up vector (rotation over its axis) - float fovy; // Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic - int projection; // Camera projection: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC -} Camera3D; - -typedef Camera3D Camera; // Camera type fallback, defaults to Camera3D - -// Camera2D type, defines a 2d camera -typedef struct Camera2D { - Vector2 offset; // Camera offset (displacement from target) - Vector2 target; // Camera target (rotation and zoom origin) - float rotation; // Camera rotation in degrees - float zoom; // Camera zoom (scaling), should be 1.0f by default -} Camera2D; - -// Vertex data definning a mesh -// NOTE: Data stored in CPU memory (and GPU) -typedef struct Mesh { - int vertexCount; // Number of vertices stored in arrays - int triangleCount; // Number of triangles stored (indexed or not) - - // Default vertex data - float *vertices; // Vertex position (XYZ - 3 components per vertex) (shader-location = 0) - float *texcoords; // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) - float *texcoords2; // Vertex second texture coordinates (useful for lightmaps) (shader-location = 5) - float *normals; // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2) - float *tangents; // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4) - unsigned char *colors; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) - unsigned short *indices;// Vertex indices (in case vertex data comes indexed) - - // Animation vertex data - float *animVertices; // Animated vertex positions (after bones transformations) - float *animNormals; // Animated normals (after bones transformations) - int *boneIds; // Vertex bone ids, up to 4 bones influence by vertex (skinning) - float *boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning) - - // OpenGL identifiers - unsigned int vaoId; // OpenGL Vertex Array Object id - unsigned int *vboId; // OpenGL Vertex Buffer Objects id (default vertex data) -} Mesh; - -// Shader type (generic) -typedef struct Shader { - unsigned int id; // Shader program id - int *locs; // Shader locations array (MAX_SHADER_LOCATIONS) -} Shader; - -// Material texture map -typedef struct MaterialMap { - Texture2D texture; // Material map texture - Color color; // Material map color - float value; // Material map value -} MaterialMap; - -// Material type (generic) -typedef struct Material { - Shader shader; // Material shader - MaterialMap *maps; // Material maps array (MAX_MATERIAL_MAPS) - float params[4]; // Material generic parameters (if required) -} Material; - -// Transformation properties -typedef struct Transform { - Vector3 translation; // Translation - Quaternion rotation; // Rotation - Vector3 scale; // Scale -} Transform; - -// Bone information -typedef struct BoneInfo { - char name[32]; // Bone name - int parent; // Bone parent -} BoneInfo; - -// Model type -typedef struct Model { - Matrix transform; // Local transform matrix - - int meshCount; // Number of meshes - int materialCount; // Number of materials - Mesh *meshes; // Meshes array - Material *materials; // Materials array - int *meshMaterial; // Mesh material number - - // Animation data - int boneCount; // Number of bones - BoneInfo *bones; // Bones information (skeleton) - Transform *bindPose; // Bones base transformation (pose) -} Model; - -// Model animation -typedef struct ModelAnimation { - int boneCount; // Number of bones - int frameCount; // Number of animation frames - BoneInfo *bones; // Bones information (skeleton) - Transform **framePoses; // Poses array by frame -} ModelAnimation; - -// Ray type (useful for raycast) -typedef struct Ray { - Vector3 position; // Ray position (origin) - Vector3 direction; // Ray direction -} Ray; - -// Raycast hit information -typedef struct RayHitInfo { - bool hit; // Did the ray hit something? - float distance; // Distance to nearest hit - Vector3 position; // Position of nearest hit - Vector3 normal; // Surface normal of hit -} RayHitInfo; - -// Bounding box type -typedef struct BoundingBox { - Vector3 min; // Minimum vertex box-corner - Vector3 max; // Maximum vertex box-corner -} BoundingBox; - -// Wave type, defines audio wave data -typedef struct Wave { - unsigned int sampleCount; // Total number of samples - unsigned int sampleRate; // Frequency (samples per second) - unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) - unsigned int channels; // Number of channels (1-mono, 2-stereo) - void *data; // Buffer data pointer -} Wave; - -typedef struct rAudioBuffer rAudioBuffer; - -// Audio stream type -// NOTE: Useful to create custom audio streams not bound to a specific file -typedef struct AudioStream { - rAudioBuffer *buffer; // Pointer to internal data used by the audio system - - unsigned int sampleRate; // Frequency (samples per second) - unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) - unsigned int channels; // Number of channels (1-mono, 2-stereo) -} AudioStream; - -// Sound source type -typedef struct Sound { - AudioStream stream; // Audio stream - unsigned int sampleCount; // Total number of samples -} Sound; - -// Music stream type (audio file streaming from memory) -// NOTE: Anything longer than ~10 seconds should be streamed -typedef struct Music { - AudioStream stream; // Audio stream - unsigned int sampleCount; // Total number of samples - bool looping; // Music looping enable - - int ctxType; // Type of music context (audio filetype) - void *ctxData; // Audio context data, depends on type -} Music; - -// Head-Mounted-Display device parameters -typedef struct VrDeviceInfo { - int hResolution; // Horizontal resolution in pixels - int vResolution; // Vertical resolution in pixels - float hScreenSize; // Horizontal size in meters - float vScreenSize; // Vertical size in meters - float vScreenCenter; // Screen center in meters - float eyeToScreenDistance; // Distance between eye and display in meters - float lensSeparationDistance; // Lens separation distance in meters - float interpupillaryDistance; // IPD (distance between pupils) in meters - float lensDistortionValues[4]; // Lens distortion constant parameters - float chromaAbCorrection[4]; // Chromatic aberration correction parameters -} VrDeviceInfo; - -// VR Stereo rendering configuration for simulator -typedef struct VrStereoConfig { - Matrix projection[2]; // VR projection matrices (per eye) - Matrix viewOffset[2]; // VR view offset matrices (per eye) - float leftLensCenter[2]; // VR left lens center - float rightLensCenter[2]; // VR right lens center - float leftScreenCenter[2]; // VR left screen center - float rightScreenCenter[2]; // VR right screen center - float scale[2]; // VR distortion scale - float scaleIn[2]; // VR distortion scale in -} VrStereoConfig; - -//---------------------------------------------------------------------------------- -// Enumerators Definition -//---------------------------------------------------------------------------------- -// System/Window config flags -// NOTE: Every bit registers one state (use it with bit masks) -// By default all flags are set to 0 -typedef enum { - FLAG_VSYNC_HINT = 0x00000040, // Set to try enabling V-Sync on GPU - FLAG_FULLSCREEN_MODE = 0x00000002, // Set to run program in fullscreen - FLAG_WINDOW_RESIZABLE = 0x00000004, // Set to allow resizable window - FLAG_WINDOW_UNDECORATED = 0x00000008, // Set to disable window decoration (frame and buttons) - FLAG_WINDOW_HIDDEN = 0x00000080, // Set to hide window - FLAG_WINDOW_MINIMIZED = 0x00000200, // Set to minimize window (iconify) - FLAG_WINDOW_MAXIMIZED = 0x00000400, // Set to maximize window (expanded to monitor) - FLAG_WINDOW_UNFOCUSED = 0x00000800, // Set to window non focused - FLAG_WINDOW_TOPMOST = 0x00001000, // Set to window always on top - FLAG_WINDOW_ALWAYS_RUN = 0x00000100, // Set to allow windows running while minimized - FLAG_WINDOW_TRANSPARENT = 0x00000010, // Set to allow transparent framebuffer - FLAG_WINDOW_HIGHDPI = 0x00002000, // Set to support HighDPI - FLAG_MSAA_4X_HINT = 0x00000020, // Set to try enabling MSAA 4X - FLAG_INTERLACED_HINT = 0x00010000 // Set to try enabling interlaced video format (for V3D) -} ConfigFlags; - -// Trace log level -typedef enum { - LOG_ALL = 0, // Display all logs - LOG_TRACE, - LOG_DEBUG, - LOG_INFO, - LOG_WARNING, - LOG_ERROR, - LOG_FATAL, - LOG_NONE // Disable logging -} TraceLogLevel; - -// Keyboard keys (US keyboard layout) -// NOTE: Use GetKeyPressed() to allow redefining -// required keys for alternative layouts -typedef enum { - KEY_NULL = 0, - // Alphanumeric keys - KEY_APOSTROPHE = 39, - KEY_COMMA = 44, - KEY_MINUS = 45, - KEY_PERIOD = 46, - KEY_SLASH = 47, - KEY_ZERO = 48, - KEY_ONE = 49, - KEY_TWO = 50, - KEY_THREE = 51, - KEY_FOUR = 52, - KEY_FIVE = 53, - KEY_SIX = 54, - KEY_SEVEN = 55, - KEY_EIGHT = 56, - KEY_NINE = 57, - KEY_SEMICOLON = 59, - KEY_EQUAL = 61, - KEY_A = 65, - KEY_B = 66, - KEY_C = 67, - KEY_D = 68, - KEY_E = 69, - KEY_F = 70, - KEY_G = 71, - KEY_H = 72, - KEY_I = 73, - KEY_J = 74, - KEY_K = 75, - KEY_L = 76, - KEY_M = 77, - KEY_N = 78, - KEY_O = 79, - KEY_P = 80, - KEY_Q = 81, - KEY_R = 82, - KEY_S = 83, - KEY_T = 84, - KEY_U = 85, - KEY_V = 86, - KEY_W = 87, - KEY_X = 88, - KEY_Y = 89, - KEY_Z = 90, - - // Function keys - KEY_SPACE = 32, - KEY_ESCAPE = 256, - KEY_ENTER = 257, - KEY_TAB = 258, - KEY_BACKSPACE = 259, - KEY_INSERT = 260, - KEY_DELETE = 261, - KEY_RIGHT = 262, - KEY_LEFT = 263, - KEY_DOWN = 264, - KEY_UP = 265, - KEY_PAGE_UP = 266, - KEY_PAGE_DOWN = 267, - KEY_HOME = 268, - KEY_END = 269, - KEY_CAPS_LOCK = 280, - KEY_SCROLL_LOCK = 281, - KEY_NUM_LOCK = 282, - KEY_PRINT_SCREEN = 283, - KEY_PAUSE = 284, - KEY_F1 = 290, - KEY_F2 = 291, - KEY_F3 = 292, - KEY_F4 = 293, - KEY_F5 = 294, - KEY_F6 = 295, - KEY_F7 = 296, - KEY_F8 = 297, - KEY_F9 = 298, - KEY_F10 = 299, - KEY_F11 = 300, - KEY_F12 = 301, - KEY_LEFT_SHIFT = 340, - KEY_LEFT_CONTROL = 341, - KEY_LEFT_ALT = 342, - KEY_LEFT_SUPER = 343, - KEY_RIGHT_SHIFT = 344, - KEY_RIGHT_CONTROL = 345, - KEY_RIGHT_ALT = 346, - KEY_RIGHT_SUPER = 347, - KEY_KB_MENU = 348, - KEY_LEFT_BRACKET = 91, - KEY_BACKSLASH = 92, - KEY_RIGHT_BRACKET = 93, - KEY_GRAVE = 96, - - // Keypad keys - KEY_KP_0 = 320, - KEY_KP_1 = 321, - KEY_KP_2 = 322, - KEY_KP_3 = 323, - KEY_KP_4 = 324, - KEY_KP_5 = 325, - KEY_KP_6 = 326, - KEY_KP_7 = 327, - KEY_KP_8 = 328, - KEY_KP_9 = 329, - KEY_KP_DECIMAL = 330, - KEY_KP_DIVIDE = 331, - KEY_KP_MULTIPLY = 332, - KEY_KP_SUBTRACT = 333, - KEY_KP_ADD = 334, - KEY_KP_ENTER = 335, - KEY_KP_EQUAL = 336, - // Android key buttons - KEY_BACK = 4, - KEY_MENU = 82, - KEY_VOLUME_UP = 24, - KEY_VOLUME_DOWN = 25 -} KeyboardKey; - -// Mouse buttons -typedef enum { - MOUSE_LEFT_BUTTON = 0, - MOUSE_RIGHT_BUTTON = 1, - MOUSE_MIDDLE_BUTTON = 2 -} MouseButton; - -// Mouse cursor -typedef enum { - MOUSE_CURSOR_DEFAULT = 0, - MOUSE_CURSOR_ARROW = 1, - MOUSE_CURSOR_IBEAM = 2, - MOUSE_CURSOR_CROSSHAIR = 3, - MOUSE_CURSOR_POINTING_HAND = 4, - MOUSE_CURSOR_RESIZE_EW = 5, // The horizontal resize/move arrow shape - MOUSE_CURSOR_RESIZE_NS = 6, // The vertical resize/move arrow shape - MOUSE_CURSOR_RESIZE_NWSE = 7, // The top-left to bottom-right diagonal resize/move arrow shape - MOUSE_CURSOR_RESIZE_NESW = 8, // The top-right to bottom-left diagonal resize/move arrow shape - MOUSE_CURSOR_RESIZE_ALL = 9, // The omni-directional resize/move cursor shape - MOUSE_CURSOR_NOT_ALLOWED = 10 // The operation-not-allowed shape -} MouseCursor; - -// Gamepad buttons -typedef enum { - // This is here just for error checking - GAMEPAD_BUTTON_UNKNOWN = 0, - - // This is normally a DPAD - GAMEPAD_BUTTON_LEFT_FACE_UP, - GAMEPAD_BUTTON_LEFT_FACE_RIGHT, - GAMEPAD_BUTTON_LEFT_FACE_DOWN, - GAMEPAD_BUTTON_LEFT_FACE_LEFT, - - // This normally corresponds with PlayStation and Xbox controllers - // XBOX: [Y,X,A,B] - // PS3: [Triangle,Square,Cross,Circle] - // No support for 6 button controllers though.. - GAMEPAD_BUTTON_RIGHT_FACE_UP, - GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, - GAMEPAD_BUTTON_RIGHT_FACE_DOWN, - GAMEPAD_BUTTON_RIGHT_FACE_LEFT, - - // Triggers - GAMEPAD_BUTTON_LEFT_TRIGGER_1, - GAMEPAD_BUTTON_LEFT_TRIGGER_2, - GAMEPAD_BUTTON_RIGHT_TRIGGER_1, - GAMEPAD_BUTTON_RIGHT_TRIGGER_2, - - // These are buttons in the center of the gamepad - GAMEPAD_BUTTON_MIDDLE_LEFT, // PS3 Select - GAMEPAD_BUTTON_MIDDLE, // PS Button/XBOX Button - GAMEPAD_BUTTON_MIDDLE_RIGHT, // PS3 Start - - // These are the joystick press in buttons - GAMEPAD_BUTTON_LEFT_THUMB, - GAMEPAD_BUTTON_RIGHT_THUMB -} GamepadButton; - -// Gamepad axis -typedef enum { - // Left stick - GAMEPAD_AXIS_LEFT_X = 0, - GAMEPAD_AXIS_LEFT_Y = 1, - - // Right stick - GAMEPAD_AXIS_RIGHT_X = 2, - GAMEPAD_AXIS_RIGHT_Y = 3, - - // Pressure levels for the back triggers - GAMEPAD_AXIS_LEFT_TRIGGER = 4, // [1..-1] (pressure-level) - GAMEPAD_AXIS_RIGHT_TRIGGER = 5 // [1..-1] (pressure-level) -} GamepadAxis; - -// Material map index -typedef enum { - MATERIAL_MAP_ALBEDO = 0, // MATERIAL_MAP_DIFFUSE - MATERIAL_MAP_METALNESS = 1, // MATERIAL_MAP_SPECULAR - MATERIAL_MAP_NORMAL = 2, - MATERIAL_MAP_ROUGHNESS = 3, - MATERIAL_MAP_OCCLUSION, - MATERIAL_MAP_EMISSION, - MATERIAL_MAP_HEIGHT, - MATERIAL_MAP_BRDG, - MATERIAL_MAP_CUBEMAP, // NOTE: Uses GL_TEXTURE_CUBE_MAP - MATERIAL_MAP_IRRADIANCE, // NOTE: Uses GL_TEXTURE_CUBE_MAP - MATERIAL_MAP_PREFILTER // NOTE: Uses GL_TEXTURE_CUBE_MAP -} MaterialMapIndex; - -#define MATERIAL_MAP_DIFFUSE MATERIAL_MAP_ALBEDO -#define MATERIAL_MAP_SPECULAR MATERIAL_MAP_METALNESS - -// Shader location index -typedef enum { - SHADER_LOC_VERTEX_POSITION = 0, - SHADER_LOC_VERTEX_TEXCOORD01, - SHADER_LOC_VERTEX_TEXCOORD02, - SHADER_LOC_VERTEX_NORMAL, - SHADER_LOC_VERTEX_TANGENT, - SHADER_LOC_VERTEX_COLOR, - SHADER_LOC_MATRIX_MVP, - SHADER_LOC_MATRIX_VIEW, - SHADER_LOC_MATRIX_PROJECTION, - SHADER_LOC_MATRIX_MODEL, - SHADER_LOC_MATRIX_NORMAL, - SHADER_LOC_VECTOR_VIEW, - SHADER_LOC_COLOR_DIFFUSE, - SHADER_LOC_COLOR_SPECULAR, - SHADER_LOC_COLOR_AMBIENT, - SHADER_LOC_MAP_ALBEDO, // SHADER_LOC_MAP_DIFFUSE - SHADER_LOC_MAP_METALNESS, // SHADER_LOC_MAP_SPECULAR - SHADER_LOC_MAP_NORMAL, - SHADER_LOC_MAP_ROUGHNESS, - SHADER_LOC_MAP_OCCLUSION, - SHADER_LOC_MAP_EMISSION, - SHADER_LOC_MAP_HEIGHT, - SHADER_LOC_MAP_CUBEMAP, - SHADER_LOC_MAP_IRRADIANCE, - SHADER_LOC_MAP_PREFILTER, - SHADER_LOC_MAP_BRDF -} ShaderLocationIndex; - -#define SHADER_LOC_MAP_DIFFUSE SHADER_LOC_MAP_ALBEDO -#define SHADER_LOC_MAP_SPECULAR SHADER_LOC_MAP_METALNESS - -// Shader uniform data type -typedef enum { - SHADER_UNIFORM_FLOAT = 0, - SHADER_UNIFORM_VEC2, - SHADER_UNIFORM_VEC3, - SHADER_UNIFORM_VEC4, - SHADER_UNIFORM_INT, - SHADER_UNIFORM_IVEC2, - SHADER_UNIFORM_IVEC3, - SHADER_UNIFORM_IVEC4, - SHADER_UNIFORM_SAMPLER2D -} ShaderUniformDataType; - -// Pixel formats -// NOTE: Support depends on OpenGL version and platform -typedef enum { - PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha) - PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA, // 8*2 bpp (2 channels) - PIXELFORMAT_UNCOMPRESSED_R5G6B5, // 16 bpp - PIXELFORMAT_UNCOMPRESSED_R8G8B8, // 24 bpp - PIXELFORMAT_UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha) - PIXELFORMAT_UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha) - PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, // 32 bpp - PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float) - PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float) - PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float) - PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha) - PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha) - PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp - PIXELFORMAT_COMPRESSED_DXT5_RGBA, // 8 bpp - PIXELFORMAT_COMPRESSED_ETC1_RGB, // 4 bpp - PIXELFORMAT_COMPRESSED_ETC2_RGB, // 4 bpp - PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA, // 8 bpp - PIXELFORMAT_COMPRESSED_PVRT_RGB, // 4 bpp - PIXELFORMAT_COMPRESSED_PVRT_RGBA, // 4 bpp - PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA, // 8 bpp - PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA // 2 bpp -} PixelFormat; - -// Texture parameters: filter mode -// NOTE 1: Filtering considers mipmaps if available in the texture -// NOTE 2: Filter is accordingly set for minification and magnification -typedef enum { - TEXTURE_FILTER_POINT = 0, // No filter, just pixel aproximation - TEXTURE_FILTER_BILINEAR, // Linear filtering - TEXTURE_FILTER_TRILINEAR, // Trilinear filtering (linear with mipmaps) - TEXTURE_FILTER_ANISOTROPIC_4X, // Anisotropic filtering 4x - TEXTURE_FILTER_ANISOTROPIC_8X, // Anisotropic filtering 8x - TEXTURE_FILTER_ANISOTROPIC_16X, // Anisotropic filtering 16x -} TextureFilter; - -// Texture parameters: wrap mode -typedef enum { - TEXTURE_WRAP_REPEAT = 0, // Repeats texture in tiled mode - TEXTURE_WRAP_CLAMP, // Clamps texture to edge pixel in tiled mode - TEXTURE_WRAP_MIRROR_REPEAT, // Mirrors and repeats the texture in tiled mode - TEXTURE_WRAP_MIRROR_CLAMP // Mirrors and clamps to border the texture in tiled mode -} TextureWrap; - -// Cubemap layouts -typedef enum { - CUBEMAP_LAYOUT_AUTO_DETECT = 0, // Automatically detect layout type - CUBEMAP_LAYOUT_LINE_VERTICAL, // Layout is defined by a vertical line with faces - CUBEMAP_LAYOUT_LINE_HORIZONTAL, // Layout is defined by an horizontal line with faces - CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR, // Layout is defined by a 3x4 cross with cubemap faces - CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE, // Layout is defined by a 4x3 cross with cubemap faces - CUBEMAP_LAYOUT_PANORAMA // Layout is defined by a panorama image (equirectangular map) -} CubemapLayout; - -// Font type, defines generation method -typedef enum { - FONT_DEFAULT = 0, // Default font generation, anti-aliased - FONT_BITMAP, // Bitmap font generation, no anti-aliasing - FONT_SDF // SDF font generation, requires external shader -} FontType; - -// Color blending modes (pre-defined) -typedef enum { - BLEND_ALPHA = 0, // Blend textures considering alpha (default) - BLEND_ADDITIVE, // Blend textures adding colors - BLEND_MULTIPLIED, // Blend textures multiplying colors - BLEND_ADD_COLORS, // Blend textures adding colors (alternative) - BLEND_SUBTRACT_COLORS, // Blend textures subtracting colors (alternative) - BLEND_CUSTOM // Belnd textures using custom src/dst factors (use rlSetBlendMode()) -} BlendMode; - -// Gestures -// NOTE: It could be used as flags to enable only some gestures -typedef enum { - GESTURE_NONE = 0, - GESTURE_TAP = 1, - GESTURE_DOUBLETAP = 2, - GESTURE_HOLD = 4, - GESTURE_DRAG = 8, - GESTURE_SWIPE_RIGHT = 16, - GESTURE_SWIPE_LEFT = 32, - GESTURE_SWIPE_UP = 64, - GESTURE_SWIPE_DOWN = 128, - GESTURE_PINCH_IN = 256, - GESTURE_PINCH_OUT = 512 -} Gestures; - -// Camera system modes -typedef enum { - CAMERA_CUSTOM = 0, - CAMERA_FREE, - CAMERA_ORBITAL, - CAMERA_FIRST_PERSON, - CAMERA_THIRD_PERSON -} CameraMode; - -// Camera projection -typedef enum { - CAMERA_PERSPECTIVE = 0, - CAMERA_ORTHOGRAPHIC -} CameraProjection; - -// N-patch layout -typedef enum { - NPATCH_NINE_PATCH = 0, // Npatch layout: 3x3 tiles - NPATCH_THREE_PATCH_VERTICAL, // Npatch layout: 1x3 tiles - NPATCH_THREE_PATCH_HORIZONTAL // Npatch layout: 3x1 tiles -} NPatchLayout; - -// Callbacks to hook some internal functions -// WARNING: This callbacks are intended for advance users -typedef void (*TraceLogCallback)(int logLevel, const char *text, va_list args); // Logging: Redirect trace log messages -typedef unsigned char* (*LoadFileDataCallback)(const char* fileName, unsigned int* bytesRead); // FileIO: Load binary data -typedef bool (*SaveFileDataCallback)(const char *fileName, void *data, unsigned int bytesToWrite); // FileIO: Save binary data -typedef char *(*LoadFileTextCallback)(const char* fileName); // FileIO: Load text data -typedef bool (*SaveFileTextCallback)(const char *fileName, char *text); // FileIO: Save text data - - -#if defined(__cplusplus) -extern "C" { // Prevents name mangling of functions -#endif - -//------------------------------------------------------------------------------------ -// Global Variables Definition -//------------------------------------------------------------------------------------ -// It's lonely here... - -//------------------------------------------------------------------------------------ -// Window and Graphics Device Functions (Module: core) -//------------------------------------------------------------------------------------ - +```c // Window-related functions RLAPI void InitWindow(int width, int height, const char *title); // Initialize window and OpenGL context RLAPI bool WindowShouldClose(void); // Check if KEY_ESCAPE pressed or Close icon pressed @@ -917,7 +11,7 @@ RLAPI bool IsWindowMaximized(void); // Check if wi RLAPI bool IsWindowFocused(void); // Check if window is currently focused (only PLATFORM_DESKTOP) RLAPI bool IsWindowResized(void); // Check if window has been resized last frame RLAPI bool IsWindowState(unsigned int flag); // Check if one specific window flag is enabled -RLAPI void SetWindowState(unsigned int flags); // Set window configuration state using flags +RLAPI void SetWindowState(unsigned int flags); // Set window configuration state using flags (only PLATFORM_DESKTOP) RLAPI void ClearWindowState(unsigned int flags); // Clear window configuration state flags RLAPI void ToggleFullscreen(void); // Toggle window state: fullscreen/windowed (only PLATFORM_DESKTOP) RLAPI void MaximizeWindow(void); // Set window state: maximized, if resizable (only PLATFORM_DESKTOP) @@ -929,14 +23,17 @@ RLAPI void SetWindowPosition(int x, int y); // Set window RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window (fullscreen mode) RLAPI void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) RLAPI void SetWindowSize(int width, int height); // Set window dimensions +RLAPI void SetWindowOpacity(float opacity); // Set window opacity [0.0f..1.0f] (only PLATFORM_DESKTOP) RLAPI void *GetWindowHandle(void); // Get native window handle RLAPI int GetScreenWidth(void); // Get current screen width RLAPI int GetScreenHeight(void); // Get current screen height +RLAPI int GetRenderWidth(void); // Get current render width (it considers HiDPI) +RLAPI int GetRenderHeight(void); // Get current render height (it considers HiDPI) RLAPI int GetMonitorCount(void); // Get number of connected monitors RLAPI int GetCurrentMonitor(void); // Get current connected monitor RLAPI Vector2 GetMonitorPosition(int monitor); // Get specified monitor position -RLAPI int GetMonitorWidth(int monitor); // Get specified monitor width (max available by monitor) -RLAPI int GetMonitorHeight(int monitor); // Get specified monitor height (max available by monitor) +RLAPI int GetMonitorWidth(int monitor); // Get specified monitor width (current video mode used by monitor) +RLAPI int GetMonitorHeight(int monitor); // Get specified monitor height (current video mode used by monitor) RLAPI int GetMonitorPhysicalWidth(int monitor); // Get specified monitor physical width in millimetres RLAPI int GetMonitorPhysicalHeight(int monitor); // Get specified monitor physical height in millimetres RLAPI int GetMonitorRefreshRate(int monitor); // Get specified monitor refresh rate @@ -945,6 +42,16 @@ RLAPI Vector2 GetWindowScaleDPI(void); // Get window RLAPI const char *GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the primary monitor RLAPI void SetClipboardText(const char *text); // Set clipboard text content RLAPI const char *GetClipboardText(void); // Get clipboard text content +RLAPI void EnableEventWaiting(void); // Enable waiting for events on EndDrawing(), no automatic event polling +RLAPI void DisableEventWaiting(void); // Disable waiting for events on EndDrawing(), automatic events polling + +// Custom frame control functions +// NOTE: Those functions are intended for advance users that want full control over the frame processing +// By default EndDrawing() does this job: draws everything + SwapScreenBuffer() + manage frame timming + PollInputEvents() +// To avoid that behaviour and control frame processes manually, enable in config.h: SUPPORT_CUSTOM_FRAME_CONTROL +RLAPI void SwapScreenBuffer(void); // Swap back buffer with front buffer (screen drawing) +RLAPI void PollInputEvents(void); // Register all input events +RLAPI void WaitTime(double seconds); // Wait for some time (halt program execution) // Cursor-related functions RLAPI void ShowCursor(void); // Shows cursor @@ -952,21 +59,21 @@ RLAPI void HideCursor(void); // Hides curso RLAPI bool IsCursorHidden(void); // Check if cursor is not visible RLAPI void EnableCursor(void); // Enables cursor (unlock cursor) RLAPI void DisableCursor(void); // Disables cursor (lock cursor) -RLAPI bool IsCursorOnScreen(void); // Check if cursor is on the current screen. +RLAPI bool IsCursorOnScreen(void); // Check if cursor is on the screen // Drawing-related functions RLAPI void ClearBackground(Color color); // Set background color (framebuffer clear color) RLAPI void BeginDrawing(void); // Setup canvas (framebuffer) to start drawing RLAPI void EndDrawing(void); // End canvas drawing and swap buffers (double buffering) -RLAPI void BeginMode2D(Camera2D camera); // Initialize 2D mode with custom camera (2D) +RLAPI void BeginMode2D(Camera2D camera); // Begin 2D mode with custom camera (2D) RLAPI void EndMode2D(void); // Ends 2D mode with custom camera -RLAPI void BeginMode3D(Camera3D camera); // Initializes 3D mode with custom camera (3D) +RLAPI void BeginMode3D(Camera3D camera); // Begin 3D mode with custom camera (3D) RLAPI void EndMode3D(void); // Ends 3D mode and returns to default 2D orthographic mode -RLAPI void BeginTextureMode(RenderTexture2D target); // Initializes render texture for drawing +RLAPI void BeginTextureMode(RenderTexture2D target); // Begin drawing to render texture RLAPI void EndTextureMode(void); // Ends drawing to render texture RLAPI void BeginShaderMode(Shader shader); // Begin custom shader drawing RLAPI void EndShaderMode(void); // End custom shader drawing (use default shader) -RLAPI void BeginBlendMode(int mode); // Begin blending mode (alpha, additive, multiplied) +RLAPI void BeginBlendMode(int mode); // Begin blending mode (alpha, additive, multiplied, subtract, custom) RLAPI void EndBlendMode(void); // End blending mode (reset to default: alpha blending) RLAPI void BeginScissorMode(int x, int y, int width, int height); // Begin scissor mode (define screen area for following drawing) RLAPI void EndScissorMode(void); // End scissor mode @@ -990,31 +97,34 @@ RLAPI void SetShaderValueTexture(Shader shader, int locIndex, Texture2D texture) RLAPI void UnloadShader(Shader shader); // Unload shader from GPU memory (VRAM) // Screen-space-related functions -RLAPI Ray GetMouseRay(Vector2 mousePosition, Camera camera); // Returns a ray trace from mouse position -RLAPI Matrix GetCameraMatrix(Camera camera); // Returns camera transform matrix (view matrix) -RLAPI Matrix GetCameraMatrix2D(Camera2D camera); // Returns camera 2d transform matrix -RLAPI Vector2 GetWorldToScreen(Vector3 position, Camera camera); // Returns the screen space position for a 3d world space position -RLAPI Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); // Returns size position for a 3d world space position -RLAPI Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); // Returns the screen space position for a 2d camera world space position -RLAPI Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); // Returns the world space position for a 2d camera screen space position +RLAPI Ray GetMouseRay(Vector2 mousePosition, Camera camera); // Get a ray trace from mouse position +RLAPI Matrix GetCameraMatrix(Camera camera); // Get camera transform matrix (view matrix) +RLAPI Matrix GetCameraMatrix2D(Camera2D camera); // Get camera 2d transform matrix +RLAPI Vector2 GetWorldToScreen(Vector3 position, Camera camera); // Get the screen space position for a 3d world space position +RLAPI Vector2 GetScreenToWorld2D(Vector2 position, Camera2D camera); // Get the world space position for a 2d camera screen space position +RLAPI Vector2 GetWorldToScreenEx(Vector3 position, Camera camera, int width, int height); // Get size position for a 3d world space position +RLAPI Vector2 GetWorldToScreen2D(Vector2 position, Camera2D camera); // Get the screen space position for a 2d camera world space position // Timing-related functions RLAPI void SetTargetFPS(int fps); // Set target FPS (maximum) -RLAPI int GetFPS(void); // Returns current FPS -RLAPI float GetFrameTime(void); // Returns time in seconds for last frame drawn (delta time) -RLAPI double GetTime(void); // Returns elapsed time in seconds since InitWindow() +RLAPI int GetFPS(void); // Get current FPS +RLAPI float GetFrameTime(void); // Get time in seconds for last frame drawn (delta time) +RLAPI double GetTime(void); // Get elapsed time in seconds since InitWindow() // Misc. functions -RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included) +RLAPI int GetRandomValue(int min, int max); // Get a random value between min and max (both included) +RLAPI void SetRandomSeed(unsigned int seed); // Set the seed for the random number generator RLAPI void TakeScreenshot(const char *fileName); // Takes a screenshot of current screen (filename extension defines format) RLAPI void SetConfigFlags(unsigned int flags); // Setup init configuration flags (view FLAGS) -RLAPI void TraceLog(int logLevel, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR) +RLAPI void TraceLog(int logLevel, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) RLAPI void SetTraceLogLevel(int logLevel); // Set the current threshold (minimum) log level RLAPI void *MemAlloc(int size); // Internal memory allocator RLAPI void *MemRealloc(void *ptr, int size); // Internal memory reallocator RLAPI void MemFree(void *ptr); // Internal memory free +RLAPI void OpenURL(const char *url); // Open URL with default system browser (if available) + // Set custom callbacks // WARNING: Callbacks setup is intended for advance users RLAPI void SetTraceLogCallback(TraceLogCallback callback); // Set custom trace log @@ -1024,90 +134,92 @@ RLAPI void SetLoadFileTextCallback(LoadFileTextCallback callback); // Set custom RLAPI void SetSaveFileTextCallback(SaveFileTextCallback callback); // Set custom file text data saver // Files management functions -RLAPI unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead); // Load file data as byte array (read) +RLAPI unsigned char *LoadFileData(const char *fileName, unsigned int *bytesRead); // Load file data as byte array (read) RLAPI void UnloadFileData(unsigned char *data); // Unload file data allocated by LoadFileData() -RLAPI bool SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite); // Save data to file from byte array (write), returns true on success +RLAPI bool SaveFileData(const char *fileName, void *data, unsigned int bytesToWrite); // Save data to file from byte array (write), returns true on success +RLAPI bool ExportDataAsCode(const char *data, unsigned int size, const char *fileName); // Export data to code (.h), returns true on success RLAPI char *LoadFileText(const char *fileName); // Load text data from file (read), returns a '\0' terminated string -RLAPI void UnloadFileText(unsigned char *text); // Unload file text data allocated by LoadFileText() +RLAPI void UnloadFileText(char *text); // Unload file text data allocated by LoadFileText() RLAPI bool SaveFileText(const char *fileName, char *text); // Save text data to file (write), string must be '\0' terminated, returns true on success RLAPI bool FileExists(const char *fileName); // Check if file exists RLAPI bool DirectoryExists(const char *dirPath); // Check if a directory path exists -RLAPI bool IsFileExtension(const char *fileName, const char *ext);// Check file extension (including point: .png, .wav) -RLAPI const char *GetFileExtension(const char *fileName); // Get pointer to extension for a filename string (includes dot: ".png") +RLAPI bool IsFileExtension(const char *fileName, const char *ext); // Check file extension (including point: .png, .wav) +RLAPI int GetFileLength(const char *fileName); // Get file length in bytes (NOTE: GetFileSize() conflicts with windows.h) +RLAPI const char *GetFileExtension(const char *fileName); // Get pointer to extension for a filename string (includes dot: '.png') RLAPI const char *GetFileName(const char *filePath); // Get pointer to filename for a path string RLAPI const char *GetFileNameWithoutExt(const char *filePath); // Get filename string without extension (uses static string) RLAPI const char *GetDirectoryPath(const char *filePath); // Get full path for a given fileName with path (uses static string) RLAPI const char *GetPrevDirectoryPath(const char *dirPath); // Get previous directory path for a given path (uses static string) RLAPI const char *GetWorkingDirectory(void); // Get current working directory (uses static string) -RLAPI char **GetDirectoryFiles(const char *dirPath, int *count); // Get filenames in a directory path (memory should be freed) -RLAPI void ClearDirectoryFiles(void); // Clear directory files paths buffers (free memory) +RLAPI const char *GetApplicationDirectory(void); // Get the directory if the running application (uses static string) RLAPI bool ChangeDirectory(const char *dir); // Change working directory, return true on success -RLAPI bool IsFileDropped(void); // Check if a file has been dropped into window -RLAPI char **GetDroppedFiles(int *count); // Get dropped files names (memory should be freed) -RLAPI void ClearDroppedFiles(void); // Clear dropped files paths buffer (free memory) +RLAPI bool IsPathFile(const char *path); // Check if a given path is a file or a directory +RLAPI FilePathList LoadDirectoryFiles(const char *dirPath); // Load directory filepaths +RLAPI FilePathList LoadDirectoryFilesEx(const char *basePath, const char *filter, bool scanSubdirs); // Load directory filepaths with extension filtering and recursive directory scan +RLAPI void UnloadDirectoryFiles(FilePathList files); // Unload filepaths +RLAPI bool IsFileDropped(void); // Check if dropped filepaths RLAPI long GetFileModTime(const char *fileName); // Get file modification time (last write time) -RLAPI unsigned char *CompressData(unsigned char *data, int dataLength, int *compDataLength); // Compress data (DEFLATE algorithm) -RLAPI unsigned char *DecompressData(unsigned char *compData, int compDataLength, int *dataLength); // Decompress data (DEFLATE algorithm) - -// Persistent storage management -RLAPI bool SaveStorageValue(unsigned int position, int value); // Save integer value to storage file (to defined position), returns true on success -RLAPI int LoadStorageValue(unsigned int position); // Load integer value from storage file (from defined position) - -RLAPI void OpenURL(const char *url); // Open URL with default system browser (if available) +// Compression/Encoding functionality +RLAPI unsigned char *CompressData(const unsigned char *data, int dataSize, int *compDataSize); // Compress data (DEFLATE algorithm), memory must be MemFree() +RLAPI unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSize); // Decompress data (DEFLATE algorithm), memory must be MemFree() +RLAPI char *EncodeDataBase64(const unsigned char *data, int dataSize, int *outputSize); // Encode data to Base64 string, memory must be MemFree() +RLAPI unsigned char *DecodeDataBase64(const unsigned char *data, int *outputSize); // Decode Base64 string data, memory must be MemFree() //------------------------------------------------------------------------------------ // Input Handling Functions (Module: core) //------------------------------------------------------------------------------------ // Input-related functions: keyboard -RLAPI bool IsKeyPressed(int key); // Detect if a key has been pressed once -RLAPI bool IsKeyDown(int key); // Detect if a key is being pressed -RLAPI bool IsKeyReleased(int key); // Detect if a key has been released once -RLAPI bool IsKeyUp(int key); // Detect if a key is NOT being pressed +RLAPI bool IsKeyPressed(int key); // Check if a key has been pressed once +RLAPI bool IsKeyDown(int key); // Check if a key is being pressed +RLAPI bool IsKeyReleased(int key); // Check if a key has been released once +RLAPI bool IsKeyUp(int key); // Check if a key is NOT being pressed RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC) -RLAPI int GetKeyPressed(void); // Get key pressed (keycode), call it multiple times for keys queued -RLAPI int GetCharPressed(void); // Get char pressed (unicode), call it multiple times for chars queued +RLAPI int GetKeyPressed(void); // Get key pressed (keycode), call it multiple times for keys queued, returns 0 when the queue is empty +RLAPI int GetCharPressed(void); // Get char pressed (unicode), call it multiple times for chars queued, returns 0 when the queue is empty // Input-related functions: gamepads -RLAPI bool IsGamepadAvailable(int gamepad); // Detect if a gamepad is available -RLAPI bool IsGamepadName(int gamepad, const char *name); // Check gamepad name (if available) -RLAPI const char *GetGamepadName(int gamepad); // Return gamepad internal name id -RLAPI bool IsGamepadButtonPressed(int gamepad, int button); // Detect if a gamepad button has been pressed once -RLAPI bool IsGamepadButtonDown(int gamepad, int button); // Detect if a gamepad button is being pressed -RLAPI bool IsGamepadButtonReleased(int gamepad, int button); // Detect if a gamepad button has been released once -RLAPI bool IsGamepadButtonUp(int gamepad, int button); // Detect if a gamepad button is NOT being pressed +RLAPI bool IsGamepadAvailable(int gamepad); // Check if a gamepad is available +RLAPI const char *GetGamepadName(int gamepad); // Get gamepad internal name id +RLAPI bool IsGamepadButtonPressed(int gamepad, int button); // Check if a gamepad button has been pressed once +RLAPI bool IsGamepadButtonDown(int gamepad, int button); // Check if a gamepad button is being pressed +RLAPI bool IsGamepadButtonReleased(int gamepad, int button); // Check if a gamepad button has been released once +RLAPI bool IsGamepadButtonUp(int gamepad, int button); // Check if a gamepad button is NOT being pressed RLAPI int GetGamepadButtonPressed(void); // Get the last gamepad button pressed -RLAPI int GetGamepadAxisCount(int gamepad); // Return gamepad axis count for a gamepad -RLAPI float GetGamepadAxisMovement(int gamepad, int axis); // Return axis movement value for a gamepad axis +RLAPI int GetGamepadAxisCount(int gamepad); // Get gamepad axis count for a gamepad +RLAPI float GetGamepadAxisMovement(int gamepad, int axis); // Get axis movement value for a gamepad axis RLAPI int SetGamepadMappings(const char *mappings); // Set internal gamepad mappings (SDL_GameControllerDB) // Input-related functions: mouse -RLAPI bool IsMouseButtonPressed(int button); // Detect if a mouse button has been pressed once -RLAPI bool IsMouseButtonDown(int button); // Detect if a mouse button is being pressed -RLAPI bool IsMouseButtonReleased(int button); // Detect if a mouse button has been released once -RLAPI bool IsMouseButtonUp(int button); // Detect if a mouse button is NOT being pressed -RLAPI int GetMouseX(void); // Returns mouse position X -RLAPI int GetMouseY(void); // Returns mouse position Y -RLAPI Vector2 GetMousePosition(void); // Returns mouse position XY +RLAPI bool IsMouseButtonPressed(int button); // Check if a mouse button has been pressed once +RLAPI bool IsMouseButtonDown(int button); // Check if a mouse button is being pressed +RLAPI bool IsMouseButtonReleased(int button); // Check if a mouse button has been released once +RLAPI bool IsMouseButtonUp(int button); // Check if a mouse button is NOT being pressed +RLAPI int GetMouseX(void); // Get mouse position X +RLAPI int GetMouseY(void); // Get mouse position Y +RLAPI Vector2 GetMousePosition(void); // Get mouse position XY +RLAPI Vector2 GetMouseDelta(void); // Get mouse delta between frames RLAPI void SetMousePosition(int x, int y); // Set mouse position XY RLAPI void SetMouseOffset(int offsetX, int offsetY); // Set mouse offset RLAPI void SetMouseScale(float scaleX, float scaleY); // Set mouse scaling -RLAPI float GetMouseWheelMove(void); // Returns mouse wheel movement Y +RLAPI float GetMouseWheelMove(void); // Get mouse wheel movement for X or Y, whichever is larger +RLAPI Vector2 GetMouseWheelMoveV(void); // Get mouse wheel movement for both X and Y RLAPI void SetMouseCursor(int cursor); // Set mouse cursor // Input-related functions: touch -RLAPI int GetTouchX(void); // Returns touch position X for touch point 0 (relative to screen size) -RLAPI int GetTouchY(void); // Returns touch position Y for touch point 0 (relative to screen size) -RLAPI Vector2 GetTouchPosition(int index); // Returns touch position XY for a touch point index (relative to screen size) +RLAPI int GetTouchX(void); // Get touch position X for touch point 0 (relative to screen size) +RLAPI int GetTouchY(void); // Get touch position Y for touch point 0 (relative to screen size) +RLAPI Vector2 GetTouchPosition(int index); // Get touch position XY for a touch point index (relative to screen size) +RLAPI int GetTouchPointId(int index); // Get touch point identifier for given index +RLAPI int GetTouchPointCount(void); // Get number of touch points //------------------------------------------------------------------------------------ -// Gestures and Touch Handling Functions (Module: gestures) +// Gestures and Touch Handling Functions (Module: rgestures) //------------------------------------------------------------------------------------ RLAPI void SetGesturesEnabled(unsigned int flags); // Enable a set of gestures using flags RLAPI bool IsGestureDetected(int gesture); // Check if a gesture have been detected RLAPI int GetGestureDetected(void); // Get latest detected gesture -RLAPI int GetTouchPointsCount(void); // Get touch points count RLAPI float GetGestureHoldDuration(void); // Get gesture hold time in milliseconds RLAPI Vector2 GetGestureDragVector(void); // Get gesture drag vector RLAPI float GetGestureDragAngle(void); // Get gesture drag angle @@ -1115,7 +227,7 @@ RLAPI Vector2 GetGesturePinchVector(void); // Get gesture pinch del RLAPI float GetGesturePinchAngle(void); // Get gesture pinch angle //------------------------------------------------------------------------------------ -// Camera System Functions (Module: camera) +// Camera System Functions (Module: rcamera) //------------------------------------------------------------------------------------ RLAPI void SetCameraMode(Camera camera, int mode); // Set camera mode (multiple camera modes available) RLAPI void UpdateCamera(Camera *camera); // Update camera position for selected mode @@ -1131,7 +243,7 @@ RLAPI void SetCameraMoveControls(int keyFront, int keyBack, int keyRight, int ke // Set texture and rectangle to be used on shapes drawing // NOTE: It can be useful when using basic shapes and one single font, // defining a font char white rectangle would allow drawing everything in a single draw call -RLAPI void SetShapesTexture(Texture2D texture, Rectangle source); +RLAPI void SetShapesTexture(Texture2D texture, Rectangle source); // Set texture and rectangle to be used on shapes drawing // Basic shapes drawing functions RLAPI void DrawPixel(int posX, int posY, Color color); // Draw a pixel @@ -1140,8 +252,9 @@ RLAPI void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Colo RLAPI void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); // Draw a line (Vector version) RLAPI void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line defining thickness RLAPI void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line using cubic-bezier curves in-out -RLAPI void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color); //Draw line using quadratic bezier curves with a control point -RLAPI void DrawLineStrip(Vector2 *points, int pointsCount, Color color); // Draw lines sequence +RLAPI void DrawLineBezierQuad(Vector2 startPos, Vector2 endPos, Vector2 controlPos, float thick, Color color); // Draw line using quadratic bezier curves with a control point +RLAPI void DrawLineBezierCubic(Vector2 startPos, Vector2 endPos, Vector2 startControlPos, Vector2 endControlPos, float thick, Color color); // Draw line using cubic bezier curves with 2 control points +RLAPI void DrawLineStrip(Vector2 *points, int pointCount, Color color); // Draw lines sequence RLAPI void DrawCircle(int centerX, int centerY, float radius, Color color); // Draw a color-filled circle RLAPI void DrawCircleSector(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw a piece of a circle RLAPI void DrawCircleSectorLines(Vector2 center, float radius, float startAngle, float endAngle, int segments, Color color); // Draw circle sector outline @@ -1160,15 +273,16 @@ RLAPI void DrawRectangleGradientV(int posX, int posY, int width, int height, Col RLAPI void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2);// Draw a horizontal-gradient-filled rectangle RLAPI void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // Draw a gradient-filled rectangle with custom vertex colors RLAPI void DrawRectangleLines(int posX, int posY, int width, int height, Color color); // Draw rectangle outline -RLAPI void DrawRectangleLinesEx(Rectangle rec, int lineThick, Color color); // Draw rectangle outline with extended parameters +RLAPI void DrawRectangleLinesEx(Rectangle rec, float lineThick, Color color); // Draw rectangle outline with extended parameters RLAPI void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); // Draw rectangle with rounded edges -RLAPI void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, int lineThick, Color color); // Draw rectangle with rounded edges outline +RLAPI void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, float lineThick, Color color); // Draw rectangle with rounded edges outline RLAPI void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw a color-filled triangle (vertex in counter-clockwise order!) RLAPI void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle outline (vertex in counter-clockwise order!) -RLAPI void DrawTriangleFan(Vector2 *points, int pointsCount, Color color); // Draw a triangle fan defined by points (first vertex is the center) -RLAPI void DrawTriangleStrip(Vector2 *points, int pointsCount, Color color); // Draw a triangle strip defined by points +RLAPI void DrawTriangleFan(Vector2 *points, int pointCount, Color color); // Draw a triangle fan defined by points (first vertex is the center) +RLAPI void DrawTriangleStrip(Vector2 *points, int pointCount, Color color); // Draw a triangle strip defined by points RLAPI void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a regular polygon (Vector version) RLAPI void DrawPolyLines(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a polygon outline of n sides +RLAPI void DrawPolyLinesEx(Vector2 center, int sides, float radius, float rotation, float lineThick, Color color); // Draw a polygon outline of n sides with extended parameters // Basic shapes collision detection functions RLAPI bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles @@ -1178,6 +292,7 @@ RLAPI bool CheckCollisionPointRec(Vector2 point, Rectangle rec); RLAPI bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); // Check if point is inside circle RLAPI bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); // Check if point is inside a triangle RLAPI bool CheckCollisionLines(Vector2 startPos1, Vector2 endPos1, Vector2 startPos2, Vector2 endPos2, Vector2 *collisionPoint); // Check the collision between two lines defined by two points each, returns collision point by reference +RLAPI bool CheckCollisionPointLine(Vector2 point, Vector2 p1, Vector2 p2, int threshold); // Check if point belongs to line created between two points [p1] and [p2] with defined margin in pixels [threshold] RLAPI Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); // Get collision rectangle for two rectangles collision //------------------------------------------------------------------------------------ @@ -1189,7 +304,9 @@ RLAPI Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); RLAPI Image LoadImage(const char *fileName); // Load image from file into CPU memory (RAM) RLAPI Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize); // Load image from RAW file data RLAPI Image LoadImageAnim(const char *fileName, int *frames); // Load image sequence from file (frames appended to image.data) -RLAPI Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load image from memory buffer, fileType refers to extension: i.e. ".png" +RLAPI Image LoadImageFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load image from memory buffer, fileType refers to extension: i.e. '.png' +RLAPI Image LoadImageFromTexture(Texture2D texture); // Load image from GPU texture data +RLAPI Image LoadImageFromScreen(void); // Load image from screen buffer and (screenshot) RLAPI void UnloadImage(Image image); // Unload image from CPU memory (RAM) RLAPI bool ExportImage(Image image, const char *fileName); // Export image data to file, returns true on success RLAPI bool ExportImageAsCode(Image image, const char *fileName); // Export image as code file defining an array of bytes, returns true on success @@ -1201,8 +318,7 @@ RLAPI Image GenImageGradientH(int width, int height, Color left, Color right); RLAPI Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); // Generate image: radial gradient RLAPI Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); // Generate image: checked RLAPI Image GenImageWhiteNoise(int width, int height, float factor); // Generate image: white noise -RLAPI Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); // Generate image: perlin noise -RLAPI Image GenImageCellular(int width, int height, int tileSize); // Generate image: cellular algorithm. Bigger tileSize means bigger cells +RLAPI Image GenImageCellular(int width, int height, int tileSize); // Generate image: cellular algorithm, bigger tileSize means bigger cells // Image manipulation functions RLAPI Image ImageCopy(Image image); // Create an image duplicate (useful for transformations) @@ -1219,7 +335,7 @@ RLAPI void ImageAlphaPremultiply(Image *image); RLAPI void ImageResize(Image *image, int newWidth, int newHeight); // Resize image (Bicubic scaling algorithm) RLAPI void ImageResizeNN(Image *image, int newWidth,int newHeight); // Resize image (Nearest-Neighbor scaling algorithm) RLAPI void ImageResizeCanvas(Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color fill); // Resize canvas and fill with color -RLAPI void ImageMipmaps(Image *image); // Generate all mipmap levels for a provided image +RLAPI void ImageMipmaps(Image *image); // Compute all mipmap levels for a provided image RLAPI void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering) RLAPI void ImageFlipVertical(Image *image); // Flip image vertically RLAPI void ImageFlipHorizontal(Image *image); // Flip image horizontally @@ -1232,10 +348,11 @@ RLAPI void ImageColorContrast(Image *image, float contrast); RLAPI void ImageColorBrightness(Image *image, int brightness); // Modify image color: brightness (-255 to 255) RLAPI void ImageColorReplace(Image *image, Color color, Color replace); // Modify image color: replace color RLAPI Color *LoadImageColors(Image image); // Load color data from image as a Color array (RGBA - 32bit) -RLAPI Color *LoadImagePalette(Image image, int maxPaletteSize, int *colorsCount); // Load colors palette from image as a Color array (RGBA - 32bit) +RLAPI Color *LoadImagePalette(Image image, int maxPaletteSize, int *colorCount); // Load colors palette from image as a Color array (RGBA - 32bit) RLAPI void UnloadImageColors(Color *colors); // Unload color data loaded with LoadImageColors() RLAPI void UnloadImagePalette(Color *colors); // Unload colors palette loaded with LoadImagePalette() RLAPI Rectangle GetImageAlphaBorder(Image image, float threshold); // Get image alpha border rectangle +RLAPI Color GetImageColor(Image image, int x, int y); // Get image pixel color at (x, y) position // Image drawing functions // NOTE: Image software-rendering functions (CPU) @@ -1264,8 +381,6 @@ RLAPI void UnloadTexture(Texture2D texture); RLAPI void UnloadRenderTexture(RenderTexture2D target); // Unload render texture from GPU memory (VRAM) RLAPI void UpdateTexture(Texture2D texture, const void *pixels); // Update GPU texture with new data RLAPI void UpdateTextureRec(Texture2D texture, Rectangle rec, const void *pixels); // Update GPU texture rectangle with new data -RLAPI Image GetTextureData(Texture2D texture); // Get pixel data from GPU texture and return an Image -RLAPI Image GetScreenData(void); // Get pixel data from screen buffer and return an Image (screenshot) // Texture configuration functions RLAPI void GenTextureMipmaps(Texture2D *texture); // Generate GPU mipmaps for a texture @@ -1278,21 +393,21 @@ RLAPI void DrawTextureV(Texture2D texture, Vector2 position, Color tint); RLAPI void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); // Draw a Texture2D with extended parameters RLAPI void DrawTextureRec(Texture2D texture, Rectangle source, Vector2 position, Color tint); // Draw a part of a texture defined by a rectangle RLAPI void DrawTextureQuad(Texture2D texture, Vector2 tiling, Vector2 offset, Rectangle quad, Color tint); // Draw texture quad with tiling and offset parameters -RLAPI void DrawTextureTiled(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, float scale, Color tint); // Draw part of a texture (defined by a rectangle) with rotation and scale tiled into dest. +RLAPI void DrawTextureTiled(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, float scale, Color tint); // Draw part of a texture (defined by a rectangle) with rotation and scale tiled into dest. RLAPI void DrawTexturePro(Texture2D texture, Rectangle source, Rectangle dest, Vector2 origin, float rotation, Color tint); // Draw a part of a texture defined by a rectangle with 'pro' parameters RLAPI void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle dest, Vector2 origin, float rotation, Color tint); // Draws a texture (or part of it) that stretches or shrinks nicely -RLAPI void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2 *points, Vector2 *texcoords, int pointsCount, Color tint); // Draw a textured polygon +RLAPI void DrawTexturePoly(Texture2D texture, Vector2 center, Vector2 *points, Vector2 *texcoords, int pointCount, Color tint); // Draw a textured polygon // Color/pixel related functions -RLAPI Color Fade(Color color, float alpha); // Returns color with alpha applied, alpha goes from 0.0f to 1.0f -RLAPI int ColorToInt(Color color); // Returns hexadecimal value for a Color -RLAPI Vector4 ColorNormalize(Color color); // Returns Color normalized as float [0..1] -RLAPI Color ColorFromNormalized(Vector4 normalized); // Returns Color from normalized values [0..1] -RLAPI Vector3 ColorToHSV(Color color); // Returns HSV values for a Color, hue [0..360], saturation/value [0..1] -RLAPI Color ColorFromHSV(float hue, float saturation, float value); // Returns a Color from HSV values, hue [0..360], saturation/value [0..1] -RLAPI Color ColorAlpha(Color color, float alpha); // Returns color with alpha applied, alpha goes from 0.0f to 1.0f -RLAPI Color ColorAlphaBlend(Color dst, Color src, Color tint); // Returns src alpha-blended into dst color with tint -RLAPI Color GetColor(int hexValue); // Get Color structure from hexadecimal value +RLAPI Color Fade(Color color, float alpha); // Get color with alpha applied, alpha goes from 0.0f to 1.0f +RLAPI int ColorToInt(Color color); // Get hexadecimal value for a Color +RLAPI Vector4 ColorNormalize(Color color); // Get Color normalized as float [0..1] +RLAPI Color ColorFromNormalized(Vector4 normalized); // Get Color from normalized values [0..1] +RLAPI Vector3 ColorToHSV(Color color); // Get HSV values for a Color, hue [0..360], saturation/value [0..1] +RLAPI Color ColorFromHSV(float hue, float saturation, float value); // Get a Color from HSV values, hue [0..360], saturation/value [0..1] +RLAPI Color ColorAlpha(Color color, float alpha); // Get color with alpha applied, alpha goes from 0.0f to 1.0f +RLAPI Color ColorAlphaBlend(Color dst, Color src, Color tint); // Get src alpha-blended into dst color with tint +RLAPI Color GetColor(unsigned int hexValue); // Get Color structure from hexadecimal value RLAPI Color GetPixelColor(void *srcPtr, int format); // Get Color from a source pixel pointer of certain format RLAPI void SetPixelColor(void *dstPtr, Color color, int format); // Set color formatted into destination pixel pointer RLAPI int GetPixelDataSize(int width, int height, int format); // Get pixel data size in bytes for certain format @@ -1304,37 +419,47 @@ RLAPI int GetPixelDataSize(int width, int height, int format); // G // Font loading/unloading functions RLAPI Font GetFontDefault(void); // Get the default Font RLAPI Font LoadFont(const char *fileName); // Load font from file into GPU memory (VRAM) -RLAPI Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int charsCount); // Load font from file with extended parameters +RLAPI Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int glyphCount); // Load font from file with extended parameters, use NULL for fontChars and 0 for glyphCount to load the default character set RLAPI Font LoadFontFromImage(Image image, Color key, int firstChar); // Load font from Image (XNA style) -RLAPI Font LoadFontFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int charsCount); // Load font from memory buffer, fileType refers to extension: i.e. ".ttf" -RLAPI CharInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int charsCount, int type); // Load font data for further use -RLAPI Image GenImageFontAtlas(const CharInfo *chars, Rectangle **recs, int charsCount, int fontSize, int padding, int packMethod); // Generate image font atlas using chars info -RLAPI void UnloadFontData(CharInfo *chars, int charsCount); // Unload font chars info data (RAM) -RLAPI void UnloadFont(Font font); // Unload Font from GPU memory (VRAM) +RLAPI Font LoadFontFromMemory(const char *fileType, const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int glyphCount); // Load font from memory buffer, fileType refers to extension: i.e. '.ttf' +RLAPI GlyphInfo *LoadFontData(const unsigned char *fileData, int dataSize, int fontSize, int *fontChars, int glyphCount, int type); // Load font data for further use +RLAPI Image GenImageFontAtlas(const GlyphInfo *chars, Rectangle **recs, int glyphCount, int fontSize, int padding, int packMethod); // Generate image font atlas using chars info +RLAPI void UnloadFontData(GlyphInfo *chars, int glyphCount); // Unload font chars info data (RAM) +RLAPI void UnloadFont(Font font); // Unload font from GPU memory (VRAM) +RLAPI bool ExportFontAsCode(Font font, const char *fileName); // Export font as code file, returns true on success // Text drawing functions RLAPI void DrawFPS(int posX, int posY); // Draw current FPS RLAPI void DrawText(const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) -RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters -RLAPI void DrawTextRec(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint); // Draw text using font inside rectangle limits -RLAPI void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint, - int selectStart, int selectLength, Color selectTint, Color selectBackTint); // Draw text using font inside rectangle limits with support for text selection -RLAPI void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); // Draw one character (codepoint) +RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters +RLAPI void DrawTextPro(Font font, const char *text, Vector2 position, Vector2 origin, float rotation, float fontSize, float spacing, Color tint); // Draw text using Font and pro parameters (rotation) +RLAPI void DrawTextCodepoint(Font font, int codepoint, Vector2 position, float fontSize, Color tint); // Draw one character (codepoint) +RLAPI void DrawTextCodepoints(Font font, const int *codepoints, int count, Vector2 position, float fontSize, float spacing, Color tint); // Draw multiple character (codepoint) -// Text misc. functions +// Text font info functions RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font RLAPI Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // Measure string size for Font -RLAPI int GetGlyphIndex(Font font, int codepoint); // Get index position for a unicode character on font - -// Text strings management functions (no utf8 strings, only byte chars) +RLAPI int GetGlyphIndex(Font font, int codepoint); // Get glyph index position in font for a codepoint (unicode character), fallback to '?' if not found +RLAPI GlyphInfo GetGlyphInfo(Font font, int codepoint); // Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found +RLAPI Rectangle GetGlyphAtlasRec(Font font, int codepoint); // Get glyph rectangle in font atlas for a codepoint (unicode character), fallback to '?' if not found + +// Text codepoints management functions (unicode characters) +RLAPI int *LoadCodepoints(const char *text, int *count); // Load all codepoints from a UTF-8 text string, codepoints count returned by parameter +RLAPI void UnloadCodepoints(int *codepoints); // Unload codepoints data from memory +RLAPI int GetCodepointCount(const char *text); // Get total number of codepoints in a UTF-8 encoded string +RLAPI int GetCodepoint(const char *text, int *bytesProcessed); // Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure +RLAPI const char *CodepointToUTF8(int codepoint, int *byteSize); // Encode one codepoint into UTF-8 byte array (array length returned as parameter) +RLAPI char *TextCodepointsToUTF8(const int *codepoints, int length); // Encode text as codepoints array into UTF-8 text string (WARNING: memory must be freed!) + +// Text strings management functions (no UTF-8 strings, only byte chars) // NOTE: Some strings allocate memory internally for returned strings, just be careful! RLAPI int TextCopy(char *dst, const char *src); // Copy one string to another, returns bytes copied RLAPI bool TextIsEqual(const char *text1, const char *text2); // Check if two text string are equal RLAPI unsigned int TextLength(const char *text); // Get text length, checks for '\0' ending -RLAPI const char *TextFormat(const char *text, ...); // Text formatting with variables (sprintf style) +RLAPI const char *TextFormat(const char *text, ...); // Text formatting with variables (sprintf() style) RLAPI const char *TextSubtext(const char *text, int position, int length); // Get a piece of a text string -RLAPI char *TextReplace(char *text, const char *replace, const char *by); // Replace text string (memory must be freed!) -RLAPI char *TextInsert(const char *text, const char *insert, int position); // Insert text in a position (memory must be freed!) +RLAPI char *TextReplace(char *text, const char *replace, const char *by); // Replace text string (WARNING: memory must be freed!) +RLAPI char *TextInsert(const char *text, const char *insert, int position); // Insert text in a position (WARNING: memory must be freed!) RLAPI const char *TextJoin(const char **textList, int count, const char *delimiter); // Join text strings with delimiter RLAPI const char **TextSplit(const char *text, char delimiter, int *count); // Split text into multiple strings RLAPI void TextAppend(char *text, const char *append, int *position); // Append text at specific position and move cursor! @@ -1343,13 +468,6 @@ RLAPI const char *TextToUpper(const char *text); // Get upp RLAPI const char *TextToLower(const char *text); // Get lower case version of provided string RLAPI const char *TextToPascal(const char *text); // Get Pascal case notation version of provided string RLAPI int TextToInteger(const char *text); // Get integer value from text (negative values not supported) -RLAPI char *TextToUtf8(int *codepoints, int length); // Encode text codepoint into utf8 text (memory must be freed!) - -// UTF8 text strings management functions -RLAPI int *GetCodepoints(const char *text, int *count); // Get all codepoints in a string, codepoints count returned by parameters -RLAPI int GetCodepointsCount(const char *text); // Get total number of characters (codepoints) in a UTF8 encoded string -RLAPI int GetNextCodepoint(const char *text, int *bytesProcessed); // Returns next codepoint in a UTF8 encoded string; 0x3f('?') is returned on failure -RLAPI const char *CodepointToUtf8(int codepoint, int *byteLength); // Encode codepoint into utf8 text (char array length returned as parameter) //------------------------------------------------------------------------------------ // Basic 3d Shapes Drawing Functions (Module: models) @@ -1360,17 +478,20 @@ RLAPI void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); RLAPI void DrawPoint3D(Vector3 position, Color color); // Draw a point in 3D space, actually a small line RLAPI void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); // Draw a circle in 3D world space RLAPI void DrawTriangle3D(Vector3 v1, Vector3 v2, Vector3 v3, Color color); // Draw a color-filled triangle (vertex in counter-clockwise order!) -RLAPI void DrawTriangleStrip3D(Vector3 *points, int pointsCount, Color color); // Draw a triangle strip defined by points +RLAPI void DrawTriangleStrip3D(Vector3 *points, int pointCount, Color color); // Draw a triangle strip defined by points RLAPI void DrawCube(Vector3 position, float width, float height, float length, Color color); // Draw cube RLAPI void DrawCubeV(Vector3 position, Vector3 size, Color color); // Draw cube (Vector version) RLAPI void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); // Draw cube wires RLAPI void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); // Draw cube wires (Vector version) RLAPI void DrawCubeTexture(Texture2D texture, Vector3 position, float width, float height, float length, Color color); // Draw cube textured +RLAPI void DrawCubeTextureRec(Texture2D texture, Rectangle source, Vector3 position, float width, float height, float length, Color color); // Draw cube with a region of a texture RLAPI void DrawSphere(Vector3 centerPos, float radius, Color color); // Draw sphere RLAPI void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere with extended parameters RLAPI void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere wires RLAPI void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone +RLAPI void DrawCylinderEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); // Draw a cylinder with base at startPos and top at endPos RLAPI void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone wires +RLAPI void DrawCylinderWiresEx(Vector3 startPos, Vector3 endPos, float startRadius, float endRadius, int sides, Color color); // Draw a cylinder wires with base at startPos and top at endPos RLAPI void DrawPlane(Vector3 centerPos, Vector2 size, Color color); // Draw a plane XZ RLAPI void DrawRay(Ray ray, Color color); // Draw a ray line RLAPI void DrawGrid(int slices, float spacing); // Draw a grid (centered at (0, 0, 0)) @@ -1379,33 +500,32 @@ RLAPI void DrawGrid(int slices, float spacing); // Model 3d Loading and Drawing Functions (Module: models) //------------------------------------------------------------------------------------ -// Model loading/unloading functions +// Model management functions RLAPI Model LoadModel(const char *fileName); // Load model from files (meshes and materials) RLAPI Model LoadModelFromMesh(Mesh mesh); // Load model from generated mesh (default material) RLAPI void UnloadModel(Model model); // Unload model (including meshes) from memory (RAM and/or VRAM) RLAPI void UnloadModelKeepMeshes(Model model); // Unload model (but not meshes) from memory (RAM and/or VRAM) +RLAPI BoundingBox GetModelBoundingBox(Model model); // Compute model bounding box limits (considers all meshes) -// Mesh loading/unloading functions +// Model drawing functions +RLAPI void DrawModel(Model model, Vector3 position, float scale, Color tint); // Draw a model (with texture if set) +RLAPI void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model with extended parameters +RLAPI void DrawModelWires(Model model, Vector3 position, float scale, Color tint); // Draw a model wires (with texture if set) +RLAPI void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model wires (with texture if set) with extended parameters +RLAPI void DrawBoundingBox(BoundingBox box, Color color); // Draw bounding box (wires) +RLAPI void DrawBillboard(Camera camera, Texture2D texture, Vector3 position, float size, Color tint); // Draw a billboard texture +RLAPI void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector2 size, Color tint); // Draw a billboard texture defined by source +RLAPI void DrawBillboardPro(Camera camera, Texture2D texture, Rectangle source, Vector3 position, Vector3 up, Vector2 size, Vector2 origin, float rotation, Color tint); // Draw a billboard texture defined by source and rotation + +// Mesh management functions RLAPI void UploadMesh(Mesh *mesh, bool dynamic); // Upload mesh vertex data in GPU and provide VAO/VBO ids -RLAPI void UpdateMeshBuffer(Mesh mesh, int index, void *data, int dataSize, int offset); // Update mesh vertex data in GPU for a specific buffer index -RLAPI void DrawMesh(Mesh mesh, Material material, Matrix transform); // Draw a 3d mesh with material and transform -RLAPI void DrawMeshInstanced(Mesh mesh, Material material, Matrix *transforms, int instances); // Draw multiple mesh instances with material and different transforms +RLAPI void UpdateMeshBuffer(Mesh mesh, int index, const void *data, int dataSize, int offset); // Update mesh vertex data in GPU for a specific buffer index RLAPI void UnloadMesh(Mesh mesh); // Unload mesh data from CPU and GPU +RLAPI void DrawMesh(Mesh mesh, Material material, Matrix transform); // Draw a 3d mesh with material and transform +RLAPI void DrawMeshInstanced(Mesh mesh, Material material, const Matrix *transforms, int instances); // Draw multiple mesh instances with material and different transforms RLAPI bool ExportMesh(Mesh mesh, const char *fileName); // Export mesh data to file, returns true on success - -// Material loading/unloading functions -RLAPI Material *LoadMaterials(const char *fileName, int *materialCount); // Load materials from model file -RLAPI Material LoadMaterialDefault(void); // Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) -RLAPI void UnloadMaterial(Material material); // Unload material from GPU memory (VRAM) -RLAPI void SetMaterialTexture(Material *material, int mapType, Texture2D texture); // Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) -RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId); // Set material for a mesh - -// Model animations loading/unloading functions -RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, int *animsCount); // Load model animations from file -RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose -RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data -RLAPI void UnloadModelAnimations(ModelAnimation* animations, unsigned int count); // Unload animation array data -RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match +RLAPI BoundingBox GetMeshBoundingBox(Mesh mesh); // Compute mesh bounding box limits +RLAPI void GenMeshTangents(Mesh *mesh); // Compute mesh tangents // Mesh generation functions RLAPI Mesh GenMeshPoly(int sides, float radius); // Generate polygonal mesh @@ -1414,40 +534,39 @@ RLAPI Mesh GenMeshCube(float width, float height, float length); RLAPI Mesh GenMeshSphere(float radius, int rings, int slices); // Generate sphere mesh (standard sphere) RLAPI Mesh GenMeshHemiSphere(float radius, int rings, int slices); // Generate half-sphere mesh (no bottom cap) RLAPI Mesh GenMeshCylinder(float radius, float height, int slices); // Generate cylinder mesh +RLAPI Mesh GenMeshCone(float radius, float height, int slices); // Generate cone/pyramid mesh RLAPI Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); // Generate torus mesh RLAPI Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); // Generate trefoil knot mesh RLAPI Mesh GenMeshHeightmap(Image heightmap, Vector3 size); // Generate heightmap mesh from image data RLAPI Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); // Generate cubes-based map mesh from image data -// Mesh manipulation functions -RLAPI BoundingBox MeshBoundingBox(Mesh mesh); // Compute mesh bounding box limits -RLAPI void MeshTangents(Mesh *mesh); // Compute mesh tangents -RLAPI void MeshBinormals(Mesh *mesh); // Compute mesh binormals +// Material loading/unloading functions +RLAPI Material *LoadMaterials(const char *fileName, int *materialCount); // Load materials from model file +RLAPI Material LoadMaterialDefault(void); // Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) +RLAPI void UnloadMaterial(Material material); // Unload material from GPU memory (VRAM) +RLAPI void SetMaterialTexture(Material *material, int mapType, Texture2D texture); // Set texture for a material map type (MATERIAL_MAP_DIFFUSE, MATERIAL_MAP_SPECULAR...) +RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId); // Set material for a mesh -// Model drawing functions -RLAPI void DrawModel(Model model, Vector3 position, float scale, Color tint); // Draw a model (with texture if set) -RLAPI void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model with extended parameters -RLAPI void DrawModelWires(Model model, Vector3 position, float scale, Color tint); // Draw a model wires (with texture if set) -RLAPI void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model wires (with texture if set) with extended parameters -RLAPI void DrawBoundingBox(BoundingBox box, Color color); // Draw bounding box (wires) -RLAPI void DrawBillboard(Camera camera, Texture2D texture, Vector3 center, float size, Color tint); // Draw a billboard texture -RLAPI void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle source, Vector3 center, float size, Color tint); // Draw a billboard texture defined by source +// Model animations loading/unloading functions +RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, unsigned int *animCount); // Load model animations from file +RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose +RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data +RLAPI void UnloadModelAnimations(ModelAnimation *animations, unsigned int count); // Unload animation array data +RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match // Collision detection functions -RLAPI bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); // Detect collision between two spheres -RLAPI bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); // Detect collision between two bounding boxes -RLAPI bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius); // Detect collision between box and sphere -RLAPI bool CheckCollisionRaySphere(Ray ray, Vector3 center, float radius); // Detect collision between ray and sphere -RLAPI bool CheckCollisionRaySphereEx(Ray ray, Vector3 center, float radius, Vector3 *collisionPoint); // Detect collision between ray and sphere, returns collision point -RLAPI bool CheckCollisionRayBox(Ray ray, BoundingBox box); // Detect collision between ray and box -RLAPI RayHitInfo GetCollisionRayMesh(Ray ray, Mesh mesh, Matrix transform); // Get collision info between ray and mesh -RLAPI RayHitInfo GetCollisionRayModel(Ray ray, Model model); // Get collision info between ray and model -RLAPI RayHitInfo GetCollisionRayTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); // Get collision info between ray and triangle -RLAPI RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight); // Get collision info between ray and ground plane (Y-normal plane) +RLAPI bool CheckCollisionSpheres(Vector3 center1, float radius1, Vector3 center2, float radius2); // Check collision between two spheres +RLAPI bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); // Check collision between two bounding boxes +RLAPI bool CheckCollisionBoxSphere(BoundingBox box, Vector3 center, float radius); // Check collision between box and sphere +RLAPI RayCollision GetRayCollisionSphere(Ray ray, Vector3 center, float radius); // Get collision info between ray and sphere +RLAPI RayCollision GetRayCollisionBox(Ray ray, BoundingBox box); // Get collision info between ray and box +RLAPI RayCollision GetRayCollisionTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); // Get collision info between ray and triangle +RLAPI RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4); // Get collision info between ray and quad //------------------------------------------------------------------------------------ // Audio Loading and Playing Functions (Module: audio) //------------------------------------------------------------------------------------ +typedef void (*AudioCallback)(void *bufferData, unsigned int frames); // Audio device management functions RLAPI void InitAudioDevice(void); // Initialize audio device and context @@ -1457,10 +576,10 @@ RLAPI void SetMasterVolume(float volume); // Set mas // Wave/Sound loading/unloading functions RLAPI Wave LoadWave(const char *fileName); // Load wave data from file -RLAPI Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load wave from memory buffer, fileType refers to extension: i.e. ".wav" +RLAPI Wave LoadWaveFromMemory(const char *fileType, const unsigned char *fileData, int dataSize); // Load wave from memory buffer, fileType refers to extension: i.e. '.wav' RLAPI Sound LoadSound(const char *fileName); // Load sound from file RLAPI Sound LoadSoundFromWave(Wave wave); // Load sound from wave data -RLAPI void UpdateSound(Sound sound, const void *data, int samplesCount);// Update sound buffer with new data +RLAPI void UpdateSound(Sound sound, const void *data, int sampleCount); // Update sound buffer with new data RLAPI void UnloadWave(Wave wave); // Unload wave data RLAPI void UnloadSound(Sound sound); // Unload sound RLAPI bool ExportWave(Wave wave, const char *fileName); // Export wave data to file, returns true on success @@ -1477,31 +596,34 @@ RLAPI int GetSoundsPlaying(void); // Get num RLAPI bool IsSoundPlaying(Sound sound); // Check if a sound is currently playing RLAPI void SetSoundVolume(Sound sound, float volume); // Set volume for a sound (1.0 is max level) RLAPI void SetSoundPitch(Sound sound, float pitch); // Set pitch for a sound (1.0 is base level) -RLAPI void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); // Convert wave data to desired format +RLAPI void SetSoundPan(Sound sound, float pan); // Set pan for a sound (0.5 is center) RLAPI Wave WaveCopy(Wave wave); // Copy a wave to a new wave RLAPI void WaveCrop(Wave *wave, int initSample, int finalSample); // Crop a wave to defined samples range -RLAPI float *LoadWaveSamples(Wave wave); // Load samples data from wave as a floats array +RLAPI void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); // Convert wave data to desired format +RLAPI float *LoadWaveSamples(Wave wave); // Load samples data from wave as a 32bit float data array RLAPI void UnloadWaveSamples(float *samples); // Unload samples data loaded with LoadWaveSamples() // Music management functions RLAPI Music LoadMusicStream(const char *fileName); // Load music stream from file -RLAPI Music LoadMusicStreamFromMemory(const char *fileType, unsigned char* data, int dataSize); // Load music stream from data +RLAPI Music LoadMusicStreamFromMemory(const char *fileType, const unsigned char *data, int dataSize); // Load music stream from data RLAPI void UnloadMusicStream(Music music); // Unload music stream RLAPI void PlayMusicStream(Music music); // Start music playing -RLAPI bool IsMusicPlaying(Music music); // Check if music is playing +RLAPI bool IsMusicStreamPlaying(Music music); // Check if music is playing RLAPI void UpdateMusicStream(Music music); // Updates buffers for music streaming RLAPI void StopMusicStream(Music music); // Stop music playing RLAPI void PauseMusicStream(Music music); // Pause music playing RLAPI void ResumeMusicStream(Music music); // Resume playing paused music +RLAPI void SeekMusicStream(Music music, float position); // Seek music to a position (in seconds) RLAPI void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level) RLAPI void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level) +RLAPI void SetMusicPan(Music music, float pan); // Set pan for a music (0.5 is center) RLAPI float GetMusicTimeLength(Music music); // Get music time length (in seconds) RLAPI float GetMusicTimePlayed(Music music); // Get current music time played (in seconds) // AudioStream management functions -RLAPI AudioStream InitAudioStream(unsigned int sampleRate, unsigned int sampleSize, unsigned int channels); // Init audio stream (to stream raw audio pcm data) -RLAPI void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount); // Update audio stream buffers with data -RLAPI void CloseAudioStream(AudioStream stream); // Close audio stream and free memory +RLAPI AudioStream LoadAudioStream(unsigned int sampleRate, unsigned int sampleSize, unsigned int channels); // Load audio stream (to stream raw audio pcm data) +RLAPI void UnloadAudioStream(AudioStream stream); // Unload audio stream and free memory +RLAPI void UpdateAudioStream(AudioStream stream, const void *data, int frameCount); // Update audio stream buffers with data RLAPI bool IsAudioStreamProcessed(AudioStream stream); // Check if any audio stream buffers requires refill RLAPI void PlayAudioStream(AudioStream stream); // Play audio stream RLAPI void PauseAudioStream(AudioStream stream); // Pause audio stream @@ -1510,10 +632,16 @@ RLAPI bool IsAudioStreamPlaying(AudioStream stream); // Check i RLAPI void StopAudioStream(AudioStream stream); // Stop audio stream RLAPI void SetAudioStreamVolume(AudioStream stream, float volume); // Set volume for audio stream (1.0 is max level) RLAPI void SetAudioStreamPitch(AudioStream stream, float pitch); // Set pitch for audio stream (1.0 is base level) +RLAPI void SetAudioStreamPan(AudioStream stream, float pan); // Set pan for audio stream (0.5 is centered) RLAPI void SetAudioStreamBufferSizeDefault(int size); // Default size for new audio streams +RLAPI void SetAudioStreamCallback(AudioStream stream, AudioCallback callback); // Audio thread callback to request new data + +RLAPI void AttachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Attach audio stream processor to stream +RLAPI void DetachAudioStreamProcessor(AudioStream stream, AudioCallback processor); // Detach audio stream processor from stream #if defined(__cplusplus) } #endif #endif // RAYLIB_H +``` \ No newline at end of file diff --git a/example/Cargo.toml b/example/Cargo.toml new file mode 100644 index 00000000..43410cb4 --- /dev/null +++ b/example/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +raylib = { branch = "4.5.0-redesign", git = "https://github.com/TSnake41/raylib-rs" } \ No newline at end of file diff --git a/example/src/main.rs b/example/src/main.rs new file mode 100644 index 00000000..88e9c83c --- /dev/null +++ b/example/src/main.rs @@ -0,0 +1,15 @@ +use raylib::prelude::*; + +fn main() { + let (rl, thread) = raylib::init() + .size(640, 480) + .title("Hello, World") + .build(); + + while !rl.window_should_close() { + rl.begin_drawing(&thread, |d| { + d.clear_background(Color::WHITE); + d.draw_text("Hello, world!", 12, 12, 20, Color::BLACK); + }); + } +} \ No newline at end of file diff --git a/examples/.cargo/config.toml b/examples/.cargo/config.toml new file mode 100644 index 00000000..b3664ef4 --- /dev/null +++ b/examples/.cargo/config.toml @@ -0,0 +1,4 @@ +[target.wasm32-unknown-emscripten] +#rustflags = ["-C", "link-args=-s USE_GLFW=3 -s ASSERTIONS=1 --profiling"] +# rustflags = ["-C", "link-args=-s USE_GLFW=3 -s FORCE_FILESYSTEM=1 -s ALLOW_MEMORY_GROWTH=1 --preload-file /root/raylib-rs/showcase/original@original"] +rustflags = ["-C", "link-args=-s USE_GLFW=3 -s FORCE_FILESYSTEM=1 -s ALLOW_MEMORY_GROWTH=1 --preload-file showcase/original@original"] \ No newline at end of file diff --git a/showcase/Cargo.toml b/examples/Cargo.toml similarity index 81% rename from showcase/Cargo.toml rename to examples/Cargo.toml index c863cc60..65f3ee5d 100644 --- a/showcase/Cargo.toml +++ b/examples/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "raylib-showcase" -version = "3.7.0" +version = "4.0.0" authors = ["David Ayeke"] edition = "2018" license = "Zlib" @@ -10,4 +10,4 @@ repository = "https://github.com/deltaphc/raylib-rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -raylib = { version = "3.7", path = "../raylib" } \ No newline at end of file +raylib = { version = "4.0", path = "../raylib" } \ No newline at end of file diff --git a/showcase/Makefile b/examples/Makefile similarity index 100% rename from showcase/Makefile rename to examples/Makefile diff --git a/showcase/original/audio/audio_module_playing.c b/examples/original/audio/audio_module_playing.c similarity index 100% rename from showcase/original/audio/audio_module_playing.c rename to examples/original/audio/audio_module_playing.c diff --git a/showcase/original/audio/audio_module_playing.png b/examples/original/audio/audio_module_playing.png similarity index 100% rename from showcase/original/audio/audio_module_playing.png rename to examples/original/audio/audio_module_playing.png diff --git a/showcase/original/audio/audio_multichannel_sound.c b/examples/original/audio/audio_multichannel_sound.c similarity index 100% rename from showcase/original/audio/audio_multichannel_sound.c rename to examples/original/audio/audio_multichannel_sound.c diff --git a/showcase/original/audio/audio_multichannel_sound.png b/examples/original/audio/audio_multichannel_sound.png similarity index 100% rename from showcase/original/audio/audio_multichannel_sound.png rename to examples/original/audio/audio_multichannel_sound.png diff --git a/showcase/original/audio/audio_music_stream.c b/examples/original/audio/audio_music_stream.c similarity index 100% rename from showcase/original/audio/audio_music_stream.c rename to examples/original/audio/audio_music_stream.c diff --git a/showcase/original/audio/audio_music_stream.png b/examples/original/audio/audio_music_stream.png similarity index 100% rename from showcase/original/audio/audio_music_stream.png rename to examples/original/audio/audio_music_stream.png diff --git a/showcase/original/audio/audio_raw_stream.c b/examples/original/audio/audio_raw_stream.c similarity index 100% rename from showcase/original/audio/audio_raw_stream.c rename to examples/original/audio/audio_raw_stream.c diff --git a/showcase/original/audio/audio_raw_stream.png b/examples/original/audio/audio_raw_stream.png similarity index 100% rename from showcase/original/audio/audio_raw_stream.png rename to examples/original/audio/audio_raw_stream.png diff --git a/showcase/original/audio/audio_sound_loading.c b/examples/original/audio/audio_sound_loading.c similarity index 100% rename from showcase/original/audio/audio_sound_loading.c rename to examples/original/audio/audio_sound_loading.c diff --git a/showcase/original/audio/audio_sound_loading.png b/examples/original/audio/audio_sound_loading.png similarity index 100% rename from showcase/original/audio/audio_sound_loading.png rename to examples/original/audio/audio_sound_loading.png diff --git a/showcase/original/audio/resources/chiptun1.mod b/examples/original/audio/resources/chiptun1.mod similarity index 100% rename from showcase/original/audio/resources/chiptun1.mod rename to examples/original/audio/resources/chiptun1.mod diff --git a/showcase/original/audio/resources/coin.wav b/examples/original/audio/resources/coin.wav similarity index 100% rename from showcase/original/audio/resources/coin.wav rename to examples/original/audio/resources/coin.wav diff --git a/showcase/original/audio/resources/guitar_noodling.ogg b/examples/original/audio/resources/guitar_noodling.ogg similarity index 100% rename from showcase/original/audio/resources/guitar_noodling.ogg rename to examples/original/audio/resources/guitar_noodling.ogg diff --git a/showcase/original/audio/resources/mini1111.xm b/examples/original/audio/resources/mini1111.xm similarity index 100% rename from showcase/original/audio/resources/mini1111.xm rename to examples/original/audio/resources/mini1111.xm diff --git a/showcase/original/audio/resources/sound.wav b/examples/original/audio/resources/sound.wav similarity index 100% rename from showcase/original/audio/resources/sound.wav rename to examples/original/audio/resources/sound.wav diff --git a/showcase/original/audio/resources/spring.wav b/examples/original/audio/resources/spring.wav similarity index 100% rename from showcase/original/audio/resources/spring.wav rename to examples/original/audio/resources/spring.wav diff --git a/showcase/original/audio/resources/tanatana.flac b/examples/original/audio/resources/tanatana.flac similarity index 100% rename from showcase/original/audio/resources/tanatana.flac rename to examples/original/audio/resources/tanatana.flac diff --git a/showcase/original/audio/resources/tanatana.ogg b/examples/original/audio/resources/tanatana.ogg similarity index 100% rename from showcase/original/audio/resources/tanatana.ogg rename to examples/original/audio/resources/tanatana.ogg diff --git a/showcase/original/audio/resources/weird.wav b/examples/original/audio/resources/weird.wav similarity index 100% rename from showcase/original/audio/resources/weird.wav rename to examples/original/audio/resources/weird.wav diff --git a/showcase/original/controls_test_suite/controls_test_suite.c b/examples/original/controls_test_suite/controls_test_suite.c similarity index 100% rename from showcase/original/controls_test_suite/controls_test_suite.c rename to examples/original/controls_test_suite/controls_test_suite.c diff --git a/showcase/original/controls_test_suite/fonts/FiveByFive10.ttf b/examples/original/controls_test_suite/fonts/FiveByFive10.ttf similarity index 100% rename from showcase/original/controls_test_suite/fonts/FiveByFive10.ttf rename to examples/original/controls_test_suite/fonts/FiveByFive10.ttf diff --git a/showcase/original/controls_test_suite/fonts/NorthernLights.ttf b/examples/original/controls_test_suite/fonts/NorthernLights.ttf similarity index 100% rename from showcase/original/controls_test_suite/fonts/NorthernLights.ttf rename to examples/original/controls_test_suite/fonts/NorthernLights.ttf diff --git a/showcase/original/controls_test_suite/fonts/PIXEARG11.ttf b/examples/original/controls_test_suite/fonts/PIXEARG11.ttf similarity index 100% rename from showcase/original/controls_test_suite/fonts/PIXEARG11.ttf rename to examples/original/controls_test_suite/fonts/PIXEARG11.ttf diff --git a/showcase/original/controls_test_suite/fonts/PixelOperator8.ttf b/examples/original/controls_test_suite/fonts/PixelOperator8.ttf similarity index 100% rename from showcase/original/controls_test_suite/fonts/PixelOperator8.ttf rename to examples/original/controls_test_suite/fonts/PixelOperator8.ttf diff --git a/showcase/original/controls_test_suite/fonts/pixelpoiiz10.ttf b/examples/original/controls_test_suite/fonts/pixelpoiiz10.ttf similarity index 100% rename from showcase/original/controls_test_suite/fonts/pixelpoiiz10.ttf rename to examples/original/controls_test_suite/fonts/pixelpoiiz10.ttf diff --git a/showcase/original/controls_test_suite/fonts/prstartk8.ttf b/examples/original/controls_test_suite/fonts/prstartk8.ttf similarity index 100% rename from showcase/original/controls_test_suite/fonts/prstartk8.ttf rename to examples/original/controls_test_suite/fonts/prstartk8.ttf diff --git a/showcase/original/controls_test_suite/fonts/rainyhearts16.ttf b/examples/original/controls_test_suite/fonts/rainyhearts16.ttf similarity index 100% rename from showcase/original/controls_test_suite/fonts/rainyhearts16.ttf rename to examples/original/controls_test_suite/fonts/rainyhearts16.ttf diff --git a/showcase/original/core/core_2d_camera.c b/examples/original/core/core_2d_camera.c similarity index 100% rename from showcase/original/core/core_2d_camera.c rename to examples/original/core/core_2d_camera.c diff --git a/showcase/original/core/core_2d_camera.png b/examples/original/core/core_2d_camera.png similarity index 100% rename from showcase/original/core/core_2d_camera.png rename to examples/original/core/core_2d_camera.png diff --git a/showcase/original/core/core_2d_camera_platformer.c b/examples/original/core/core_2d_camera_platformer.c similarity index 100% rename from showcase/original/core/core_2d_camera_platformer.c rename to examples/original/core/core_2d_camera_platformer.c diff --git a/showcase/original/core/core_2d_camera_platformer.png b/examples/original/core/core_2d_camera_platformer.png similarity index 100% rename from showcase/original/core/core_2d_camera_platformer.png rename to examples/original/core/core_2d_camera_platformer.png diff --git a/showcase/original/core/core_3d_camera_first_person.c b/examples/original/core/core_3d_camera_first_person.c similarity index 100% rename from showcase/original/core/core_3d_camera_first_person.c rename to examples/original/core/core_3d_camera_first_person.c diff --git a/showcase/original/core/core_3d_camera_first_person.png b/examples/original/core/core_3d_camera_first_person.png similarity index 100% rename from showcase/original/core/core_3d_camera_first_person.png rename to examples/original/core/core_3d_camera_first_person.png diff --git a/showcase/original/core/core_3d_camera_free.c b/examples/original/core/core_3d_camera_free.c similarity index 100% rename from showcase/original/core/core_3d_camera_free.c rename to examples/original/core/core_3d_camera_free.c diff --git a/showcase/original/core/core_3d_camera_free.png b/examples/original/core/core_3d_camera_free.png similarity index 100% rename from showcase/original/core/core_3d_camera_free.png rename to examples/original/core/core_3d_camera_free.png diff --git a/showcase/original/core/core_3d_camera_mode.c b/examples/original/core/core_3d_camera_mode.c similarity index 100% rename from showcase/original/core/core_3d_camera_mode.c rename to examples/original/core/core_3d_camera_mode.c diff --git a/showcase/original/core/core_3d_camera_mode.png b/examples/original/core/core_3d_camera_mode.png similarity index 100% rename from showcase/original/core/core_3d_camera_mode.png rename to examples/original/core/core_3d_camera_mode.png diff --git a/showcase/original/core/core_3d_picking.c b/examples/original/core/core_3d_picking.c similarity index 100% rename from showcase/original/core/core_3d_picking.c rename to examples/original/core/core_3d_picking.c diff --git a/showcase/original/core/core_3d_picking.png b/examples/original/core/core_3d_picking.png similarity index 100% rename from showcase/original/core/core_3d_picking.png rename to examples/original/core/core_3d_picking.png diff --git a/showcase/original/core/core_basic_window.c b/examples/original/core/core_basic_window.c similarity index 100% rename from showcase/original/core/core_basic_window.c rename to examples/original/core/core_basic_window.c diff --git a/showcase/original/core/core_basic_window.cpp b/examples/original/core/core_basic_window.cpp similarity index 100% rename from showcase/original/core/core_basic_window.cpp rename to examples/original/core/core_basic_window.cpp diff --git a/showcase/original/core/core_basic_window.png b/examples/original/core/core_basic_window.png similarity index 100% rename from showcase/original/core/core_basic_window.png rename to examples/original/core/core_basic_window.png diff --git a/showcase/original/core/core_basic_window_web.c b/examples/original/core/core_basic_window_web.c similarity index 100% rename from showcase/original/core/core_basic_window_web.c rename to examples/original/core/core_basic_window_web.c diff --git a/showcase/original/core/core_custom_logging.c b/examples/original/core/core_custom_logging.c similarity index 100% rename from showcase/original/core/core_custom_logging.c rename to examples/original/core/core_custom_logging.c diff --git a/showcase/original/core/core_custom_logging.png b/examples/original/core/core_custom_logging.png similarity index 100% rename from showcase/original/core/core_custom_logging.png rename to examples/original/core/core_custom_logging.png diff --git a/showcase/original/core/core_drop_files.c b/examples/original/core/core_drop_files.c similarity index 100% rename from showcase/original/core/core_drop_files.c rename to examples/original/core/core_drop_files.c diff --git a/showcase/original/core/core_drop_files.png b/examples/original/core/core_drop_files.png similarity index 100% rename from showcase/original/core/core_drop_files.png rename to examples/original/core/core_drop_files.png diff --git a/showcase/original/core/core_input_gamepad.c b/examples/original/core/core_input_gamepad.c similarity index 100% rename from showcase/original/core/core_input_gamepad.c rename to examples/original/core/core_input_gamepad.c diff --git a/showcase/original/core/core_input_gamepad.png b/examples/original/core/core_input_gamepad.png similarity index 100% rename from showcase/original/core/core_input_gamepad.png rename to examples/original/core/core_input_gamepad.png diff --git a/showcase/original/core/core_input_gestures.c b/examples/original/core/core_input_gestures.c similarity index 100% rename from showcase/original/core/core_input_gestures.c rename to examples/original/core/core_input_gestures.c diff --git a/showcase/original/core/core_input_gestures.png b/examples/original/core/core_input_gestures.png similarity index 100% rename from showcase/original/core/core_input_gestures.png rename to examples/original/core/core_input_gestures.png diff --git a/showcase/original/core/core_input_keys.c b/examples/original/core/core_input_keys.c similarity index 100% rename from showcase/original/core/core_input_keys.c rename to examples/original/core/core_input_keys.c diff --git a/showcase/original/core/core_input_keys.png b/examples/original/core/core_input_keys.png similarity index 100% rename from showcase/original/core/core_input_keys.png rename to examples/original/core/core_input_keys.png diff --git a/showcase/original/core/core_input_mouse.c b/examples/original/core/core_input_mouse.c similarity index 100% rename from showcase/original/core/core_input_mouse.c rename to examples/original/core/core_input_mouse.c diff --git a/showcase/original/core/core_input_mouse.png b/examples/original/core/core_input_mouse.png similarity index 100% rename from showcase/original/core/core_input_mouse.png rename to examples/original/core/core_input_mouse.png diff --git a/showcase/original/core/core_input_mouse_wheel.c b/examples/original/core/core_input_mouse_wheel.c similarity index 100% rename from showcase/original/core/core_input_mouse_wheel.c rename to examples/original/core/core_input_mouse_wheel.c diff --git a/showcase/original/core/core_input_mouse_wheel.png b/examples/original/core/core_input_mouse_wheel.png similarity index 100% rename from showcase/original/core/core_input_mouse_wheel.png rename to examples/original/core/core_input_mouse_wheel.png diff --git a/showcase/original/core/core_input_multitouch.c b/examples/original/core/core_input_multitouch.c similarity index 100% rename from showcase/original/core/core_input_multitouch.c rename to examples/original/core/core_input_multitouch.c diff --git a/showcase/original/core/core_input_multitouch.png b/examples/original/core/core_input_multitouch.png similarity index 100% rename from showcase/original/core/core_input_multitouch.png rename to examples/original/core/core_input_multitouch.png diff --git a/showcase/original/core/core_loading_thread.c b/examples/original/core/core_loading_thread.c similarity index 100% rename from showcase/original/core/core_loading_thread.c rename to examples/original/core/core_loading_thread.c diff --git a/showcase/original/core/core_loading_thread.png b/examples/original/core/core_loading_thread.png similarity index 100% rename from showcase/original/core/core_loading_thread.png rename to examples/original/core/core_loading_thread.png diff --git a/showcase/original/core/core_random_values.c b/examples/original/core/core_random_values.c similarity index 100% rename from showcase/original/core/core_random_values.c rename to examples/original/core/core_random_values.c diff --git a/showcase/original/core/core_random_values.png b/examples/original/core/core_random_values.png similarity index 100% rename from showcase/original/core/core_random_values.png rename to examples/original/core/core_random_values.png diff --git a/showcase/original/core/core_scissor_test.c b/examples/original/core/core_scissor_test.c similarity index 100% rename from showcase/original/core/core_scissor_test.c rename to examples/original/core/core_scissor_test.c diff --git a/showcase/original/core/core_scissor_test.png b/examples/original/core/core_scissor_test.png similarity index 100% rename from showcase/original/core/core_scissor_test.png rename to examples/original/core/core_scissor_test.png diff --git a/showcase/original/core/core_storage_values.c b/examples/original/core/core_storage_values.c similarity index 100% rename from showcase/original/core/core_storage_values.c rename to examples/original/core/core_storage_values.c diff --git a/showcase/original/core/core_storage_values.png b/examples/original/core/core_storage_values.png similarity index 100% rename from showcase/original/core/core_storage_values.png rename to examples/original/core/core_storage_values.png diff --git a/showcase/original/core/core_vr_simulator.c b/examples/original/core/core_vr_simulator.c similarity index 100% rename from showcase/original/core/core_vr_simulator.c rename to examples/original/core/core_vr_simulator.c diff --git a/showcase/original/core/core_vr_simulator.png b/examples/original/core/core_vr_simulator.png similarity index 100% rename from showcase/original/core/core_vr_simulator.png rename to examples/original/core/core_vr_simulator.png diff --git a/showcase/original/core/core_window_letterbox.c b/examples/original/core/core_window_letterbox.c similarity index 100% rename from showcase/original/core/core_window_letterbox.c rename to examples/original/core/core_window_letterbox.c diff --git a/showcase/original/core/core_window_letterbox.png b/examples/original/core/core_window_letterbox.png similarity index 100% rename from showcase/original/core/core_window_letterbox.png rename to examples/original/core/core_window_letterbox.png diff --git a/showcase/original/core/core_world_screen.c b/examples/original/core/core_world_screen.c similarity index 100% rename from showcase/original/core/core_world_screen.c rename to examples/original/core/core_world_screen.c diff --git a/showcase/original/core/core_world_screen.png b/examples/original/core/core_world_screen.png similarity index 100% rename from showcase/original/core/core_world_screen.png rename to examples/original/core/core_world_screen.png diff --git a/showcase/original/core/resources/distortion100.fs b/examples/original/core/resources/distortion100.fs similarity index 100% rename from showcase/original/core/resources/distortion100.fs rename to examples/original/core/resources/distortion100.fs diff --git a/showcase/original/core/resources/distortion330.fs b/examples/original/core/resources/distortion330.fs similarity index 100% rename from showcase/original/core/resources/distortion330.fs rename to examples/original/core/resources/distortion330.fs diff --git a/showcase/original/core/resources/ps3.png b/examples/original/core/resources/ps3.png similarity index 100% rename from showcase/original/core/resources/ps3.png rename to examples/original/core/resources/ps3.png diff --git a/showcase/original/core/resources/xbox.png b/examples/original/core/resources/xbox.png similarity index 100% rename from showcase/original/core/resources/xbox.png rename to examples/original/core/resources/xbox.png diff --git a/showcase/original/custom_file_dialog/cat.png b/examples/original/custom_file_dialog/cat.png similarity index 100% rename from showcase/original/custom_file_dialog/cat.png rename to examples/original/custom_file_dialog/cat.png diff --git a/showcase/original/custom_file_dialog/custom_file_dialog.c b/examples/original/custom_file_dialog/custom_file_dialog.c similarity index 100% rename from showcase/original/custom_file_dialog/custom_file_dialog.c rename to examples/original/custom_file_dialog/custom_file_dialog.c diff --git a/showcase/original/custom_file_dialog/gui_file_dialog.h b/examples/original/custom_file_dialog/gui_file_dialog.h similarity index 100% rename from showcase/original/custom_file_dialog/gui_file_dialog.h rename to examples/original/custom_file_dialog/gui_file_dialog.h diff --git a/showcase/original/image_exporter/image_exporter.c b/examples/original/image_exporter/image_exporter.c similarity index 100% rename from showcase/original/image_exporter/image_exporter.c rename to examples/original/image_exporter/image_exporter.c diff --git a/showcase/original/image_exporter/resources/cat.png b/examples/original/image_exporter/resources/cat.png similarity index 100% rename from showcase/original/image_exporter/resources/cat.png rename to examples/original/image_exporter/resources/cat.png diff --git a/showcase/original/image_exporter/resources/fudesumi.png b/examples/original/image_exporter/resources/fudesumi.png similarity index 100% rename from showcase/original/image_exporter/resources/fudesumi.png rename to examples/original/image_exporter/resources/fudesumi.png diff --git a/showcase/original/image_exporter/resources/parrots.png b/examples/original/image_exporter/resources/parrots.png similarity index 100% rename from showcase/original/image_exporter/resources/parrots.png rename to examples/original/image_exporter/resources/parrots.png diff --git a/showcase/original/image_exporter/resources/scarfy.png b/examples/original/image_exporter/resources/scarfy.png similarity index 100% rename from showcase/original/image_exporter/resources/scarfy.png rename to examples/original/image_exporter/resources/scarfy.png diff --git a/showcase/original/image_raw_importer/design/raw_importer_REF.png b/examples/original/image_raw_importer/design/raw_importer_REF.png similarity index 100% rename from showcase/original/image_raw_importer/design/raw_importer_REF.png rename to examples/original/image_raw_importer/design/raw_importer_REF.png diff --git a/showcase/original/image_raw_importer/design/raw_importer_REV0.png b/examples/original/image_raw_importer/design/raw_importer_REV0.png similarity index 100% rename from showcase/original/image_raw_importer/design/raw_importer_REV0.png rename to examples/original/image_raw_importer/design/raw_importer_REV0.png diff --git a/showcase/original/image_raw_importer/design/raw_importer_REV1.png b/examples/original/image_raw_importer/design/raw_importer_REV1.png similarity index 100% rename from showcase/original/image_raw_importer/design/raw_importer_REV1.png rename to examples/original/image_raw_importer/design/raw_importer_REV1.png diff --git a/showcase/original/image_raw_importer/design/raw_importer_REV2.png b/examples/original/image_raw_importer/design/raw_importer_REV2.png similarity index 100% rename from showcase/original/image_raw_importer/design/raw_importer_REV2.png rename to examples/original/image_raw_importer/design/raw_importer_REV2.png diff --git a/showcase/original/image_raw_importer/design/raw_importer_REV3.png b/examples/original/image_raw_importer/design/raw_importer_REV3.png similarity index 100% rename from showcase/original/image_raw_importer/design/raw_importer_REV3.png rename to examples/original/image_raw_importer/design/raw_importer_REV3.png diff --git a/showcase/original/image_raw_importer/design/raw_importer_REV4.png b/examples/original/image_raw_importer/design/raw_importer_REV4.png similarity index 100% rename from showcase/original/image_raw_importer/design/raw_importer_REV4.png rename to examples/original/image_raw_importer/design/raw_importer_REV4.png diff --git a/showcase/original/image_raw_importer/design/raw_importer_REV5.png b/examples/original/image_raw_importer/design/raw_importer_REV5.png similarity index 100% rename from showcase/original/image_raw_importer/design/raw_importer_REV5.png rename to examples/original/image_raw_importer/design/raw_importer_REV5.png diff --git a/showcase/original/image_raw_importer/image_2x2_RGBA.raw b/examples/original/image_raw_importer/image_2x2_RGBA.raw similarity index 100% rename from showcase/original/image_raw_importer/image_2x2_RGBA.raw rename to examples/original/image_raw_importer/image_2x2_RGBA.raw diff --git a/showcase/original/image_raw_importer/image_raw_importer.c b/examples/original/image_raw_importer/image_raw_importer.c similarity index 100% rename from showcase/original/image_raw_importer/image_raw_importer.c rename to examples/original/image_raw_importer/image_raw_importer.c diff --git a/showcase/original/models/models_animation.c b/examples/original/models/models_animation.c similarity index 100% rename from showcase/original/models/models_animation.c rename to examples/original/models/models_animation.c diff --git a/showcase/original/models/models_animation.png b/examples/original/models/models_animation.png similarity index 100% rename from showcase/original/models/models_animation.png rename to examples/original/models/models_animation.png diff --git a/showcase/original/models/models_billboard.c b/examples/original/models/models_billboard.c similarity index 100% rename from showcase/original/models/models_billboard.c rename to examples/original/models/models_billboard.c diff --git a/showcase/original/models/models_billboard.png b/examples/original/models/models_billboard.png similarity index 100% rename from showcase/original/models/models_billboard.png rename to examples/original/models/models_billboard.png diff --git a/showcase/original/models/models_box_collisions.c b/examples/original/models/models_box_collisions.c similarity index 100% rename from showcase/original/models/models_box_collisions.c rename to examples/original/models/models_box_collisions.c diff --git a/showcase/original/models/models_box_collisions.png b/examples/original/models/models_box_collisions.png similarity index 100% rename from showcase/original/models/models_box_collisions.png rename to examples/original/models/models_box_collisions.png diff --git a/showcase/original/models/models_cubicmap.c b/examples/original/models/models_cubicmap.c similarity index 100% rename from showcase/original/models/models_cubicmap.c rename to examples/original/models/models_cubicmap.c diff --git a/showcase/original/models/models_cubicmap.png b/examples/original/models/models_cubicmap.png similarity index 100% rename from showcase/original/models/models_cubicmap.png rename to examples/original/models/models_cubicmap.png diff --git a/showcase/original/models/models_first_person_maze.c b/examples/original/models/models_first_person_maze.c similarity index 100% rename from showcase/original/models/models_first_person_maze.c rename to examples/original/models/models_first_person_maze.c diff --git a/showcase/original/models/models_first_person_maze.png b/examples/original/models/models_first_person_maze.png similarity index 100% rename from showcase/original/models/models_first_person_maze.png rename to examples/original/models/models_first_person_maze.png diff --git a/showcase/original/models/models_geometric_shapes.c b/examples/original/models/models_geometric_shapes.c similarity index 100% rename from showcase/original/models/models_geometric_shapes.c rename to examples/original/models/models_geometric_shapes.c diff --git a/showcase/original/models/models_geometric_shapes.png b/examples/original/models/models_geometric_shapes.png similarity index 100% rename from showcase/original/models/models_geometric_shapes.png rename to examples/original/models/models_geometric_shapes.png diff --git a/showcase/original/models/models_heightmap.c b/examples/original/models/models_heightmap.c similarity index 100% rename from showcase/original/models/models_heightmap.c rename to examples/original/models/models_heightmap.c diff --git a/showcase/original/models/models_heightmap.png b/examples/original/models/models_heightmap.png similarity index 100% rename from showcase/original/models/models_heightmap.png rename to examples/original/models/models_heightmap.png diff --git a/showcase/original/models/models_loading.c b/examples/original/models/models_loading.c similarity index 100% rename from showcase/original/models/models_loading.c rename to examples/original/models/models_loading.c diff --git a/showcase/original/models/models_loading.png b/examples/original/models/models_loading.png similarity index 100% rename from showcase/original/models/models_loading.png rename to examples/original/models/models_loading.png diff --git a/showcase/original/models/models_material_pbr.c b/examples/original/models/models_material_pbr.c similarity index 100% rename from showcase/original/models/models_material_pbr.c rename to examples/original/models/models_material_pbr.c diff --git a/showcase/original/models/models_material_pbr.png b/examples/original/models/models_material_pbr.png similarity index 100% rename from showcase/original/models/models_material_pbr.png rename to examples/original/models/models_material_pbr.png diff --git a/showcase/original/models/models_mesh_generation.c b/examples/original/models/models_mesh_generation.c similarity index 100% rename from showcase/original/models/models_mesh_generation.c rename to examples/original/models/models_mesh_generation.c diff --git a/showcase/original/models/models_mesh_generation.png b/examples/original/models/models_mesh_generation.png similarity index 100% rename from showcase/original/models/models_mesh_generation.png rename to examples/original/models/models_mesh_generation.png diff --git a/showcase/original/models/models_mesh_picking.c b/examples/original/models/models_mesh_picking.c similarity index 100% rename from showcase/original/models/models_mesh_picking.c rename to examples/original/models/models_mesh_picking.c diff --git a/showcase/original/models/models_mesh_picking.png b/examples/original/models/models_mesh_picking.png similarity index 100% rename from showcase/original/models/models_mesh_picking.png rename to examples/original/models/models_mesh_picking.png diff --git a/showcase/original/models/models_orthographic_projection.c b/examples/original/models/models_orthographic_projection.c similarity index 100% rename from showcase/original/models/models_orthographic_projection.c rename to examples/original/models/models_orthographic_projection.c diff --git a/showcase/original/models/models_orthographic_projection.png b/examples/original/models/models_orthographic_projection.png similarity index 100% rename from showcase/original/models/models_orthographic_projection.png rename to examples/original/models/models_orthographic_projection.png diff --git a/showcase/original/models/models_rlgl_solar_system.c b/examples/original/models/models_rlgl_solar_system.c similarity index 100% rename from showcase/original/models/models_rlgl_solar_system.c rename to examples/original/models/models_rlgl_solar_system.c diff --git a/showcase/original/models/models_rlgl_solar_system.png b/examples/original/models/models_rlgl_solar_system.png similarity index 100% rename from showcase/original/models/models_rlgl_solar_system.png rename to examples/original/models/models_rlgl_solar_system.png diff --git a/showcase/original/models/models_skybox.c b/examples/original/models/models_skybox.c similarity index 100% rename from showcase/original/models/models_skybox.c rename to examples/original/models/models_skybox.c diff --git a/showcase/original/models/models_skybox.png b/examples/original/models/models_skybox.png similarity index 100% rename from showcase/original/models/models_skybox.png rename to examples/original/models/models_skybox.png diff --git a/showcase/original/models/models_waving_cubes.c b/examples/original/models/models_waving_cubes.c similarity index 100% rename from showcase/original/models/models_waving_cubes.c rename to examples/original/models/models_waving_cubes.c diff --git a/showcase/original/models/models_waving_cubes.png b/examples/original/models/models_waving_cubes.png similarity index 100% rename from showcase/original/models/models_waving_cubes.png rename to examples/original/models/models_waving_cubes.png diff --git a/showcase/original/models/models_yaw_pitch_roll.c b/examples/original/models/models_yaw_pitch_roll.c similarity index 100% rename from showcase/original/models/models_yaw_pitch_roll.c rename to examples/original/models/models_yaw_pitch_roll.c diff --git a/showcase/original/models/models_yaw_pitch_roll.png b/examples/original/models/models_yaw_pitch_roll.png similarity index 100% rename from showcase/original/models/models_yaw_pitch_roll.png rename to examples/original/models/models_yaw_pitch_roll.png diff --git a/samples/static/angle_gauge.png b/examples/original/models/resources/angle_gauge.png similarity index 100% rename from samples/static/angle_gauge.png rename to examples/original/models/resources/angle_gauge.png diff --git a/samples/static/background.png b/examples/original/models/resources/background.png similarity index 100% rename from samples/static/background.png rename to examples/original/models/resources/background.png diff --git a/samples/static/billboard.png b/examples/original/models/resources/billboard.png similarity index 100% rename from samples/static/billboard.png rename to examples/original/models/resources/billboard.png diff --git a/showcase/original/models/resources/cubicmap.png b/examples/original/models/resources/cubicmap.png similarity index 100% rename from showcase/original/models/resources/cubicmap.png rename to examples/original/models/resources/cubicmap.png diff --git a/showcase/original/models/resources/cubicmap_atlas.png b/examples/original/models/resources/cubicmap_atlas.png similarity index 100% rename from showcase/original/models/resources/cubicmap_atlas.png rename to examples/original/models/resources/cubicmap_atlas.png diff --git a/showcase/original/models/resources/dresden_square.hdr b/examples/original/models/resources/dresden_square.hdr similarity index 100% rename from showcase/original/models/resources/dresden_square.hdr rename to examples/original/models/resources/dresden_square.hdr diff --git a/samples/static/guy/guy.blend b/examples/original/models/resources/guy/guy.blend similarity index 100% rename from samples/static/guy/guy.blend rename to examples/original/models/resources/guy/guy.blend diff --git a/samples/static/guy/guy.iqm b/examples/original/models/resources/guy/guy.iqm similarity index 100% rename from samples/static/guy/guy.iqm rename to examples/original/models/resources/guy/guy.iqm diff --git a/samples/static/guy/guyanim.iqm b/examples/original/models/resources/guy/guyanim.iqm similarity index 100% rename from samples/static/guy/guyanim.iqm rename to examples/original/models/resources/guy/guyanim.iqm diff --git a/samples/static/guy/guytex.png b/examples/original/models/resources/guy/guytex.png similarity index 100% rename from samples/static/guy/guytex.png rename to examples/original/models/resources/guy/guytex.png diff --git a/showcase/original/models/resources/heightmap.png b/examples/original/models/resources/heightmap.png similarity index 100% rename from showcase/original/models/resources/heightmap.png rename to examples/original/models/resources/heightmap.png diff --git a/showcase/original/models/resources/models/Duck/Duck.glb b/examples/original/models/resources/models/Duck/Duck.glb similarity index 100% rename from showcase/original/models/resources/models/Duck/Duck.glb rename to examples/original/models/resources/models/Duck/Duck.glb diff --git a/showcase/original/models/resources/models/Duck/Duck.gltf b/examples/original/models/resources/models/Duck/Duck.gltf similarity index 100% rename from showcase/original/models/resources/models/Duck/Duck.gltf rename to examples/original/models/resources/models/Duck/Duck.gltf diff --git a/showcase/original/models/resources/models/Duck/Duck0.bin b/examples/original/models/resources/models/Duck/Duck0.bin similarity index 100% rename from showcase/original/models/resources/models/Duck/Duck0.bin rename to examples/original/models/resources/models/Duck/Duck0.bin diff --git a/showcase/original/models/resources/models/Duck/DuckCM.png b/examples/original/models/resources/models/Duck/DuckCM.png similarity index 100% rename from showcase/original/models/resources/models/Duck/DuckCM.png rename to examples/original/models/resources/models/Duck/DuckCM.png diff --git a/showcase/original/models/resources/models/Duck/Duck_license.txt b/examples/original/models/resources/models/Duck/Duck_license.txt similarity index 100% rename from showcase/original/models/resources/models/Duck/Duck_license.txt rename to examples/original/models/resources/models/Duck/Duck_license.txt diff --git a/showcase/original/models/resources/models/LICENSE b/examples/original/models/resources/models/LICENSE similarity index 100% rename from showcase/original/models/resources/models/LICENSE rename to examples/original/models/resources/models/LICENSE diff --git a/showcase/original/models/resources/models/bridge.obj b/examples/original/models/resources/models/bridge.obj similarity index 100% rename from showcase/original/models/resources/models/bridge.obj rename to examples/original/models/resources/models/bridge.obj diff --git a/showcase/original/models/resources/models/bridge_diffuse.png b/examples/original/models/resources/models/bridge_diffuse.png similarity index 100% rename from showcase/original/models/resources/models/bridge_diffuse.png rename to examples/original/models/resources/models/bridge_diffuse.png diff --git a/showcase/original/models/resources/models/castle.obj b/examples/original/models/resources/models/castle.obj similarity index 100% rename from showcase/original/models/resources/models/castle.obj rename to examples/original/models/resources/models/castle.obj diff --git a/showcase/original/models/resources/models/castle_diffuse.png b/examples/original/models/resources/models/castle_diffuse.png similarity index 100% rename from showcase/original/models/resources/models/castle_diffuse.png rename to examples/original/models/resources/models/castle_diffuse.png diff --git a/showcase/original/models/resources/models/cube.obj b/examples/original/models/resources/models/cube.obj similarity index 100% rename from showcase/original/models/resources/models/cube.obj rename to examples/original/models/resources/models/cube.obj diff --git a/showcase/original/models/resources/models/cube_diffuse.png b/examples/original/models/resources/models/cube_diffuse.png similarity index 100% rename from showcase/original/models/resources/models/cube_diffuse.png rename to examples/original/models/resources/models/cube_diffuse.png diff --git a/showcase/original/models/resources/models/house.obj b/examples/original/models/resources/models/house.obj similarity index 100% rename from showcase/original/models/resources/models/house.obj rename to examples/original/models/resources/models/house.obj diff --git a/showcase/original/models/resources/models/house_diffuse.png b/examples/original/models/resources/models/house_diffuse.png similarity index 100% rename from showcase/original/models/resources/models/house_diffuse.png rename to examples/original/models/resources/models/house_diffuse.png diff --git a/showcase/original/models/resources/models/market.obj b/examples/original/models/resources/models/market.obj similarity index 100% rename from showcase/original/models/resources/models/market.obj rename to examples/original/models/resources/models/market.obj diff --git a/showcase/original/models/resources/models/market_diffuse.png b/examples/original/models/resources/models/market_diffuse.png similarity index 100% rename from showcase/original/models/resources/models/market_diffuse.png rename to examples/original/models/resources/models/market_diffuse.png diff --git a/showcase/original/models/resources/models/turret.obj b/examples/original/models/resources/models/turret.obj similarity index 100% rename from showcase/original/models/resources/models/turret.obj rename to examples/original/models/resources/models/turret.obj diff --git a/showcase/original/models/resources/models/turret_diffuse.png b/examples/original/models/resources/models/turret_diffuse.png similarity index 100% rename from showcase/original/models/resources/models/turret_diffuse.png rename to examples/original/models/resources/models/turret_diffuse.png diff --git a/showcase/original/models/resources/models/well.obj b/examples/original/models/resources/models/well.obj similarity index 100% rename from showcase/original/models/resources/models/well.obj rename to examples/original/models/resources/models/well.obj diff --git a/showcase/original/models/resources/models/well_diffuse.png b/examples/original/models/resources/models/well_diffuse.png similarity index 100% rename from showcase/original/models/resources/models/well_diffuse.png rename to examples/original/models/resources/models/well_diffuse.png diff --git a/samples/static/pbr/trooper.obj b/examples/original/models/resources/pbr/trooper.obj similarity index 100% rename from samples/static/pbr/trooper.obj rename to examples/original/models/resources/pbr/trooper.obj diff --git a/samples/static/pbr/trooper_albedo.png b/examples/original/models/resources/pbr/trooper_albedo.png similarity index 100% rename from samples/static/pbr/trooper_albedo.png rename to examples/original/models/resources/pbr/trooper_albedo.png diff --git a/samples/static/pbr/trooper_ao.png b/examples/original/models/resources/pbr/trooper_ao.png similarity index 100% rename from samples/static/pbr/trooper_ao.png rename to examples/original/models/resources/pbr/trooper_ao.png diff --git a/samples/static/pbr/trooper_metalness.png b/examples/original/models/resources/pbr/trooper_metalness.png similarity index 100% rename from samples/static/pbr/trooper_metalness.png rename to examples/original/models/resources/pbr/trooper_metalness.png diff --git a/samples/static/pbr/trooper_normals.png b/examples/original/models/resources/pbr/trooper_normals.png similarity index 100% rename from samples/static/pbr/trooper_normals.png rename to examples/original/models/resources/pbr/trooper_normals.png diff --git a/samples/static/pbr/trooper_roughness.png b/examples/original/models/resources/pbr/trooper_roughness.png similarity index 100% rename from samples/static/pbr/trooper_roughness.png rename to examples/original/models/resources/pbr/trooper_roughness.png diff --git a/samples/static/pitch.png b/examples/original/models/resources/pitch.png similarity index 100% rename from samples/static/pitch.png rename to examples/original/models/resources/pitch.png diff --git a/samples/static/plane.obj b/examples/original/models/resources/plane.obj similarity index 100% rename from samples/static/plane.obj rename to examples/original/models/resources/plane.obj diff --git a/samples/static/plane.png b/examples/original/models/resources/plane.png similarity index 100% rename from samples/static/plane.png rename to examples/original/models/resources/plane.png diff --git a/samples/static/plane_diffuse.png b/examples/original/models/resources/plane_diffuse.png similarity index 100% rename from samples/static/plane_diffuse.png rename to examples/original/models/resources/plane_diffuse.png diff --git a/showcase/original/models/resources/shaders/glsl100/cubemap.fs b/examples/original/models/resources/shaders/glsl100/cubemap.fs similarity index 100% rename from showcase/original/models/resources/shaders/glsl100/cubemap.fs rename to examples/original/models/resources/shaders/glsl100/cubemap.fs diff --git a/showcase/original/models/resources/shaders/glsl100/cubemap.vs b/examples/original/models/resources/shaders/glsl100/cubemap.vs similarity index 100% rename from showcase/original/models/resources/shaders/glsl100/cubemap.vs rename to examples/original/models/resources/shaders/glsl100/cubemap.vs diff --git a/showcase/original/models/resources/shaders/glsl100/skybox.fs b/examples/original/models/resources/shaders/glsl100/skybox.fs similarity index 100% rename from showcase/original/models/resources/shaders/glsl100/skybox.fs rename to examples/original/models/resources/shaders/glsl100/skybox.fs diff --git a/showcase/original/models/resources/shaders/glsl100/skybox.vs b/examples/original/models/resources/shaders/glsl100/skybox.vs similarity index 100% rename from showcase/original/models/resources/shaders/glsl100/skybox.vs rename to examples/original/models/resources/shaders/glsl100/skybox.vs diff --git a/showcase/original/models/resources/shaders/glsl330/brdf.fs b/examples/original/models/resources/shaders/glsl330/brdf.fs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/brdf.fs rename to examples/original/models/resources/shaders/glsl330/brdf.fs diff --git a/showcase/original/models/resources/shaders/glsl330/brdf.vs b/examples/original/models/resources/shaders/glsl330/brdf.vs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/brdf.vs rename to examples/original/models/resources/shaders/glsl330/brdf.vs diff --git a/showcase/original/models/resources/shaders/glsl330/cubemap.fs b/examples/original/models/resources/shaders/glsl330/cubemap.fs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/cubemap.fs rename to examples/original/models/resources/shaders/glsl330/cubemap.fs diff --git a/showcase/original/models/resources/shaders/glsl330/cubemap.vs b/examples/original/models/resources/shaders/glsl330/cubemap.vs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/cubemap.vs rename to examples/original/models/resources/shaders/glsl330/cubemap.vs diff --git a/showcase/original/models/resources/shaders/glsl330/irradiance.fs b/examples/original/models/resources/shaders/glsl330/irradiance.fs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/irradiance.fs rename to examples/original/models/resources/shaders/glsl330/irradiance.fs diff --git a/showcase/original/models/resources/shaders/glsl330/pbr.fs b/examples/original/models/resources/shaders/glsl330/pbr.fs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/pbr.fs rename to examples/original/models/resources/shaders/glsl330/pbr.fs diff --git a/showcase/original/models/resources/shaders/glsl330/pbr.vs b/examples/original/models/resources/shaders/glsl330/pbr.vs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/pbr.vs rename to examples/original/models/resources/shaders/glsl330/pbr.vs diff --git a/showcase/original/models/resources/shaders/glsl330/prefilter.fs b/examples/original/models/resources/shaders/glsl330/prefilter.fs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/prefilter.fs rename to examples/original/models/resources/shaders/glsl330/prefilter.fs diff --git a/showcase/original/models/resources/shaders/glsl330/skybox.fs b/examples/original/models/resources/shaders/glsl330/skybox.fs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/skybox.fs rename to examples/original/models/resources/shaders/glsl330/skybox.fs diff --git a/showcase/original/models/resources/shaders/glsl330/skybox.vs b/examples/original/models/resources/shaders/glsl330/skybox.vs similarity index 100% rename from showcase/original/models/resources/shaders/glsl330/skybox.vs rename to examples/original/models/resources/shaders/glsl330/skybox.vs diff --git a/showcase/original/models/rlights.h b/examples/original/models/rlights.h similarity index 100% rename from showcase/original/models/rlights.h rename to examples/original/models/rlights.h diff --git a/showcase/original/network/network_ping_pong.c b/examples/original/network/network_ping_pong.c similarity index 100% rename from showcase/original/network/network_ping_pong.c rename to examples/original/network/network_ping_pong.c diff --git a/showcase/original/network/network_resolve_host.c b/examples/original/network/network_resolve_host.c similarity index 100% rename from showcase/original/network/network_resolve_host.c rename to examples/original/network/network_resolve_host.c diff --git a/showcase/original/network/network_tcp_client.c b/examples/original/network/network_tcp_client.c similarity index 100% rename from showcase/original/network/network_tcp_client.c rename to examples/original/network/network_tcp_client.c diff --git a/showcase/original/network/network_tcp_server.c b/examples/original/network/network_tcp_server.c similarity index 100% rename from showcase/original/network/network_tcp_server.c rename to examples/original/network/network_tcp_server.c diff --git a/showcase/original/network/network_test.c b/examples/original/network/network_test.c similarity index 100% rename from showcase/original/network/network_test.c rename to examples/original/network/network_test.c diff --git a/showcase/original/network/network_udp_client.c b/examples/original/network/network_udp_client.c similarity index 100% rename from showcase/original/network/network_udp_client.c rename to examples/original/network/network_udp_client.c diff --git a/showcase/original/network/network_udp_server.c b/examples/original/network/network_udp_server.c similarity index 100% rename from showcase/original/network/network_udp_server.c rename to examples/original/network/network_udp_server.c diff --git a/showcase/original/others/easings.h b/examples/original/others/easings.h similarity index 100% rename from showcase/original/others/easings.h rename to examples/original/others/easings.h diff --git a/showcase/original/others/easings_testbed.c b/examples/original/others/easings_testbed.c similarity index 100% rename from showcase/original/others/easings_testbed.c rename to examples/original/others/easings_testbed.c diff --git a/showcase/original/others/external/include/GLFW/glfw3.h b/examples/original/others/external/include/GLFW/glfw3.h similarity index 100% rename from showcase/original/others/external/include/GLFW/glfw3.h rename to examples/original/others/external/include/GLFW/glfw3.h diff --git a/showcase/original/others/external/include/GLFW/glfw3native.h b/examples/original/others/external/include/GLFW/glfw3native.h similarity index 100% rename from showcase/original/others/external/include/GLFW/glfw3native.h rename to examples/original/others/external/include/GLFW/glfw3native.h diff --git a/showcase/original/others/external/include/glad.h b/examples/original/others/external/include/glad.h similarity index 100% rename from showcase/original/others/external/include/glad.h rename to examples/original/others/external/include/glad.h diff --git a/showcase/original/others/external/lib/libglfw3.a b/examples/original/others/external/lib/libglfw3.a similarity index 100% rename from showcase/original/others/external/lib/libglfw3.a rename to examples/original/others/external/lib/libglfw3.a diff --git a/showcase/original/others/raudio_standalone.c b/examples/original/others/raudio_standalone.c similarity index 100% rename from showcase/original/others/raudio_standalone.c rename to examples/original/others/raudio_standalone.c diff --git a/showcase/original/others/resources/audio/guitar_noodling.ogg b/examples/original/others/resources/audio/guitar_noodling.ogg similarity index 100% rename from showcase/original/others/resources/audio/guitar_noodling.ogg rename to examples/original/others/resources/audio/guitar_noodling.ogg diff --git a/showcase/original/others/resources/audio/tanatana.ogg b/examples/original/others/resources/audio/tanatana.ogg similarity index 100% rename from showcase/original/others/resources/audio/tanatana.ogg rename to examples/original/others/resources/audio/tanatana.ogg diff --git a/showcase/original/others/resources/audio/weird.wav b/examples/original/others/resources/audio/weird.wav similarity index 100% rename from showcase/original/others/resources/audio/weird.wav rename to examples/original/others/resources/audio/weird.wav diff --git a/showcase/original/others/rlgl_standalone.c b/examples/original/others/rlgl_standalone.c similarity index 100% rename from showcase/original/others/rlgl_standalone.c rename to examples/original/others/rlgl_standalone.c diff --git a/showcase/original/physics/physics_demo.c b/examples/original/physics/physics_demo.c similarity index 100% rename from showcase/original/physics/physics_demo.c rename to examples/original/physics/physics_demo.c diff --git a/showcase/original/physics/physics_demo.png b/examples/original/physics/physics_demo.png similarity index 100% rename from showcase/original/physics/physics_demo.png rename to examples/original/physics/physics_demo.png diff --git a/showcase/original/physics/physics_friction.c b/examples/original/physics/physics_friction.c similarity index 100% rename from showcase/original/physics/physics_friction.c rename to examples/original/physics/physics_friction.c diff --git a/showcase/original/physics/physics_friction.png b/examples/original/physics/physics_friction.png similarity index 100% rename from showcase/original/physics/physics_friction.png rename to examples/original/physics/physics_friction.png diff --git a/showcase/original/physics/physics_movement.c b/examples/original/physics/physics_movement.c similarity index 100% rename from showcase/original/physics/physics_movement.c rename to examples/original/physics/physics_movement.c diff --git a/showcase/original/physics/physics_movement.png b/examples/original/physics/physics_movement.png similarity index 100% rename from showcase/original/physics/physics_movement.png rename to examples/original/physics/physics_movement.png diff --git a/showcase/original/physics/physics_restitution.c b/examples/original/physics/physics_restitution.c similarity index 100% rename from showcase/original/physics/physics_restitution.c rename to examples/original/physics/physics_restitution.c diff --git a/showcase/original/physics/physics_restitution.png b/examples/original/physics/physics_restitution.png similarity index 100% rename from showcase/original/physics/physics_restitution.png rename to examples/original/physics/physics_restitution.png diff --git a/showcase/original/physics/physics_shatter.c b/examples/original/physics/physics_shatter.c similarity index 100% rename from showcase/original/physics/physics_shatter.c rename to examples/original/physics/physics_shatter.c diff --git a/showcase/original/physics/physics_shatter.png b/examples/original/physics/physics_shatter.png similarity index 100% rename from showcase/original/physics/physics_shatter.png rename to examples/original/physics/physics_shatter.png diff --git a/showcase/original/portable_window/portable_window.c b/examples/original/portable_window/portable_window.c similarity index 100% rename from showcase/original/portable_window/portable_window.c rename to examples/original/portable_window/portable_window.c diff --git a/showcase/original/property_list/dm_property_list.h b/examples/original/property_list/dm_property_list.h similarity index 100% rename from showcase/original/property_list/dm_property_list.h rename to examples/original/property_list/dm_property_list.h diff --git a/showcase/original/property_list/property_list.c b/examples/original/property_list/property_list.c similarity index 100% rename from showcase/original/property_list/property_list.c rename to examples/original/property_list/property_list.c diff --git a/showcase/original/scroll_panel/gui_scroll_panel.c b/examples/original/scroll_panel/gui_scroll_panel.c similarity index 100% rename from showcase/original/scroll_panel/gui_scroll_panel.c rename to examples/original/scroll_panel/gui_scroll_panel.c diff --git a/showcase/original/shaders/resources/fudesumi.png b/examples/original/shaders/resources/fudesumi.png similarity index 100% rename from showcase/original/shaders/resources/fudesumi.png rename to examples/original/shaders/resources/fudesumi.png diff --git a/showcase/original/shaders/resources/mask.png b/examples/original/shaders/resources/mask.png similarity index 100% rename from showcase/original/shaders/resources/mask.png rename to examples/original/shaders/resources/mask.png diff --git a/showcase/original/shaders/resources/models/barracks.obj b/examples/original/shaders/resources/models/barracks.obj similarity index 100% rename from showcase/original/shaders/resources/models/barracks.obj rename to examples/original/shaders/resources/models/barracks.obj diff --git a/showcase/original/shaders/resources/models/barracks_diffuse.png b/examples/original/shaders/resources/models/barracks_diffuse.png similarity index 100% rename from showcase/original/shaders/resources/models/barracks_diffuse.png rename to examples/original/shaders/resources/models/barracks_diffuse.png diff --git a/showcase/original/shaders/resources/models/church.obj b/examples/original/shaders/resources/models/church.obj similarity index 100% rename from showcase/original/shaders/resources/models/church.obj rename to examples/original/shaders/resources/models/church.obj diff --git a/showcase/original/shaders/resources/models/church_diffuse.png b/examples/original/shaders/resources/models/church_diffuse.png similarity index 100% rename from showcase/original/shaders/resources/models/church_diffuse.png rename to examples/original/shaders/resources/models/church_diffuse.png diff --git a/samples/static/model_shader/watermill.obj b/examples/original/shaders/resources/models/watermill.obj similarity index 100% rename from samples/static/model_shader/watermill.obj rename to examples/original/shaders/resources/models/watermill.obj diff --git a/samples/static/model_shader/watermill_diffuse.png b/examples/original/shaders/resources/models/watermill_diffuse.png similarity index 100% rename from samples/static/model_shader/watermill_diffuse.png rename to examples/original/shaders/resources/models/watermill_diffuse.png diff --git a/showcase/original/shaders/resources/plasma.png b/examples/original/shaders/resources/plasma.png similarity index 100% rename from showcase/original/shaders/resources/plasma.png rename to examples/original/shaders/resources/plasma.png diff --git a/showcase/original/shaders/resources/raysan.png b/examples/original/shaders/resources/raysan.png similarity index 100% rename from showcase/original/shaders/resources/raysan.png rename to examples/original/shaders/resources/raysan.png diff --git a/showcase/original/shaders/resources/shaders/glsl100/base.fs b/examples/original/shaders/resources/shaders/glsl100/base.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/base.fs rename to examples/original/shaders/resources/shaders/glsl100/base.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/base.vs b/examples/original/shaders/resources/shaders/glsl100/base.vs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/base.vs rename to examples/original/shaders/resources/shaders/glsl100/base.vs diff --git a/showcase/original/shaders/resources/shaders/glsl100/base_lighting.vs b/examples/original/shaders/resources/shaders/glsl100/base_lighting.vs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/base_lighting.vs rename to examples/original/shaders/resources/shaders/glsl100/base_lighting.vs diff --git a/showcase/original/shaders/resources/shaders/glsl100/bloom.fs b/examples/original/shaders/resources/shaders/glsl100/bloom.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/bloom.fs rename to examples/original/shaders/resources/shaders/glsl100/bloom.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/blur.fs b/examples/original/shaders/resources/shaders/glsl100/blur.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/blur.fs rename to examples/original/shaders/resources/shaders/glsl100/blur.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/cross_hatching.fs b/examples/original/shaders/resources/shaders/glsl100/cross_hatching.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/cross_hatching.fs rename to examples/original/shaders/resources/shaders/glsl100/cross_hatching.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/cross_stitching.fs b/examples/original/shaders/resources/shaders/glsl100/cross_stitching.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/cross_stitching.fs rename to examples/original/shaders/resources/shaders/glsl100/cross_stitching.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/cubes_panning.fs b/examples/original/shaders/resources/shaders/glsl100/cubes_panning.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/cubes_panning.fs rename to examples/original/shaders/resources/shaders/glsl100/cubes_panning.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/depth.fs b/examples/original/shaders/resources/shaders/glsl100/depth.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/depth.fs rename to examples/original/shaders/resources/shaders/glsl100/depth.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/distortion.fs b/examples/original/shaders/resources/shaders/glsl100/distortion.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/distortion.fs rename to examples/original/shaders/resources/shaders/glsl100/distortion.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/dream_vision.fs b/examples/original/shaders/resources/shaders/glsl100/dream_vision.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/dream_vision.fs rename to examples/original/shaders/resources/shaders/glsl100/dream_vision.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/eratosthenes.fs b/examples/original/shaders/resources/shaders/glsl100/eratosthenes.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/eratosthenes.fs rename to examples/original/shaders/resources/shaders/glsl100/eratosthenes.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/fisheye.fs b/examples/original/shaders/resources/shaders/glsl100/fisheye.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/fisheye.fs rename to examples/original/shaders/resources/shaders/glsl100/fisheye.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/fog.fs b/examples/original/shaders/resources/shaders/glsl100/fog.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/fog.fs rename to examples/original/shaders/resources/shaders/glsl100/fog.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/grayscale.fs b/examples/original/shaders/resources/shaders/glsl100/grayscale.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/grayscale.fs rename to examples/original/shaders/resources/shaders/glsl100/grayscale.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/julia_set.fs b/examples/original/shaders/resources/shaders/glsl100/julia_set.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/julia_set.fs rename to examples/original/shaders/resources/shaders/glsl100/julia_set.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/lighting.fs b/examples/original/shaders/resources/shaders/glsl100/lighting.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/lighting.fs rename to examples/original/shaders/resources/shaders/glsl100/lighting.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/mask.fs b/examples/original/shaders/resources/shaders/glsl100/mask.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/mask.fs rename to examples/original/shaders/resources/shaders/glsl100/mask.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/palette_switch.fs b/examples/original/shaders/resources/shaders/glsl100/palette_switch.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/palette_switch.fs rename to examples/original/shaders/resources/shaders/glsl100/palette_switch.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/pixelizer.fs b/examples/original/shaders/resources/shaders/glsl100/pixelizer.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/pixelizer.fs rename to examples/original/shaders/resources/shaders/glsl100/pixelizer.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/posterization.fs b/examples/original/shaders/resources/shaders/glsl100/posterization.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/posterization.fs rename to examples/original/shaders/resources/shaders/glsl100/posterization.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/predator.fs b/examples/original/shaders/resources/shaders/glsl100/predator.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/predator.fs rename to examples/original/shaders/resources/shaders/glsl100/predator.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/raymarching.fs b/examples/original/shaders/resources/shaders/glsl100/raymarching.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/raymarching.fs rename to examples/original/shaders/resources/shaders/glsl100/raymarching.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/scanlines.fs b/examples/original/shaders/resources/shaders/glsl100/scanlines.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/scanlines.fs rename to examples/original/shaders/resources/shaders/glsl100/scanlines.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/sobel.fs b/examples/original/shaders/resources/shaders/glsl100/sobel.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/sobel.fs rename to examples/original/shaders/resources/shaders/glsl100/sobel.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/spotlight.fs b/examples/original/shaders/resources/shaders/glsl100/spotlight.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/spotlight.fs rename to examples/original/shaders/resources/shaders/glsl100/spotlight.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/swirl.fs b/examples/original/shaders/resources/shaders/glsl100/swirl.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/swirl.fs rename to examples/original/shaders/resources/shaders/glsl100/swirl.fs diff --git a/showcase/original/shaders/resources/shaders/glsl100/wave.fs b/examples/original/shaders/resources/shaders/glsl100/wave.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl100/wave.fs rename to examples/original/shaders/resources/shaders/glsl100/wave.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/base.fs b/examples/original/shaders/resources/shaders/glsl120/base.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/base.fs rename to examples/original/shaders/resources/shaders/glsl120/base.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/base.vs b/examples/original/shaders/resources/shaders/glsl120/base.vs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/base.vs rename to examples/original/shaders/resources/shaders/glsl120/base.vs diff --git a/showcase/original/shaders/resources/shaders/glsl120/base_lighting.vs b/examples/original/shaders/resources/shaders/glsl120/base_lighting.vs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/base_lighting.vs rename to examples/original/shaders/resources/shaders/glsl120/base_lighting.vs diff --git a/showcase/original/shaders/resources/shaders/glsl120/bloom.fs b/examples/original/shaders/resources/shaders/glsl120/bloom.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/bloom.fs rename to examples/original/shaders/resources/shaders/glsl120/bloom.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/blur.fs b/examples/original/shaders/resources/shaders/glsl120/blur.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/blur.fs rename to examples/original/shaders/resources/shaders/glsl120/blur.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/cross_hatching.fs b/examples/original/shaders/resources/shaders/glsl120/cross_hatching.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/cross_hatching.fs rename to examples/original/shaders/resources/shaders/glsl120/cross_hatching.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/cross_stitching.fs b/examples/original/shaders/resources/shaders/glsl120/cross_stitching.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/cross_stitching.fs rename to examples/original/shaders/resources/shaders/glsl120/cross_stitching.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/distortion.fs b/examples/original/shaders/resources/shaders/glsl120/distortion.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/distortion.fs rename to examples/original/shaders/resources/shaders/glsl120/distortion.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/dream_vision.fs b/examples/original/shaders/resources/shaders/glsl120/dream_vision.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/dream_vision.fs rename to examples/original/shaders/resources/shaders/glsl120/dream_vision.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/fisheye.fs b/examples/original/shaders/resources/shaders/glsl120/fisheye.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/fisheye.fs rename to examples/original/shaders/resources/shaders/glsl120/fisheye.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/fog.fs b/examples/original/shaders/resources/shaders/glsl120/fog.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/fog.fs rename to examples/original/shaders/resources/shaders/glsl120/fog.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/grayscale.fs b/examples/original/shaders/resources/shaders/glsl120/grayscale.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/grayscale.fs rename to examples/original/shaders/resources/shaders/glsl120/grayscale.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/palette_switch.fs b/examples/original/shaders/resources/shaders/glsl120/palette_switch.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/palette_switch.fs rename to examples/original/shaders/resources/shaders/glsl120/palette_switch.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/pixelizer.fs b/examples/original/shaders/resources/shaders/glsl120/pixelizer.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/pixelizer.fs rename to examples/original/shaders/resources/shaders/glsl120/pixelizer.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/posterization.fs b/examples/original/shaders/resources/shaders/glsl120/posterization.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/posterization.fs rename to examples/original/shaders/resources/shaders/glsl120/posterization.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/predator.fs b/examples/original/shaders/resources/shaders/glsl120/predator.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/predator.fs rename to examples/original/shaders/resources/shaders/glsl120/predator.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/scanlines.fs b/examples/original/shaders/resources/shaders/glsl120/scanlines.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/scanlines.fs rename to examples/original/shaders/resources/shaders/glsl120/scanlines.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/sobel.fs b/examples/original/shaders/resources/shaders/glsl120/sobel.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/sobel.fs rename to examples/original/shaders/resources/shaders/glsl120/sobel.fs diff --git a/showcase/original/shaders/resources/shaders/glsl120/swirl.fs b/examples/original/shaders/resources/shaders/glsl120/swirl.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl120/swirl.fs rename to examples/original/shaders/resources/shaders/glsl120/swirl.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/base.fs b/examples/original/shaders/resources/shaders/glsl330/base.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/base.fs rename to examples/original/shaders/resources/shaders/glsl330/base.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/base.vs b/examples/original/shaders/resources/shaders/glsl330/base.vs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/base.vs rename to examples/original/shaders/resources/shaders/glsl330/base.vs diff --git a/showcase/original/shaders/resources/shaders/glsl330/base_lighting.vs b/examples/original/shaders/resources/shaders/glsl330/base_lighting.vs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/base_lighting.vs rename to examples/original/shaders/resources/shaders/glsl330/base_lighting.vs diff --git a/showcase/original/shaders/resources/shaders/glsl330/bloom.fs b/examples/original/shaders/resources/shaders/glsl330/bloom.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/bloom.fs rename to examples/original/shaders/resources/shaders/glsl330/bloom.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/blur.fs b/examples/original/shaders/resources/shaders/glsl330/blur.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/blur.fs rename to examples/original/shaders/resources/shaders/glsl330/blur.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/cross_hatching.fs b/examples/original/shaders/resources/shaders/glsl330/cross_hatching.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/cross_hatching.fs rename to examples/original/shaders/resources/shaders/glsl330/cross_hatching.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/cross_stitching.fs b/examples/original/shaders/resources/shaders/glsl330/cross_stitching.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/cross_stitching.fs rename to examples/original/shaders/resources/shaders/glsl330/cross_stitching.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/cubes_panning.fs b/examples/original/shaders/resources/shaders/glsl330/cubes_panning.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/cubes_panning.fs rename to examples/original/shaders/resources/shaders/glsl330/cubes_panning.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/depth.fs b/examples/original/shaders/resources/shaders/glsl330/depth.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/depth.fs rename to examples/original/shaders/resources/shaders/glsl330/depth.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/distortion.fs b/examples/original/shaders/resources/shaders/glsl330/distortion.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/distortion.fs rename to examples/original/shaders/resources/shaders/glsl330/distortion.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/dream_vision.fs b/examples/original/shaders/resources/shaders/glsl330/dream_vision.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/dream_vision.fs rename to examples/original/shaders/resources/shaders/glsl330/dream_vision.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/eratosthenes.fs b/examples/original/shaders/resources/shaders/glsl330/eratosthenes.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/eratosthenes.fs rename to examples/original/shaders/resources/shaders/glsl330/eratosthenes.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/fisheye.fs b/examples/original/shaders/resources/shaders/glsl330/fisheye.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/fisheye.fs rename to examples/original/shaders/resources/shaders/glsl330/fisheye.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/fog.fs b/examples/original/shaders/resources/shaders/glsl330/fog.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/fog.fs rename to examples/original/shaders/resources/shaders/glsl330/fog.fs diff --git a/samples/static/model_shader/grayscale.fs b/examples/original/shaders/resources/shaders/glsl330/grayscale.fs similarity index 100% rename from samples/static/model_shader/grayscale.fs rename to examples/original/shaders/resources/shaders/glsl330/grayscale.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/julia_set.fs b/examples/original/shaders/resources/shaders/glsl330/julia_set.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/julia_set.fs rename to examples/original/shaders/resources/shaders/glsl330/julia_set.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/lighting.fs b/examples/original/shaders/resources/shaders/glsl330/lighting.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/lighting.fs rename to examples/original/shaders/resources/shaders/glsl330/lighting.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/mask.fs b/examples/original/shaders/resources/shaders/glsl330/mask.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/mask.fs rename to examples/original/shaders/resources/shaders/glsl330/mask.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/overdraw.fs b/examples/original/shaders/resources/shaders/glsl330/overdraw.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/overdraw.fs rename to examples/original/shaders/resources/shaders/glsl330/overdraw.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/palette_switch.fs b/examples/original/shaders/resources/shaders/glsl330/palette_switch.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/palette_switch.fs rename to examples/original/shaders/resources/shaders/glsl330/palette_switch.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/pixelizer.fs b/examples/original/shaders/resources/shaders/glsl330/pixelizer.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/pixelizer.fs rename to examples/original/shaders/resources/shaders/glsl330/pixelizer.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/posterization.fs b/examples/original/shaders/resources/shaders/glsl330/posterization.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/posterization.fs rename to examples/original/shaders/resources/shaders/glsl330/posterization.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/predator.fs b/examples/original/shaders/resources/shaders/glsl330/predator.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/predator.fs rename to examples/original/shaders/resources/shaders/glsl330/predator.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/raymarching.fs b/examples/original/shaders/resources/shaders/glsl330/raymarching.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/raymarching.fs rename to examples/original/shaders/resources/shaders/glsl330/raymarching.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/scanlines.fs b/examples/original/shaders/resources/shaders/glsl330/scanlines.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/scanlines.fs rename to examples/original/shaders/resources/shaders/glsl330/scanlines.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/sobel.fs b/examples/original/shaders/resources/shaders/glsl330/sobel.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/sobel.fs rename to examples/original/shaders/resources/shaders/glsl330/sobel.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/spotlight.fs b/examples/original/shaders/resources/shaders/glsl330/spotlight.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/spotlight.fs rename to examples/original/shaders/resources/shaders/glsl330/spotlight.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/swirl.fs b/examples/original/shaders/resources/shaders/glsl330/swirl.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/swirl.fs rename to examples/original/shaders/resources/shaders/glsl330/swirl.fs diff --git a/showcase/original/shaders/resources/shaders/glsl330/wave.fs b/examples/original/shaders/resources/shaders/glsl330/wave.fs similarity index 100% rename from showcase/original/shaders/resources/shaders/glsl330/wave.fs rename to examples/original/shaders/resources/shaders/glsl330/wave.fs diff --git a/showcase/original/shaders/resources/space.png b/examples/original/shaders/resources/space.png similarity index 100% rename from showcase/original/shaders/resources/space.png rename to examples/original/shaders/resources/space.png diff --git a/showcase/original/shaders/resources/texel_checker.png b/examples/original/shaders/resources/texel_checker.png similarity index 100% rename from showcase/original/shaders/resources/texel_checker.png rename to examples/original/shaders/resources/texel_checker.png diff --git a/showcase/original/shaders/rlights.h b/examples/original/shaders/rlights.h similarity index 100% rename from showcase/original/shaders/rlights.h rename to examples/original/shaders/rlights.h diff --git a/showcase/original/shaders/shaders_basic_lighting.c b/examples/original/shaders/shaders_basic_lighting.c similarity index 100% rename from showcase/original/shaders/shaders_basic_lighting.c rename to examples/original/shaders/shaders_basic_lighting.c diff --git a/showcase/original/shaders/shaders_basic_lighting.png b/examples/original/shaders/shaders_basic_lighting.png similarity index 100% rename from showcase/original/shaders/shaders_basic_lighting.png rename to examples/original/shaders/shaders_basic_lighting.png diff --git a/showcase/original/shaders/shaders_custom_uniform.c b/examples/original/shaders/shaders_custom_uniform.c similarity index 100% rename from showcase/original/shaders/shaders_custom_uniform.c rename to examples/original/shaders/shaders_custom_uniform.c diff --git a/showcase/original/shaders/shaders_custom_uniform.png b/examples/original/shaders/shaders_custom_uniform.png similarity index 100% rename from showcase/original/shaders/shaders_custom_uniform.png rename to examples/original/shaders/shaders_custom_uniform.png diff --git a/showcase/original/shaders/shaders_eratosthenes.c b/examples/original/shaders/shaders_eratosthenes.c similarity index 100% rename from showcase/original/shaders/shaders_eratosthenes.c rename to examples/original/shaders/shaders_eratosthenes.c diff --git a/showcase/original/shaders/shaders_eratosthenes.png b/examples/original/shaders/shaders_eratosthenes.png similarity index 100% rename from showcase/original/shaders/shaders_eratosthenes.png rename to examples/original/shaders/shaders_eratosthenes.png diff --git a/showcase/original/shaders/shaders_fog.c b/examples/original/shaders/shaders_fog.c similarity index 100% rename from showcase/original/shaders/shaders_fog.c rename to examples/original/shaders/shaders_fog.c diff --git a/showcase/original/shaders/shaders_fog.png b/examples/original/shaders/shaders_fog.png similarity index 100% rename from showcase/original/shaders/shaders_fog.png rename to examples/original/shaders/shaders_fog.png diff --git a/showcase/original/shaders/shaders_julia_set.c b/examples/original/shaders/shaders_julia_set.c similarity index 100% rename from showcase/original/shaders/shaders_julia_set.c rename to examples/original/shaders/shaders_julia_set.c diff --git a/showcase/original/shaders/shaders_julia_set.png b/examples/original/shaders/shaders_julia_set.png similarity index 100% rename from showcase/original/shaders/shaders_julia_set.png rename to examples/original/shaders/shaders_julia_set.png diff --git a/showcase/original/shaders/shaders_model_shader.c b/examples/original/shaders/shaders_model_shader.c similarity index 100% rename from showcase/original/shaders/shaders_model_shader.c rename to examples/original/shaders/shaders_model_shader.c diff --git a/showcase/original/shaders/shaders_model_shader.png b/examples/original/shaders/shaders_model_shader.png similarity index 100% rename from showcase/original/shaders/shaders_model_shader.png rename to examples/original/shaders/shaders_model_shader.png diff --git a/showcase/original/shaders/shaders_palette_switch.c b/examples/original/shaders/shaders_palette_switch.c similarity index 100% rename from showcase/original/shaders/shaders_palette_switch.c rename to examples/original/shaders/shaders_palette_switch.c diff --git a/showcase/original/shaders/shaders_palette_switch.png b/examples/original/shaders/shaders_palette_switch.png similarity index 100% rename from showcase/original/shaders/shaders_palette_switch.png rename to examples/original/shaders/shaders_palette_switch.png diff --git a/showcase/original/shaders/shaders_postprocessing.c b/examples/original/shaders/shaders_postprocessing.c similarity index 100% rename from showcase/original/shaders/shaders_postprocessing.c rename to examples/original/shaders/shaders_postprocessing.c diff --git a/showcase/original/shaders/shaders_postprocessing.png b/examples/original/shaders/shaders_postprocessing.png similarity index 100% rename from showcase/original/shaders/shaders_postprocessing.png rename to examples/original/shaders/shaders_postprocessing.png diff --git a/showcase/original/shaders/shaders_raymarching.c b/examples/original/shaders/shaders_raymarching.c similarity index 100% rename from showcase/original/shaders/shaders_raymarching.c rename to examples/original/shaders/shaders_raymarching.c diff --git a/showcase/original/shaders/shaders_raymarching.png b/examples/original/shaders/shaders_raymarching.png similarity index 100% rename from showcase/original/shaders/shaders_raymarching.png rename to examples/original/shaders/shaders_raymarching.png diff --git a/showcase/original/shaders/shaders_shapes_textures.c b/examples/original/shaders/shaders_shapes_textures.c similarity index 100% rename from showcase/original/shaders/shaders_shapes_textures.c rename to examples/original/shaders/shaders_shapes_textures.c diff --git a/showcase/original/shaders/shaders_shapes_textures.png b/examples/original/shaders/shaders_shapes_textures.png similarity index 100% rename from showcase/original/shaders/shaders_shapes_textures.png rename to examples/original/shaders/shaders_shapes_textures.png diff --git a/showcase/original/shaders/shaders_simple_mask.c b/examples/original/shaders/shaders_simple_mask.c similarity index 100% rename from showcase/original/shaders/shaders_simple_mask.c rename to examples/original/shaders/shaders_simple_mask.c diff --git a/showcase/original/shaders/shaders_simple_mask.png b/examples/original/shaders/shaders_simple_mask.png similarity index 100% rename from showcase/original/shaders/shaders_simple_mask.png rename to examples/original/shaders/shaders_simple_mask.png diff --git a/showcase/original/shaders/shaders_spotlight.c b/examples/original/shaders/shaders_spotlight.c similarity index 100% rename from showcase/original/shaders/shaders_spotlight.c rename to examples/original/shaders/shaders_spotlight.c diff --git a/showcase/original/shaders/shaders_spotlight.png b/examples/original/shaders/shaders_spotlight.png similarity index 100% rename from showcase/original/shaders/shaders_spotlight.png rename to examples/original/shaders/shaders_spotlight.png diff --git a/showcase/original/shaders/shaders_texture_drawing.c b/examples/original/shaders/shaders_texture_drawing.c similarity index 100% rename from showcase/original/shaders/shaders_texture_drawing.c rename to examples/original/shaders/shaders_texture_drawing.c diff --git a/showcase/original/shaders/shaders_texture_drawing.png b/examples/original/shaders/shaders_texture_drawing.png similarity index 100% rename from showcase/original/shaders/shaders_texture_drawing.png rename to examples/original/shaders/shaders_texture_drawing.png diff --git a/showcase/original/shaders/shaders_texture_waves.c b/examples/original/shaders/shaders_texture_waves.c similarity index 100% rename from showcase/original/shaders/shaders_texture_waves.c rename to examples/original/shaders/shaders_texture_waves.c diff --git a/showcase/original/shaders/shaders_texture_waves.png b/examples/original/shaders/shaders_texture_waves.png similarity index 100% rename from showcase/original/shaders/shaders_texture_waves.png rename to examples/original/shaders/shaders_texture_waves.png diff --git a/showcase/original/shapes/easings.h b/examples/original/shapes/easings.h similarity index 100% rename from showcase/original/shapes/easings.h rename to examples/original/shapes/easings.h diff --git a/showcase/original/shapes/raygui.h b/examples/original/shapes/raygui.h similarity index 100% rename from showcase/original/shapes/raygui.h rename to examples/original/shapes/raygui.h diff --git a/showcase/original/shapes/shapes_basic_shapes.c b/examples/original/shapes/shapes_basic_shapes.c similarity index 100% rename from showcase/original/shapes/shapes_basic_shapes.c rename to examples/original/shapes/shapes_basic_shapes.c diff --git a/showcase/original/shapes/shapes_basic_shapes.png b/examples/original/shapes/shapes_basic_shapes.png similarity index 100% rename from showcase/original/shapes/shapes_basic_shapes.png rename to examples/original/shapes/shapes_basic_shapes.png diff --git a/showcase/original/shapes/shapes_bouncing_ball.c b/examples/original/shapes/shapes_bouncing_ball.c similarity index 100% rename from showcase/original/shapes/shapes_bouncing_ball.c rename to examples/original/shapes/shapes_bouncing_ball.c diff --git a/showcase/original/shapes/shapes_bouncing_ball.png b/examples/original/shapes/shapes_bouncing_ball.png similarity index 100% rename from showcase/original/shapes/shapes_bouncing_ball.png rename to examples/original/shapes/shapes_bouncing_ball.png diff --git a/showcase/original/shapes/shapes_collision_area.c b/examples/original/shapes/shapes_collision_area.c similarity index 100% rename from showcase/original/shapes/shapes_collision_area.c rename to examples/original/shapes/shapes_collision_area.c diff --git a/showcase/original/shapes/shapes_collision_area.png b/examples/original/shapes/shapes_collision_area.png similarity index 100% rename from showcase/original/shapes/shapes_collision_area.png rename to examples/original/shapes/shapes_collision_area.png diff --git a/showcase/original/shapes/shapes_colors_palette.c b/examples/original/shapes/shapes_colors_palette.c similarity index 100% rename from showcase/original/shapes/shapes_colors_palette.c rename to examples/original/shapes/shapes_colors_palette.c diff --git a/showcase/original/shapes/shapes_colors_palette.png b/examples/original/shapes/shapes_colors_palette.png similarity index 100% rename from showcase/original/shapes/shapes_colors_palette.png rename to examples/original/shapes/shapes_colors_palette.png diff --git a/showcase/original/shapes/shapes_draw_circle_sector.c b/examples/original/shapes/shapes_draw_circle_sector.c similarity index 100% rename from showcase/original/shapes/shapes_draw_circle_sector.c rename to examples/original/shapes/shapes_draw_circle_sector.c diff --git a/showcase/original/shapes/shapes_draw_circle_sector.png b/examples/original/shapes/shapes_draw_circle_sector.png similarity index 100% rename from showcase/original/shapes/shapes_draw_circle_sector.png rename to examples/original/shapes/shapes_draw_circle_sector.png diff --git a/showcase/original/shapes/shapes_draw_rectangle_rounded.c b/examples/original/shapes/shapes_draw_rectangle_rounded.c similarity index 100% rename from showcase/original/shapes/shapes_draw_rectangle_rounded.c rename to examples/original/shapes/shapes_draw_rectangle_rounded.c diff --git a/showcase/original/shapes/shapes_draw_rectangle_rounded.png b/examples/original/shapes/shapes_draw_rectangle_rounded.png similarity index 100% rename from showcase/original/shapes/shapes_draw_rectangle_rounded.png rename to examples/original/shapes/shapes_draw_rectangle_rounded.png diff --git a/showcase/original/shapes/shapes_draw_ring.c b/examples/original/shapes/shapes_draw_ring.c similarity index 100% rename from showcase/original/shapes/shapes_draw_ring.c rename to examples/original/shapes/shapes_draw_ring.c diff --git a/showcase/original/shapes/shapes_draw_ring.png b/examples/original/shapes/shapes_draw_ring.png similarity index 100% rename from showcase/original/shapes/shapes_draw_ring.png rename to examples/original/shapes/shapes_draw_ring.png diff --git a/showcase/original/shapes/shapes_easings_ball_anim.c b/examples/original/shapes/shapes_easings_ball_anim.c similarity index 100% rename from showcase/original/shapes/shapes_easings_ball_anim.c rename to examples/original/shapes/shapes_easings_ball_anim.c diff --git a/showcase/original/shapes/shapes_easings_ball_anim.png b/examples/original/shapes/shapes_easings_ball_anim.png similarity index 100% rename from showcase/original/shapes/shapes_easings_ball_anim.png rename to examples/original/shapes/shapes_easings_ball_anim.png diff --git a/showcase/original/shapes/shapes_easings_box_anim.c b/examples/original/shapes/shapes_easings_box_anim.c similarity index 100% rename from showcase/original/shapes/shapes_easings_box_anim.c rename to examples/original/shapes/shapes_easings_box_anim.c diff --git a/showcase/original/shapes/shapes_easings_box_anim.png b/examples/original/shapes/shapes_easings_box_anim.png similarity index 100% rename from showcase/original/shapes/shapes_easings_box_anim.png rename to examples/original/shapes/shapes_easings_box_anim.png diff --git a/showcase/original/shapes/shapes_easings_rectangle_array.c b/examples/original/shapes/shapes_easings_rectangle_array.c similarity index 100% rename from showcase/original/shapes/shapes_easings_rectangle_array.c rename to examples/original/shapes/shapes_easings_rectangle_array.c diff --git a/showcase/original/shapes/shapes_easings_rectangle_array.png b/examples/original/shapes/shapes_easings_rectangle_array.png similarity index 100% rename from showcase/original/shapes/shapes_easings_rectangle_array.png rename to examples/original/shapes/shapes_easings_rectangle_array.png diff --git a/showcase/original/shapes/shapes_following_eyes.c b/examples/original/shapes/shapes_following_eyes.c similarity index 100% rename from showcase/original/shapes/shapes_following_eyes.c rename to examples/original/shapes/shapes_following_eyes.c diff --git a/showcase/original/shapes/shapes_following_eyes.png b/examples/original/shapes/shapes_following_eyes.png similarity index 100% rename from showcase/original/shapes/shapes_following_eyes.png rename to examples/original/shapes/shapes_following_eyes.png diff --git a/showcase/original/shapes/shapes_lines_bezier.c b/examples/original/shapes/shapes_lines_bezier.c similarity index 100% rename from showcase/original/shapes/shapes_lines_bezier.c rename to examples/original/shapes/shapes_lines_bezier.c diff --git a/showcase/original/shapes/shapes_lines_bezier.png b/examples/original/shapes/shapes_lines_bezier.png similarity index 100% rename from showcase/original/shapes/shapes_lines_bezier.png rename to examples/original/shapes/shapes_lines_bezier.png diff --git a/showcase/original/shapes/shapes_logo_raylib.c b/examples/original/shapes/shapes_logo_raylib.c similarity index 100% rename from showcase/original/shapes/shapes_logo_raylib.c rename to examples/original/shapes/shapes_logo_raylib.c diff --git a/showcase/original/shapes/shapes_logo_raylib.png b/examples/original/shapes/shapes_logo_raylib.png similarity index 100% rename from showcase/original/shapes/shapes_logo_raylib.png rename to examples/original/shapes/shapes_logo_raylib.png diff --git a/showcase/original/shapes/shapes_logo_raylib_anim.c b/examples/original/shapes/shapes_logo_raylib_anim.c similarity index 100% rename from showcase/original/shapes/shapes_logo_raylib_anim.c rename to examples/original/shapes/shapes_logo_raylib_anim.c diff --git a/showcase/original/shapes/shapes_logo_raylib_anim.png b/examples/original/shapes/shapes_logo_raylib_anim.png similarity index 100% rename from showcase/original/shapes/shapes_logo_raylib_anim.png rename to examples/original/shapes/shapes_logo_raylib_anim.png diff --git a/showcase/original/shapes/shapes_rectangle_scaling.c b/examples/original/shapes/shapes_rectangle_scaling.c similarity index 100% rename from showcase/original/shapes/shapes_rectangle_scaling.c rename to examples/original/shapes/shapes_rectangle_scaling.c diff --git a/showcase/original/shapes/shapes_rectangle_scaling.png b/examples/original/shapes/shapes_rectangle_scaling.png similarity index 100% rename from showcase/original/shapes/shapes_rectangle_scaling.png rename to examples/original/shapes/shapes_rectangle_scaling.png diff --git a/showcase/original/standalone/custom_backend.h b/examples/original/standalone/custom_backend.h similarity index 100% rename from showcase/original/standalone/custom_backend.h rename to examples/original/standalone/custom_backend.h diff --git a/showcase/original/standalone/raygui_standalone.c b/examples/original/standalone/raygui_standalone.c similarity index 100% rename from showcase/original/standalone/raygui_standalone.c rename to examples/original/standalone/raygui_standalone.c diff --git a/showcase/original/text/resources/AnonymousPro-Bold.ttf b/examples/original/text/resources/AnonymousPro-Bold.ttf similarity index 100% rename from showcase/original/text/resources/AnonymousPro-Bold.ttf rename to examples/original/text/resources/AnonymousPro-Bold.ttf diff --git a/showcase/original/text/resources/KAISG.ttf b/examples/original/text/resources/KAISG.ttf similarity index 100% rename from showcase/original/text/resources/KAISG.ttf rename to examples/original/text/resources/KAISG.ttf diff --git a/showcase/original/text/resources/LICENSE b/examples/original/text/resources/LICENSE similarity index 100% rename from showcase/original/text/resources/LICENSE rename to examples/original/text/resources/LICENSE diff --git a/showcase/original/text/resources/bmfont.fnt b/examples/original/text/resources/bmfont.fnt similarity index 100% rename from showcase/original/text/resources/bmfont.fnt rename to examples/original/text/resources/bmfont.fnt diff --git a/showcase/original/text/resources/bmfont.png b/examples/original/text/resources/bmfont.png similarity index 100% rename from showcase/original/text/resources/bmfont.png rename to examples/original/text/resources/bmfont.png diff --git a/showcase/original/text/resources/custom_alagard.png b/examples/original/text/resources/custom_alagard.png similarity index 100% rename from showcase/original/text/resources/custom_alagard.png rename to examples/original/text/resources/custom_alagard.png diff --git a/showcase/original/text/resources/custom_jupiter_crash.png b/examples/original/text/resources/custom_jupiter_crash.png similarity index 100% rename from showcase/original/text/resources/custom_jupiter_crash.png rename to examples/original/text/resources/custom_jupiter_crash.png diff --git a/showcase/original/text/resources/custom_mecha.png b/examples/original/text/resources/custom_mecha.png similarity index 100% rename from showcase/original/text/resources/custom_mecha.png rename to examples/original/text/resources/custom_mecha.png diff --git a/showcase/original/text/resources/dejavu.fnt b/examples/original/text/resources/dejavu.fnt similarity index 100% rename from showcase/original/text/resources/dejavu.fnt rename to examples/original/text/resources/dejavu.fnt diff --git a/showcase/original/text/resources/dejavu.png b/examples/original/text/resources/dejavu.png similarity index 100% rename from showcase/original/text/resources/dejavu.png rename to examples/original/text/resources/dejavu.png diff --git a/showcase/original/text/resources/emoji.fnt b/examples/original/text/resources/emoji.fnt similarity index 100% rename from showcase/original/text/resources/emoji.fnt rename to examples/original/text/resources/emoji.fnt diff --git a/showcase/original/text/resources/emoji.png b/examples/original/text/resources/emoji.png similarity index 100% rename from showcase/original/text/resources/emoji.png rename to examples/original/text/resources/emoji.png diff --git a/samples/static/alagard.png b/examples/original/text/resources/fonts/alagard.png similarity index 100% rename from samples/static/alagard.png rename to examples/original/text/resources/fonts/alagard.png diff --git a/showcase/original/text/resources/fonts/alpha_beta.png b/examples/original/text/resources/fonts/alpha_beta.png similarity index 100% rename from showcase/original/text/resources/fonts/alpha_beta.png rename to examples/original/text/resources/fonts/alpha_beta.png diff --git a/showcase/original/text/resources/fonts/jupiter_crash.png b/examples/original/text/resources/fonts/jupiter_crash.png similarity index 100% rename from showcase/original/text/resources/fonts/jupiter_crash.png rename to examples/original/text/resources/fonts/jupiter_crash.png diff --git a/showcase/original/text/resources/fonts/mecha.png b/examples/original/text/resources/fonts/mecha.png similarity index 100% rename from showcase/original/text/resources/fonts/mecha.png rename to examples/original/text/resources/fonts/mecha.png diff --git a/showcase/original/text/resources/fonts/pixantiqua.png b/examples/original/text/resources/fonts/pixantiqua.png similarity index 100% rename from showcase/original/text/resources/fonts/pixantiqua.png rename to examples/original/text/resources/fonts/pixantiqua.png diff --git a/showcase/original/text/resources/fonts/pixelplay.png b/examples/original/text/resources/fonts/pixelplay.png similarity index 100% rename from showcase/original/text/resources/fonts/pixelplay.png rename to examples/original/text/resources/fonts/pixelplay.png diff --git a/showcase/original/text/resources/fonts/romulus.png b/examples/original/text/resources/fonts/romulus.png similarity index 100% rename from showcase/original/text/resources/fonts/romulus.png rename to examples/original/text/resources/fonts/romulus.png diff --git a/showcase/original/text/resources/fonts/setback.png b/examples/original/text/resources/fonts/setback.png similarity index 100% rename from showcase/original/text/resources/fonts/setback.png rename to examples/original/text/resources/fonts/setback.png diff --git a/showcase/original/text/resources/notoCJK.fnt b/examples/original/text/resources/notoCJK.fnt similarity index 100% rename from showcase/original/text/resources/notoCJK.fnt rename to examples/original/text/resources/notoCJK.fnt diff --git a/showcase/original/text/resources/notoCJK.png b/examples/original/text/resources/notoCJK.png similarity index 100% rename from showcase/original/text/resources/notoCJK.png rename to examples/original/text/resources/notoCJK.png diff --git a/showcase/original/text/resources/pixantiqua.fnt b/examples/original/text/resources/pixantiqua.fnt similarity index 100% rename from showcase/original/text/resources/pixantiqua.fnt rename to examples/original/text/resources/pixantiqua.fnt diff --git a/showcase/original/text/resources/pixantiqua.png b/examples/original/text/resources/pixantiqua.png similarity index 100% rename from showcase/original/text/resources/pixantiqua.png rename to examples/original/text/resources/pixantiqua.png diff --git a/showcase/original/text/resources/pixantiqua.ttf b/examples/original/text/resources/pixantiqua.ttf similarity index 100% rename from showcase/original/text/resources/pixantiqua.ttf rename to examples/original/text/resources/pixantiqua.ttf diff --git a/showcase/original/text/resources/shaders/glsl100/sdf.fs b/examples/original/text/resources/shaders/glsl100/sdf.fs similarity index 100% rename from showcase/original/text/resources/shaders/glsl100/sdf.fs rename to examples/original/text/resources/shaders/glsl100/sdf.fs diff --git a/showcase/original/text/resources/shaders/glsl330/sdf.fs b/examples/original/text/resources/shaders/glsl330/sdf.fs similarity index 100% rename from showcase/original/text/resources/shaders/glsl330/sdf.fs rename to examples/original/text/resources/shaders/glsl330/sdf.fs diff --git a/showcase/original/text/text_font_filters.c b/examples/original/text/text_font_filters.c similarity index 100% rename from showcase/original/text/text_font_filters.c rename to examples/original/text/text_font_filters.c diff --git a/showcase/original/text/text_font_filters.png b/examples/original/text/text_font_filters.png similarity index 100% rename from showcase/original/text/text_font_filters.png rename to examples/original/text/text_font_filters.png diff --git a/showcase/original/text/text_font_loading.c b/examples/original/text/text_font_loading.c similarity index 100% rename from showcase/original/text/text_font_loading.c rename to examples/original/text/text_font_loading.c diff --git a/showcase/original/text/text_font_loading.png b/examples/original/text/text_font_loading.png similarity index 100% rename from showcase/original/text/text_font_loading.png rename to examples/original/text/text_font_loading.png diff --git a/showcase/original/text/text_font_sdf.c b/examples/original/text/text_font_sdf.c similarity index 100% rename from showcase/original/text/text_font_sdf.c rename to examples/original/text/text_font_sdf.c diff --git a/showcase/original/text/text_font_sdf.png b/examples/original/text/text_font_sdf.png similarity index 100% rename from showcase/original/text/text_font_sdf.png rename to examples/original/text/text_font_sdf.png diff --git a/showcase/original/text/text_font_spritefont.c b/examples/original/text/text_font_spritefont.c similarity index 100% rename from showcase/original/text/text_font_spritefont.c rename to examples/original/text/text_font_spritefont.c diff --git a/showcase/original/text/text_font_spritefont.png b/examples/original/text/text_font_spritefont.png similarity index 100% rename from showcase/original/text/text_font_spritefont.png rename to examples/original/text/text_font_spritefont.png diff --git a/showcase/original/text/text_format_text.c b/examples/original/text/text_format_text.c similarity index 100% rename from showcase/original/text/text_format_text.c rename to examples/original/text/text_format_text.c diff --git a/showcase/original/text/text_format_text.png b/examples/original/text/text_format_text.png similarity index 100% rename from showcase/original/text/text_format_text.png rename to examples/original/text/text_format_text.png diff --git a/showcase/original/text/text_input_box.c b/examples/original/text/text_input_box.c similarity index 100% rename from showcase/original/text/text_input_box.c rename to examples/original/text/text_input_box.c diff --git a/showcase/original/text/text_input_box.png b/examples/original/text/text_input_box.png similarity index 100% rename from showcase/original/text/text_input_box.png rename to examples/original/text/text_input_box.png diff --git a/showcase/original/text/text_raylib_fonts.c b/examples/original/text/text_raylib_fonts.c similarity index 100% rename from showcase/original/text/text_raylib_fonts.c rename to examples/original/text/text_raylib_fonts.c diff --git a/showcase/original/text/text_raylib_fonts.png b/examples/original/text/text_raylib_fonts.png similarity index 100% rename from showcase/original/text/text_raylib_fonts.png rename to examples/original/text/text_raylib_fonts.png diff --git a/showcase/original/text/text_rectangle_bounds.c b/examples/original/text/text_rectangle_bounds.c similarity index 100% rename from showcase/original/text/text_rectangle_bounds.c rename to examples/original/text/text_rectangle_bounds.c diff --git a/showcase/original/text/text_rectangle_bounds.png b/examples/original/text/text_rectangle_bounds.png similarity index 100% rename from showcase/original/text/text_rectangle_bounds.png rename to examples/original/text/text_rectangle_bounds.png diff --git a/showcase/original/text/text_unicode.c b/examples/original/text/text_unicode.c similarity index 100% rename from showcase/original/text/text_unicode.c rename to examples/original/text/text_unicode.c diff --git a/showcase/original/text/text_unicode.png b/examples/original/text/text_unicode.png similarity index 100% rename from showcase/original/text/text_unicode.png rename to examples/original/text/text_unicode.png diff --git a/showcase/original/text/text_writing_anim.c b/examples/original/text/text_writing_anim.c similarity index 100% rename from showcase/original/text/text_writing_anim.c rename to examples/original/text/text_writing_anim.c diff --git a/showcase/original/text/text_writing_anim.png b/examples/original/text/text_writing_anim.png similarity index 100% rename from showcase/original/text/text_writing_anim.png rename to examples/original/text/text_writing_anim.png diff --git a/showcase/original/text_box_selection/textbox_extended_demo.c b/examples/original/text_box_selection/textbox_extended_demo.c similarity index 100% rename from showcase/original/text_box_selection/textbox_extended_demo.c rename to examples/original/text_box_selection/textbox_extended_demo.c diff --git a/showcase/original/text_editor/text_editor.c b/examples/original/text_editor/text_editor.c similarity index 100% rename from showcase/original/text_editor/text_editor.c rename to examples/original/text_editor/text_editor.c diff --git a/showcase/original/textures/resources/KAISG.ttf b/examples/original/textures/resources/KAISG.ttf similarity index 100% rename from showcase/original/textures/resources/KAISG.ttf rename to examples/original/textures/resources/KAISG.ttf diff --git a/showcase/original/textures/resources/LICENSE b/examples/original/textures/resources/LICENSE similarity index 100% rename from showcase/original/textures/resources/LICENSE rename to examples/original/textures/resources/LICENSE diff --git a/showcase/original/textures/resources/boom.wav b/examples/original/textures/resources/boom.wav similarity index 100% rename from showcase/original/textures/resources/boom.wav rename to examples/original/textures/resources/boom.wav diff --git a/showcase/original/textures/resources/button.png b/examples/original/textures/resources/button.png similarity index 100% rename from showcase/original/textures/resources/button.png rename to examples/original/textures/resources/button.png diff --git a/showcase/original/textures/resources/buttonfx.wav b/examples/original/textures/resources/buttonfx.wav similarity index 100% rename from showcase/original/textures/resources/buttonfx.wav rename to examples/original/textures/resources/buttonfx.wav diff --git a/showcase/original/textures/resources/cat.png b/examples/original/textures/resources/cat.png similarity index 100% rename from showcase/original/textures/resources/cat.png rename to examples/original/textures/resources/cat.png diff --git a/showcase/original/textures/resources/custom_jupiter_crash.png b/examples/original/textures/resources/custom_jupiter_crash.png similarity index 100% rename from showcase/original/textures/resources/custom_jupiter_crash.png rename to examples/original/textures/resources/custom_jupiter_crash.png diff --git a/showcase/original/textures/resources/cyberpunk_street_background.png b/examples/original/textures/resources/cyberpunk_street_background.png similarity index 100% rename from showcase/original/textures/resources/cyberpunk_street_background.png rename to examples/original/textures/resources/cyberpunk_street_background.png diff --git a/showcase/original/textures/resources/cyberpunk_street_foreground.png b/examples/original/textures/resources/cyberpunk_street_foreground.png similarity index 100% rename from showcase/original/textures/resources/cyberpunk_street_foreground.png rename to examples/original/textures/resources/cyberpunk_street_foreground.png diff --git a/showcase/original/textures/resources/cyberpunk_street_midground.png b/examples/original/textures/resources/cyberpunk_street_midground.png similarity index 100% rename from showcase/original/textures/resources/cyberpunk_street_midground.png rename to examples/original/textures/resources/cyberpunk_street_midground.png diff --git a/showcase/original/textures/resources/explosion.png b/examples/original/textures/resources/explosion.png similarity index 100% rename from showcase/original/textures/resources/explosion.png rename to examples/original/textures/resources/explosion.png diff --git a/showcase/original/textures/resources/fudesumi.png b/examples/original/textures/resources/fudesumi.png similarity index 100% rename from showcase/original/textures/resources/fudesumi.png rename to examples/original/textures/resources/fudesumi.png diff --git a/showcase/original/textures/resources/fudesumi.raw b/examples/original/textures/resources/fudesumi.raw similarity index 100% rename from showcase/original/textures/resources/fudesumi.raw rename to examples/original/textures/resources/fudesumi.raw diff --git a/showcase/original/textures/resources/ninepatch_button.png b/examples/original/textures/resources/ninepatch_button.png similarity index 100% rename from showcase/original/textures/resources/ninepatch_button.png rename to examples/original/textures/resources/ninepatch_button.png diff --git a/showcase/original/textures/resources/parrots.png b/examples/original/textures/resources/parrots.png similarity index 100% rename from showcase/original/textures/resources/parrots.png rename to examples/original/textures/resources/parrots.png diff --git a/showcase/original/textures/resources/raylib_logo.png b/examples/original/textures/resources/raylib_logo.png similarity index 100% rename from showcase/original/textures/resources/raylib_logo.png rename to examples/original/textures/resources/raylib_logo.png diff --git a/showcase/original/textures/resources/scarfy.png b/examples/original/textures/resources/scarfy.png similarity index 100% rename from showcase/original/textures/resources/scarfy.png rename to examples/original/textures/resources/scarfy.png diff --git a/showcase/original/textures/resources/smoke.png b/examples/original/textures/resources/smoke.png similarity index 100% rename from showcase/original/textures/resources/smoke.png rename to examples/original/textures/resources/smoke.png diff --git a/showcase/original/textures/resources/wabbit_alpha.png b/examples/original/textures/resources/wabbit_alpha.png similarity index 100% rename from showcase/original/textures/resources/wabbit_alpha.png rename to examples/original/textures/resources/wabbit_alpha.png diff --git a/showcase/original/textures/textures_background_scrolling.c b/examples/original/textures/textures_background_scrolling.c similarity index 100% rename from showcase/original/textures/textures_background_scrolling.c rename to examples/original/textures/textures_background_scrolling.c diff --git a/showcase/original/textures/textures_background_scrolling.png b/examples/original/textures/textures_background_scrolling.png similarity index 100% rename from showcase/original/textures/textures_background_scrolling.png rename to examples/original/textures/textures_background_scrolling.png diff --git a/showcase/original/textures/textures_bunnymark.c b/examples/original/textures/textures_bunnymark.c similarity index 100% rename from showcase/original/textures/textures_bunnymark.c rename to examples/original/textures/textures_bunnymark.c diff --git a/showcase/original/textures/textures_bunnymark.png b/examples/original/textures/textures_bunnymark.png similarity index 100% rename from showcase/original/textures/textures_bunnymark.png rename to examples/original/textures/textures_bunnymark.png diff --git a/showcase/original/textures/textures_image_drawing.c b/examples/original/textures/textures_image_drawing.c similarity index 100% rename from showcase/original/textures/textures_image_drawing.c rename to examples/original/textures/textures_image_drawing.c diff --git a/showcase/original/textures/textures_image_drawing.png b/examples/original/textures/textures_image_drawing.png similarity index 100% rename from showcase/original/textures/textures_image_drawing.png rename to examples/original/textures/textures_image_drawing.png diff --git a/showcase/original/textures/textures_image_generation.c b/examples/original/textures/textures_image_generation.c similarity index 100% rename from showcase/original/textures/textures_image_generation.c rename to examples/original/textures/textures_image_generation.c diff --git a/showcase/original/textures/textures_image_generation.png b/examples/original/textures/textures_image_generation.png similarity index 100% rename from showcase/original/textures/textures_image_generation.png rename to examples/original/textures/textures_image_generation.png diff --git a/showcase/original/textures/textures_image_loading.c b/examples/original/textures/textures_image_loading.c similarity index 100% rename from showcase/original/textures/textures_image_loading.c rename to examples/original/textures/textures_image_loading.c diff --git a/showcase/original/textures/textures_image_loading.png b/examples/original/textures/textures_image_loading.png similarity index 100% rename from showcase/original/textures/textures_image_loading.png rename to examples/original/textures/textures_image_loading.png diff --git a/showcase/original/textures/textures_image_processing.c b/examples/original/textures/textures_image_processing.c similarity index 100% rename from showcase/original/textures/textures_image_processing.c rename to examples/original/textures/textures_image_processing.c diff --git a/showcase/original/textures/textures_image_processing.png b/examples/original/textures/textures_image_processing.png similarity index 100% rename from showcase/original/textures/textures_image_processing.png rename to examples/original/textures/textures_image_processing.png diff --git a/showcase/original/textures/textures_image_text.c b/examples/original/textures/textures_image_text.c similarity index 100% rename from showcase/original/textures/textures_image_text.c rename to examples/original/textures/textures_image_text.c diff --git a/showcase/original/textures/textures_image_text.png b/examples/original/textures/textures_image_text.png similarity index 100% rename from showcase/original/textures/textures_image_text.png rename to examples/original/textures/textures_image_text.png diff --git a/showcase/original/textures/textures_logo_raylib.c b/examples/original/textures/textures_logo_raylib.c similarity index 100% rename from showcase/original/textures/textures_logo_raylib.c rename to examples/original/textures/textures_logo_raylib.c diff --git a/showcase/original/textures/textures_logo_raylib.png b/examples/original/textures/textures_logo_raylib.png similarity index 100% rename from showcase/original/textures/textures_logo_raylib.png rename to examples/original/textures/textures_logo_raylib.png diff --git a/showcase/original/textures/textures_mouse_painting.c b/examples/original/textures/textures_mouse_painting.c similarity index 100% rename from showcase/original/textures/textures_mouse_painting.c rename to examples/original/textures/textures_mouse_painting.c diff --git a/showcase/original/textures/textures_mouse_painting.png b/examples/original/textures/textures_mouse_painting.png similarity index 100% rename from showcase/original/textures/textures_mouse_painting.png rename to examples/original/textures/textures_mouse_painting.png diff --git a/showcase/original/textures/textures_npatch_drawing.c b/examples/original/textures/textures_npatch_drawing.c similarity index 100% rename from showcase/original/textures/textures_npatch_drawing.c rename to examples/original/textures/textures_npatch_drawing.c diff --git a/showcase/original/textures/textures_npatch_drawing.png b/examples/original/textures/textures_npatch_drawing.png similarity index 100% rename from showcase/original/textures/textures_npatch_drawing.png rename to examples/original/textures/textures_npatch_drawing.png diff --git a/showcase/original/textures/textures_particles_blending.c b/examples/original/textures/textures_particles_blending.c similarity index 100% rename from showcase/original/textures/textures_particles_blending.c rename to examples/original/textures/textures_particles_blending.c diff --git a/showcase/original/textures/textures_particles_blending.png b/examples/original/textures/textures_particles_blending.png similarity index 100% rename from showcase/original/textures/textures_particles_blending.png rename to examples/original/textures/textures_particles_blending.png diff --git a/showcase/original/textures/textures_raw_data.c b/examples/original/textures/textures_raw_data.c similarity index 100% rename from showcase/original/textures/textures_raw_data.c rename to examples/original/textures/textures_raw_data.c diff --git a/showcase/original/textures/textures_raw_data.png b/examples/original/textures/textures_raw_data.png similarity index 100% rename from showcase/original/textures/textures_raw_data.png rename to examples/original/textures/textures_raw_data.png diff --git a/showcase/original/textures/textures_rectangle.c b/examples/original/textures/textures_rectangle.c similarity index 100% rename from showcase/original/textures/textures_rectangle.c rename to examples/original/textures/textures_rectangle.c diff --git a/showcase/original/textures/textures_rectangle.png b/examples/original/textures/textures_rectangle.png similarity index 100% rename from showcase/original/textures/textures_rectangle.png rename to examples/original/textures/textures_rectangle.png diff --git a/showcase/original/textures/textures_sprite_button.c b/examples/original/textures/textures_sprite_button.c similarity index 100% rename from showcase/original/textures/textures_sprite_button.c rename to examples/original/textures/textures_sprite_button.c diff --git a/showcase/original/textures/textures_sprite_button.png b/examples/original/textures/textures_sprite_button.png similarity index 100% rename from showcase/original/textures/textures_sprite_button.png rename to examples/original/textures/textures_sprite_button.png diff --git a/showcase/original/textures/textures_sprite_explosion.c b/examples/original/textures/textures_sprite_explosion.c similarity index 100% rename from showcase/original/textures/textures_sprite_explosion.c rename to examples/original/textures/textures_sprite_explosion.c diff --git a/showcase/original/textures/textures_sprite_explosion.png b/examples/original/textures/textures_sprite_explosion.png similarity index 100% rename from showcase/original/textures/textures_sprite_explosion.png rename to examples/original/textures/textures_sprite_explosion.png diff --git a/showcase/original/textures/textures_srcrec_dstrec.c b/examples/original/textures/textures_srcrec_dstrec.c similarity index 100% rename from showcase/original/textures/textures_srcrec_dstrec.c rename to examples/original/textures/textures_srcrec_dstrec.c diff --git a/showcase/original/textures/textures_srcrec_dstrec.png b/examples/original/textures/textures_srcrec_dstrec.png similarity index 100% rename from showcase/original/textures/textures_srcrec_dstrec.png rename to examples/original/textures/textures_srcrec_dstrec.png diff --git a/showcase/original/textures/textures_to_image.c b/examples/original/textures/textures_to_image.c similarity index 100% rename from showcase/original/textures/textures_to_image.c rename to examples/original/textures/textures_to_image.c diff --git a/showcase/original/textures/textures_to_image.png b/examples/original/textures/textures_to_image.png similarity index 100% rename from showcase/original/textures/textures_to_image.png rename to examples/original/textures/textures_to_image.png diff --git a/showcase/src/example/audio/audio_module_playing.rs b/examples/src/example/audio/audio_module_playing.rs similarity index 81% rename from showcase/src/example/audio/audio_module_playing.rs rename to examples/src/example/audio/audio_module_playing.rs index 51c8344d..95041d75 100644 --- a/showcase/src/example/audio/audio_module_playing.rs +++ b/examples/src/example/audio/audio_module_playing.rs @@ -49,11 +49,11 @@ pub fn run(rl for i in 0..MAX_CIRCLES { circles[i].alpha = 0.0; - circles[i].radius = raylib::get_random_value::(10, 40) as f32 ; - circles[i].position.x = raylib::get_random_value::(circles[i].radius as i32, screen_width - circles[i].radius as i32) as f32 ; - circles[i].position.y = raylib::get_random_value::(circles[i].radius as i32, screen_height - circles[i].radius as i32) as f32 ; - circles[i].speed = raylib::get_random_value::(1, 100) as f32 / 2000.0; - circles[i].color = colors[raylib::get_random_value::(0, 13) as usize]; + circles[i].radius = rl.get_random_value::(10, 40) as f32 ; + circles[i].position.x = rl.get_random_value::(circles[i].radius as i32, screen_width - circles[i].radius as i32) as f32 ; + circles[i].position.y = rl.get_random_value::(circles[i].radius as i32, screen_height - circles[i].radius as i32) as f32 ; + circles[i].speed = rl.get_random_value::(1, 100) as f32 / 2000.0; + circles[i].color = colors[rl.get_random_value::(0, 13) as usize]; } let mut music = Music::load_music_stream(thread, "original/audio/resources/mini1111.xm").unwrap(); @@ -115,11 +115,11 @@ pub fn run(rl if circles[i].alpha <= 0.0 { circles[i].alpha = 0.0; - circles[i].radius = raylib::get_random_value::(10, 40) as f32; - circles[i].position.x = raylib::get_random_value::(circles[i].radius as i32, screen_width - circles[i].radius as i32) as f32; - circles[i].position.y = raylib::get_random_value::(circles[i].radius as i32, screen_height - circles[i].radius as i32) as f32; - circles[i].color = colors[raylib::get_random_value::(0, 13) as usize]; - circles[i].speed = raylib::get_random_value::(1, 100) as f32 / 2000.0; + circles[i].radius = rl.get_random_value::(10, 40) as f32; + circles[i].position.x = rl.get_random_value::(circles[i].radius as i32, screen_width - circles[i].radius as i32) as f32; + circles[i].position.y = rl.get_random_value::(circles[i].radius as i32, screen_height - circles[i].radius as i32) as f32; + circles[i].color = colors[rl.get_random_value::(0, 13) as usize]; + circles[i].speed = rl.get_random_value::(1, 100) as f32 / 2000.0; } } //---------------------------------------------------------------------------------- diff --git a/showcase/src/example/audio/audio_multichannel_sound.rs b/examples/src/example/audio/audio_multichannel_sound.rs similarity index 100% rename from showcase/src/example/audio/audio_multichannel_sound.rs rename to examples/src/example/audio/audio_multichannel_sound.rs diff --git a/showcase/src/example/audio/audio_music_stream.rs b/examples/src/example/audio/audio_music_stream.rs similarity index 100% rename from showcase/src/example/audio/audio_music_stream.rs rename to examples/src/example/audio/audio_music_stream.rs diff --git a/showcase/src/example/audio/audio_raw_stream.rs b/examples/src/example/audio/audio_raw_stream.rs similarity index 98% rename from showcase/src/example/audio/audio_raw_stream.rs rename to examples/src/example/audio/audio_raw_stream.rs index 3466960c..39b2bf8b 100644 --- a/showcase/src/example/audio/audio_raw_stream.rs +++ b/examples/src/example/audio/audio_raw_stream.rs @@ -28,7 +28,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { let mut audio = RaylibAudio::init_audio_device(); // Initialize audio device // Init raw audio stream (sample rate: 22050, sample size: 16bit-short, channels: 1-mono) - let mut stream = AudioStream::init_audio_stream(thread, 22050, 16, 1); + let mut stream = AudioStream::load_audio_stream(thread, 22050, 16, 1); // Buffer for the single cycle waveform we are synthesizing let mut data = [0i16; MAX_SAMPLES / std::mem::size_of::()]; @@ -68,7 +68,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { // Sample mouse input. mousePosition = rl.get_mouse_position(); - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { let fp = mousePosition.y; frequency = 40.0 + fp; diff --git a/showcase/src/example/audio/audio_sound_loading.png b/examples/src/example/audio/audio_sound_loading.png similarity index 100% rename from showcase/src/example/audio/audio_sound_loading.png rename to examples/src/example/audio/audio_sound_loading.png diff --git a/showcase/src/example/audio/audio_sound_loading.rs b/examples/src/example/audio/audio_sound_loading.rs similarity index 100% rename from showcase/src/example/audio/audio_sound_loading.rs rename to examples/src/example/audio/audio_sound_loading.rs diff --git a/showcase/src/example/audio/mod.rs b/examples/src/example/audio/mod.rs similarity index 100% rename from showcase/src/example/audio/mod.rs rename to examples/src/example/audio/mod.rs diff --git a/showcase/src/example/controls_test_suite/controls_test_suite.rs b/examples/src/example/controls_test_suite/controls_test_suite.rs similarity index 96% rename from showcase/src/example/controls_test_suite/controls_test_suite.rs rename to examples/src/example/controls_test_suite/controls_test_suite.rs index cf070e57..2a266482 100644 --- a/showcase/src/example/controls_test_suite/controls_test_suite.rs +++ b/examples/src/example/controls_test_suite/controls_test_suite.rs @@ -101,7 +101,10 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { // Update //---------------------------------------------------------------------------------- - _exit_window = rl.window_should_close(); + #[cfg(not(target_arch = "wasm32"))] + { + _exit_window = rl.window_should_close(); + } if rl.is_key_pressed(crate::EXIT_KEY) { showMessageBox = !showMessageBox; @@ -127,7 +130,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { //---------------------------------------------------------------------------------- let mut d = rl.begin_drawing(&thread); let hex = d.gui_get_style(DEFAULT, BACKGROUND_COLOR as i32); - d.clear_background(Color::get_color(hex)); + d.clear_background(Color::get_color(hex as u32)); // raygui: controls drawing //---------------------------------------------------------------------------------- @@ -172,7 +175,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { d.gui_set_style(BUTTON, TEXT_ALIGNMENT as i32, GUI_TEXT_ALIGN_CENTER as i32); - let itext = d.gui_icon_text(RICON_FILE_SAVE, Some(rstr!("Save File"))); + let itext = d.gui_icon_text(RAYGUI_ICON_FILE_SAVE, Some(rstr!("Save File"))); let itext = CString::new(itext).unwrap(); if d.gui_button(rrect(25, 255, 125, 30), Some(&itext)) { showTextInputBox = true; @@ -308,7 +311,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { d.get_screen_height(), Color::RAYWHITE.fade(0.8), ); - let itext = d.gui_icon_text(RICON_EXIT, Some(rstr!("Close Window"))); + let itext = d.gui_icon_text(RAYGUI_ICON_EXIT, Some(rstr!("Close Window"))); let itext = CString::new(itext).unwrap(); let result = d.gui_message_box( rrect( @@ -337,7 +340,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { d.get_screen_height(), Color::RAYWHITE.fade(0.8), ); - let itext = unsafe { d.gui_icon_text(RICON_FILE_SAVE, Some(rstr!("Save file as..."))) }; + let itext = unsafe { d.gui_icon_text(RAYGUI_ICON_FILE_SAVE, Some(rstr!("Save file as..."))) }; let itext = CString::new(itext).unwrap(); let result = d.gui_text_input_box( rrect( diff --git a/showcase/src/example/controls_test_suite/mod.rs b/examples/src/example/controls_test_suite/mod.rs similarity index 100% rename from showcase/src/example/controls_test_suite/mod.rs rename to examples/src/example/controls_test_suite/mod.rs diff --git a/showcase/src/example/core/core_2d_camera.rs b/examples/src/example/core/core_2d_camera.rs similarity index 94% rename from showcase/src/example/core/core_2d_camera.rs rename to examples/src/example/core/core_2d_camera.rs index b0f52f49..39c703d5 100644 --- a/showcase/src/example/core/core_2d_camera.rs +++ b/examples/src/example/core/core_2d_camera.rs @@ -28,17 +28,17 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { let mut spacing = 0f32; for i in 0..MAX_BUILDINGS as usize { - buildings[i].width = get_random_value::(50, 200) as f32; - buildings[i].height = get_random_value::(100, 800) as f32; + buildings[i].width = rl.get_random_value::(50, 200) as f32; + buildings[i].height = rl.get_random_value::(100, 800) as f32; buildings[i].y = screen_height as f32 - 130.0 - buildings[i].height; buildings[i].x = -6000.0 + spacing; spacing += buildings[i].width; build_colors[i] = Color::new( - get_random_value::(200, 240) as u8, - get_random_value::(200, 240) as u8, - get_random_value::(200, 250) as u8, + rl.get_random_value::(200, 240) as u8, + rl.get_random_value::(200, 240) as u8, + rl.get_random_value::(200, 250) as u8, 255, ); } diff --git a/showcase/src/example/core/core_2d_camera_platformer.rs b/examples/src/example/core/core_2d_camera_platformer.rs similarity index 100% rename from showcase/src/example/core/core_2d_camera_platformer.rs rename to examples/src/example/core/core_2d_camera_platformer.rs diff --git a/showcase/src/example/core/core_3d_camera_first_person.rs b/examples/src/example/core/core_3d_camera_first_person.rs similarity index 92% rename from showcase/src/example/core/core_3d_camera_first_person.rs rename to examples/src/example/core/core_3d_camera_first_person.rs index 7c19ef60..b0b74e5c 100644 --- a/showcase/src/example/core/core_3d_camera_first_person.rs +++ b/examples/src/example/core/core_3d_camera_first_person.rs @@ -31,15 +31,15 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { let mut colors = [Color::default(); MAX_COLUMNS]; for i in 0..MAX_COLUMNS { - heights[i] = raylib::get_random_value::(1, 12) as f32; + heights[i] = rl.get_random_value::(1, 12) as f32; positions[i] = rvec3( - raylib::get_random_value::(-15, 15), + rl.get_random_value::(-15, 15), heights[i] / 2.0, - raylib::get_random_value::(-15, 15), + rl.get_random_value::(-15, 15), ); colors[i] = Color::new( - raylib::get_random_value::(20, 255) as u8, - raylib::get_random_value::(10, 55) as u8, + rl.get_random_value::(20, 255) as u8, + rl.get_random_value::(10, 55) as u8, 30, 255, ); diff --git a/showcase/src/example/core/core_3d_camera_free.rs b/examples/src/example/core/core_3d_camera_free.rs similarity index 100% rename from showcase/src/example/core/core_3d_camera_free.rs rename to examples/src/example/core/core_3d_camera_free.rs diff --git a/showcase/src/example/core/core_3d_camera_mode.rs b/examples/src/example/core/core_3d_camera_mode.rs similarity index 100% rename from showcase/src/example/core/core_3d_camera_mode.rs rename to examples/src/example/core/core_3d_camera_mode.rs diff --git a/showcase/src/example/core/core_3d_picking.rs b/examples/src/example/core/core_3d_picking.rs similarity index 98% rename from showcase/src/example/core/core_3d_picking.rs rename to examples/src/example/core/core_3d_picking.rs index 50bc8fb9..c97e9565 100644 --- a/showcase/src/example/core/core_3d_picking.rs +++ b/examples/src/example/core/core_3d_picking.rs @@ -49,7 +49,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { //---------------------------------------------------------------------------------- rl.update_camera(&mut camera); // Update camera - if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { if !collision { @@ -57,7 +57,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { // Check collision between ray and box collision = BoundingBox::new(rvec3(cube_position.x - cube_size.x / 2.0, cube_position.y - cube_size.y / 2.0, cube_position.z - cube_size.z / 2.0), - rvec3(cube_position.x + cube_size.x / 2.0, cube_position.y + cube_size.y / 2.0, cube_position.z + cube_size.z / 2.0)).check_collision_ray_box(ray); + rvec3(cube_position.x + cube_size.x / 2.0, cube_position.y + cube_size.y / 2.0, cube_position.z + cube_size.z / 2.0)).get_ray_collision_box(ray).hit; } else { collision = false; diff --git a/showcase/src/example/core/core_basic_window.rs b/examples/src/example/core/core_basic_window.rs similarity index 100% rename from showcase/src/example/core/core_basic_window.rs rename to examples/src/example/core/core_basic_window.rs diff --git a/showcase/src/example/core/core_custom_logging.png b/examples/src/example/core/core_custom_logging.png similarity index 100% rename from showcase/src/example/core/core_custom_logging.png rename to examples/src/example/core/core_custom_logging.png diff --git a/showcase/src/example/core/core_custom_logging.rs b/examples/src/example/core/core_custom_logging.rs similarity index 100% rename from showcase/src/example/core/core_custom_logging.rs rename to examples/src/example/core/core_custom_logging.rs diff --git a/showcase/src/example/core/core_drop_files.rs b/examples/src/example/core/core_drop_files.rs similarity index 100% rename from showcase/src/example/core/core_drop_files.rs rename to examples/src/example/core/core_drop_files.rs diff --git a/showcase/src/example/core/core_input_gamepad.rs b/examples/src/example/core/core_input_gamepad.rs similarity index 99% rename from showcase/src/example/core/core_input_gamepad.rs rename to examples/src/example/core/core_input_gamepad.rs index 3653d8ef..f7b331a8 100644 --- a/showcase/src/example/core/core_input_gamepad.rs +++ b/examples/src/example/core/core_input_gamepad.rs @@ -64,7 +64,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { { d.draw_text(&format!("GP1: {}", d.get_gamepad_name(0).unwrap()), 10, 10, 10, Color::BLACK); - if d.is_gamepad_name(0, XBOX360_NAME_ID) + if d.get_gamepad_name(0).unwrap() == XBOX360_NAME_ID { d.draw_texture(&tex_xbox_pad, 0, 0, Color::DARKGRAY); @@ -164,7 +164,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { //d.draw_text(format!("Xbox axis LT: %02.02f", d.get_gamepad_axis_movement(0, raylib::consts::GamepadAxis::GAMEPAD_AXIS_LEFT_TRIGGER)), 10, 40, 10, Color::BLACK); //d.draw_text(format!("Xbox axis RT: %02.02f", d.get_gamepad_axis_movement(0, raylib::consts::GamepadAxis::GAMEPAD_AXIS_RIGHT_TRIGGER)), 10, 60, 10, Color::BLACK); } - else if d.is_gamepad_name(0, PS3_NAME_ID) + else if d.get_gamepad_name(0).unwrap() == PS3_NAME_ID { d.draw_texture(&tex_ps3_pad, 0, 0, Color::DARKGRAY); diff --git a/showcase/src/example/core/core_input_gestures.rs b/examples/src/example/core/core_input_gestures.rs similarity index 96% rename from showcase/src/example/core/core_input_gestures.rs rename to examples/src/example/core/core_input_gestures.rs index 046944d9..8a1aa5b1 100644 --- a/showcase/src/example/core/core_input_gestures.rs +++ b/examples/src/example/core/core_input_gestures.rs @@ -14,7 +14,7 @@ use raylib::prelude::*; const MAX_GESTURE_STRINGS: usize = 20; pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { - use raylib::consts::Gestures::*; + use raylib::consts::Gesture::*; // Initialization //-------------------------------------------------------------------------------------- let screen_width = 800; @@ -27,7 +27,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { let touch_area = rrect(220, 10, screen_width - 230, screen_height - 20); let mut gestures_count = 0; - let mut gesture_strings = [raylib::consts::Gestures::GESTURE_NONE; MAX_GESTURE_STRINGS]; + let mut gesture_strings = [raylib::consts::Gesture::GESTURE_NONE; MAX_GESTURE_STRINGS]; let mut current_gesture = GESTURE_NONE; let mut last_gesture = GESTURE_NONE; diff --git a/showcase/src/example/core/core_input_keys.rs b/examples/src/example/core/core_input_keys.rs similarity index 100% rename from showcase/src/example/core/core_input_keys.rs rename to examples/src/example/core/core_input_keys.rs diff --git a/showcase/src/example/core/core_input_mouse.png b/examples/src/example/core/core_input_mouse.png similarity index 100% rename from showcase/src/example/core/core_input_mouse.png rename to examples/src/example/core/core_input_mouse.png diff --git a/showcase/src/example/core/core_input_mouse.rs b/examples/src/example/core/core_input_mouse.rs similarity index 96% rename from showcase/src/example/core/core_input_mouse.rs rename to examples/src/example/core/core_input_mouse.rs index 861e8507..dc066036 100644 --- a/showcase/src/example/core/core_input_mouse.rs +++ b/examples/src/example/core/core_input_mouse.rs @@ -34,17 +34,17 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { //---------------------------------------------------------------------------------- ballPosition = rl.get_mouse_position(); - if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { ballColor = Color::MAROON; } - else if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_MIDDLE_BUTTON) + else if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_MIDDLE) { ballColor = Color::LIME; } - else if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_RIGHT_BUTTON) + else if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_RIGHT) { ballColor = Color::DARKBLUE; diff --git a/showcase/src/example/core/core_input_mouse_wheel.rs b/examples/src/example/core/core_input_mouse_wheel.rs similarity index 100% rename from showcase/src/example/core/core_input_mouse_wheel.rs rename to examples/src/example/core/core_input_mouse_wheel.rs diff --git a/showcase/src/example/core/core_input_multitouch.rs b/examples/src/example/core/core_input_multitouch.rs similarity index 96% rename from showcase/src/example/core/core_input_multitouch.rs rename to examples/src/example/core/core_input_multitouch.rs index 337e892a..67c34063 100644 --- a/showcase/src/example/core/core_input_multitouch.rs +++ b/examples/src/example/core/core_input_multitouch.rs @@ -43,33 +43,33 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { ball_color = Color::BEIGE; - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { ball_color = Color::MAROON; } - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_MIDDLE_BUTTON) + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_MIDDLE) { ball_color = Color::LIME; } - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_RIGHT_BUTTON) + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_RIGHT) { ball_color = Color::DARKBLUE; } - if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { touch_counter = 10; } - if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_MIDDLE_BUTTON) + if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_MIDDLE) { touch_counter = 10; } - if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_RIGHT_BUTTON) + if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_RIGHT) { touch_counter = 10; diff --git a/showcase/src/example/core/core_random_values.png b/examples/src/example/core/core_random_values.png similarity index 100% rename from showcase/src/example/core/core_random_values.png rename to examples/src/example/core/core_random_values.png diff --git a/showcase/src/example/core/core_random_values.rs b/examples/src/example/core/core_random_values.rs similarity index 91% rename from showcase/src/example/core/core_random_values.rs rename to examples/src/example/core/core_random_values.rs index 45eddfdf..07ee191d 100644 --- a/showcase/src/example/core/core_random_values.rs +++ b/examples/src/example/core/core_random_values.rs @@ -22,7 +22,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { let mut framesCounter = 0; // Variable used to count frames - let mut randValue: i32 = raylib::get_random_value::(-8, 5); // Get a random integer number between -8 and 5 (both included) + let mut randValue: i32 = rl.get_random_value::(-8, 5); // Get a random integer number between -8 and 5 (both included) rl.set_target_fps(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -38,7 +38,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { // Every two seconds (120 frames) a new random value is generated if ((framesCounter / 120) % 2) == 1 { - randValue = raylib::get_random_value::(-8, 5); + randValue = rl.get_random_value::(-8, 5); framesCounter = 0; } //---------------------------------------------------------------------------------- diff --git a/showcase/src/example/core/core_scissor_test.rs b/examples/src/example/core/core_scissor_test.rs similarity index 98% rename from showcase/src/example/core/core_scissor_test.rs rename to examples/src/example/core/core_scissor_test.rs index cc2acacb..102f4d3e 100644 --- a/showcase/src/example/core/core_scissor_test.rs +++ b/examples/src/example/core/core_scissor_test.rs @@ -88,7 +88,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { ); } - d.draw_rectangle_lines_ex(scissor_area, 1, Color::BLACK); + d.draw_rectangle_lines_ex(scissor_area, 1.0, Color::BLACK); d.draw_text("Press S to toggle scissor test", 10, 10, 20, Color::BLACK); //---------------------------------------------------------------------------------- diff --git a/showcase/src/example/core/core_vr_simulator.rs b/examples/src/example/core/core_vr_simulator.rs similarity index 100% rename from showcase/src/example/core/core_vr_simulator.rs rename to examples/src/example/core/core_vr_simulator.rs diff --git a/showcase/src/example/core/core_window_letterbox.rs b/examples/src/example/core/core_window_letterbox.rs similarity index 92% rename from showcase/src/example/core/core_window_letterbox.rs rename to examples/src/example/core/core_window_letterbox.rs index 02a990e5..8c0fe88f 100644 --- a/showcase/src/example/core/core_window_letterbox.rs +++ b/examples/src/example/core/core_window_letterbox.rs @@ -48,7 +48,7 @@ pub fn run(rl let mut colors = [Color::default(); 10]; for i in 0..10 { - colors[i] = Color::new(raylib::get_random_value::(100, 250) as u8, raylib::get_random_value::(50, 150) as u8, raylib::get_random_value::(10, 100) as u8, 255); + colors[i] = Color::new(rl.get_random_value::(100, 250) as u8, rl.get_random_value::(50, 150) as u8, rl.get_random_value::(10, 100) as u8, 255); } @@ -69,7 +69,7 @@ pub fn run(rl for i in 0..10 { - colors[i] = Color::new(raylib::get_random_value::(100, 250) as u8, raylib::get_random_value::(50, 150) as u8, raylib::get_random_value::(10, 100) as u8, 255); + colors[i] = Color::new(rl.get_random_value::(100, 250) as u8, rl.get_random_value::(50, 150) as u8, rl.get_random_value::(10, 100) as u8, 255); } } diff --git a/showcase/src/example/core/core_world_screen.rs b/examples/src/example/core/core_world_screen.rs similarity index 100% rename from showcase/src/example/core/core_world_screen.rs rename to examples/src/example/core/core_world_screen.rs diff --git a/showcase/src/example/core/mod.rs b/examples/src/example/core/mod.rs similarity index 100% rename from showcase/src/example/core/mod.rs rename to examples/src/example/core/mod.rs diff --git a/showcase/src/example/image_exporter/image_exporter.rs b/examples/src/example/image_exporter/image_exporter.rs similarity index 97% rename from showcase/src/example/image_exporter/image_exporter.rs rename to examples/src/example/image_exporter/image_exporter.rs index 0a5dca45..cac0c6e5 100644 --- a/showcase/src/example/image_exporter/image_exporter.rs +++ b/examples/src/example/image_exporter/image_exporter.rs @@ -179,8 +179,8 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { { d.draw_texture_ex(&texture, rvec2(screen_width / 2 - (texture.width() as f32 * imageScale / 2.0) as i32, screen_height / 2 - (texture.height() as f32 * imageScale / 2.0) as i32), 0.0, imageScale, Color::WHITE); - d.draw_rectangle_lines_ex(imageRec, 1, if imageRec.check_collision_point_rec(d.get_mouse_position()) {Color::RED } else { Color::DARKGRAY}); - d.draw_text(&format!("SCALE: {:.2}", imageScale * 100.0), 20, screen_height - 40, 20, Color::get_color(d.gui_get_style(raylib::consts::GuiControl::DEFAULT, raylib::consts::GuiDefaultProperty::LINE_COLOR as i32))); + d.draw_rectangle_lines_ex(imageRec, 1.0, if imageRec.check_collision_point_rec(d.get_mouse_position()) {Color::RED } else { Color::DARKGRAY}); + d.draw_text(&format!("SCALE: {:.2}", imageScale * 100.0), 20, screen_height - 40, 20, Color::get_color(d.gui_get_style(raylib::consts::GuiControl::DEFAULT, raylib::consts::GuiDefaultProperty::LINE_COLOR as i32) as u32)); } else { @@ -199,7 +199,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { //----------------------------------------------------------------------------- if windowBoxActive { - d.draw_rectangle(0, 0, screen_width, screen_height, Color::get_color(d.gui_get_style(raylib::consts::GuiControl::DEFAULT, raylib::consts::GuiDefaultProperty::BACKGROUND_COLOR as i32)).fade( 0.7)); + d.draw_rectangle(0, 0, screen_width, screen_height, Color::get_color(d.gui_get_style(raylib::consts::GuiControl::DEFAULT, raylib::consts::GuiDefaultProperty::BACKGROUND_COLOR as i32) as u32).fade( 0.7)); windowBoxActive = !d.gui_window_box(rrect(windowBoxRec.x, windowBoxRec.y, 220, 190), Some(rstr!("Image Export Options"))); d.gui_label(rrect(windowBoxRec.x + 10.0, windowBoxRec.y + 35.0, 60, 25), Some(rstr!("File format:"))); diff --git a/showcase/src/example/image_exporter/mod.rs b/examples/src/example/image_exporter/mod.rs similarity index 100% rename from showcase/src/example/image_exporter/mod.rs rename to examples/src/example/image_exporter/mod.rs diff --git a/showcase/src/example/image_exporter/resources/cat.png b/examples/src/example/image_exporter/resources/cat.png similarity index 100% rename from showcase/src/example/image_exporter/resources/cat.png rename to examples/src/example/image_exporter/resources/cat.png diff --git a/showcase/src/example/image_exporter/resources/fudesumi.png b/examples/src/example/image_exporter/resources/fudesumi.png similarity index 100% rename from showcase/src/example/image_exporter/resources/fudesumi.png rename to examples/src/example/image_exporter/resources/fudesumi.png diff --git a/showcase/src/example/image_exporter/resources/parrots.png b/examples/src/example/image_exporter/resources/parrots.png similarity index 100% rename from showcase/src/example/image_exporter/resources/parrots.png rename to examples/src/example/image_exporter/resources/parrots.png diff --git a/showcase/src/example/image_exporter/resources/scarfy.png b/examples/src/example/image_exporter/resources/scarfy.png similarity index 100% rename from showcase/src/example/image_exporter/resources/scarfy.png rename to examples/src/example/image_exporter/resources/scarfy.png diff --git a/showcase/src/example/image_raw_importer/design/raw_importer_REF.png b/examples/src/example/image_raw_importer/design/raw_importer_REF.png similarity index 100% rename from showcase/src/example/image_raw_importer/design/raw_importer_REF.png rename to examples/src/example/image_raw_importer/design/raw_importer_REF.png diff --git a/showcase/src/example/image_raw_importer/design/raw_importer_REV0.png b/examples/src/example/image_raw_importer/design/raw_importer_REV0.png similarity index 100% rename from showcase/src/example/image_raw_importer/design/raw_importer_REV0.png rename to examples/src/example/image_raw_importer/design/raw_importer_REV0.png diff --git a/showcase/src/example/image_raw_importer/design/raw_importer_REV1.png b/examples/src/example/image_raw_importer/design/raw_importer_REV1.png similarity index 100% rename from showcase/src/example/image_raw_importer/design/raw_importer_REV1.png rename to examples/src/example/image_raw_importer/design/raw_importer_REV1.png diff --git a/showcase/src/example/image_raw_importer/design/raw_importer_REV2.png b/examples/src/example/image_raw_importer/design/raw_importer_REV2.png similarity index 100% rename from showcase/src/example/image_raw_importer/design/raw_importer_REV2.png rename to examples/src/example/image_raw_importer/design/raw_importer_REV2.png diff --git a/showcase/src/example/image_raw_importer/design/raw_importer_REV3.png b/examples/src/example/image_raw_importer/design/raw_importer_REV3.png similarity index 100% rename from showcase/src/example/image_raw_importer/design/raw_importer_REV3.png rename to examples/src/example/image_raw_importer/design/raw_importer_REV3.png diff --git a/showcase/src/example/image_raw_importer/design/raw_importer_REV4.png b/examples/src/example/image_raw_importer/design/raw_importer_REV4.png similarity index 100% rename from showcase/src/example/image_raw_importer/design/raw_importer_REV4.png rename to examples/src/example/image_raw_importer/design/raw_importer_REV4.png diff --git a/showcase/src/example/image_raw_importer/design/raw_importer_REV5.png b/examples/src/example/image_raw_importer/design/raw_importer_REV5.png similarity index 100% rename from showcase/src/example/image_raw_importer/design/raw_importer_REV5.png rename to examples/src/example/image_raw_importer/design/raw_importer_REV5.png diff --git a/showcase/src/example/image_raw_importer/image_2x2_RGBA.raw b/examples/src/example/image_raw_importer/image_2x2_RGBA.raw similarity index 100% rename from showcase/src/example/image_raw_importer/image_2x2_RGBA.raw rename to examples/src/example/image_raw_importer/image_2x2_RGBA.raw diff --git a/showcase/src/example/image_raw_importer/image_raw_importer.c b/examples/src/example/image_raw_importer/image_raw_importer.c similarity index 100% rename from showcase/src/example/image_raw_importer/image_raw_importer.c rename to examples/src/example/image_raw_importer/image_raw_importer.c diff --git a/showcase/src/example/mod.rs b/examples/src/example/mod.rs similarity index 100% rename from showcase/src/example/mod.rs rename to examples/src/example/mod.rs diff --git a/showcase/src/example/models/mod.rs b/examples/src/example/models/mod.rs similarity index 94% rename from showcase/src/example/models/mod.rs rename to examples/src/example/models/mod.rs index 099dd230..cf0d45f4 100644 --- a/showcase/src/example/models/mod.rs +++ b/examples/src/example/models/mod.rs @@ -10,7 +10,6 @@ pub mod models_loading; pub mod models_mesh_generation; pub mod models_mesh_picking; pub mod models_orthographic_projection; -#[cfg(target_os = "windows")] pub mod models_rlgl_solar_system; // pub mod models_skybox; pub mod models_waving_cubes; diff --git a/showcase/src/example/models/models_animation.rs b/examples/src/example/models/models_animation.rs similarity index 100% rename from showcase/src/example/models/models_animation.rs rename to examples/src/example/models/models_animation.rs diff --git a/showcase/src/example/models/models_billboard.rs b/examples/src/example/models/models_billboard.rs similarity index 100% rename from showcase/src/example/models/models_billboard.rs rename to examples/src/example/models/models_billboard.rs diff --git a/showcase/src/example/models/models_box_collisions.rs b/examples/src/example/models/models_box_collisions.rs similarity index 100% rename from showcase/src/example/models/models_box_collisions.rs rename to examples/src/example/models/models_box_collisions.rs diff --git a/showcase/src/example/models/models_cubicmap.rs b/examples/src/example/models/models_cubicmap.rs similarity index 100% rename from showcase/src/example/models/models_cubicmap.rs rename to examples/src/example/models/models_cubicmap.rs diff --git a/showcase/src/example/models/models_first_person_maze.rs b/examples/src/example/models/models_first_person_maze.rs similarity index 100% rename from showcase/src/example/models/models_first_person_maze.rs rename to examples/src/example/models/models_first_person_maze.rs diff --git a/showcase/src/example/models/models_geometric_shapes.rs b/examples/src/example/models/models_geometric_shapes.rs similarity index 100% rename from showcase/src/example/models/models_geometric_shapes.rs rename to examples/src/example/models/models_geometric_shapes.rs diff --git a/showcase/src/example/models/models_heightmap.rs b/examples/src/example/models/models_heightmap.rs similarity index 100% rename from showcase/src/example/models/models_heightmap.rs rename to examples/src/example/models/models_heightmap.rs diff --git a/showcase/src/example/models/models_loading.rs b/examples/src/example/models/models_loading.rs similarity index 95% rename from showcase/src/example/models/models_loading.rs rename to examples/src/example/models/models_loading.rs index d78f5819..3b9e3006 100644 --- a/showcase/src/example/models/models_loading.rs +++ b/examples/src/example/models/models_loading.rs @@ -45,7 +45,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut let position = rvec3( 0.0, 0.0, 0.0 ); // Set model position - let mut bounds = model.meshes()[0].mesh_bounding_box(); // Set model bounds + let mut bounds = model.meshes()[0].get_mesh_bounding_box(); // Set model bounds // NOTE: bounds are calculated from the original size of the model, // if model is scaled on drawing, bounds must be also scaled @@ -81,7 +81,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut model = rl.load_model(thread, &droppedFiles[0]).unwrap(); // Load new model model.materials_mut()[0].maps_mut()[raylib::consts::MaterialMapIndex::MATERIAL_MAP_ALBEDO as usize].texture = *texture.as_ref(); // Set current map diffuse texture - bounds = model.meshes()[0].mesh_bounding_box(); + bounds = model.meshes()[0].get_mesh_bounding_box(); // TODO: Move camera position from target enough distance to visualize model properly } @@ -97,10 +97,10 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut } // Select model on mouse click - if (rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON)) + if (rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT)) { // Check collision between ray and box - if bounds.check_collision_ray_box(rl.get_mouse_ray(rl.get_mouse_position(), &camera)){ selected = !selected;} + if bounds.get_ray_collision_box(rl.get_mouse_ray(rl.get_mouse_position(), &camera)).hit { selected = !selected;} else {selected = false;} } //---------------------------------------------------------------------------------- diff --git a/showcase/src/example/models/models_material_pbr.rs b/examples/src/example/models/models_material_pbr.rs similarity index 100% rename from showcase/src/example/models/models_material_pbr.rs rename to examples/src/example/models/models_material_pbr.rs diff --git a/showcase/src/example/models/models_mesh_generation.rs b/examples/src/example/models/models_mesh_generation.rs similarity index 99% rename from showcase/src/example/models/models_mesh_generation.rs rename to examples/src/example/models/models_mesh_generation.rs index 5aa63425..be805b45 100644 --- a/showcase/src/example/models/models_mesh_generation.rs +++ b/examples/src/example/models/models_mesh_generation.rs @@ -67,7 +67,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut //---------------------------------------------------------------------------------- rl.update_camera(&mut camera); // Update internal camera and our camera - if (rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON)) + if (rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT)) { currentModel = (currentModel + 1)%NUM_MODELS; // Cycle between the textures } diff --git a/showcase/src/example/models/models_mesh_picking.rs b/examples/src/example/models/models_mesh_picking.rs similarity index 82% rename from showcase/src/example/models/models_mesh_picking.rs rename to examples/src/example/models/models_mesh_picking.rs index bcb487e6..dc48e57d 100644 --- a/showcase/src/example/models/models_mesh_picking.rs +++ b/examples/src/example/models/models_mesh_picking.rs @@ -38,10 +38,16 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut tower.materials_mut()[0].maps_mut()[raylib::consts::MaterialMapIndex::MATERIAL_MAP_ALBEDO as usize].texture = *texture.as_ref(); // Set model diffuse texture let towerPos = rvec3( 0.0, 0.0, 0.0 ); // Set model position - let towerBBox = tower.meshes_mut()[0].mesh_bounding_box(); // Get mesh bounding box + let towerBBox = tower.meshes_mut()[0].get_mesh_bounding_box(); // Get mesh bounding box let mut hitMeshBBox = false; let mut hitTriangle = false; + // Ground quad + let g0 = rvec3( -50.0, 0.0, -50.0 ); + let g1 = rvec3( -50.0, 0.0, 50.0 ); + let g2 = rvec3( 50.0, 0.0, 50.0 ); + let g3 = rvec3( 50.0, 0.0, -50.0 ); + // Test triangle let ta = rvec3( -25.0, 0.5,0.0 ); let tb = rvec3( -4.0, 2.5,1.0 ); @@ -62,7 +68,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut rl.update_camera(&mut camera); // Update camera // Display information about closest hit - let mut nearestHit = RayHitInfo::default(); + let mut nearestHit = RayCollision::default(); let mut hitObjectName = "None"; nearestHit.distance = std::f32::MAX; nearestHit.hit = false; @@ -72,7 +78,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut ray = rl.get_mouse_ray(rl.get_mouse_position(), camera); // Check ray collision aginst ground plane - let groundHitInfo = get_collision_ray_ground(ray, 0.0); + let groundHitInfo = get_ray_collision_quad(ray, g0, g1, g2, g3); if ((groundHitInfo.hit) && (groundHitInfo.distance < nearestHit.distance)) { @@ -82,7 +88,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut } // Check ray collision against test triangle - let triHitInfo = get_collision_ray_triangle(ray, ta, tb, tc); + let triHitInfo = get_ray_collision_triangle(ray, ta, tb, tc); if ((triHitInfo.hit) && (triHitInfo.distance < nearestHit.distance)) { @@ -90,21 +96,21 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut cursorColor = Color::PURPLE; hitObjectName = "Triangle"; - bary = nearestHit.position.barycenter( ta, tb, tc); + bary = nearestHit.point.barycenter( ta, tb, tc); hitTriangle = true; } else {hitTriangle = false;} - let mut meshHitInfo = RayHitInfo::default(); + let mut meshHitInfo = RayCollision::default(); // Check ray collision against bounding box first, before trying the full ray-mesh test - if (towerBBox.check_collision_ray_box(ray)) + if (towerBBox.get_ray_collision_box(ray).hit) { hitMeshBBox = true; // Check ray collision against model // NOTE: It considers model.transform matrix! - meshHitInfo = get_collision_ray_model(ray, &tower); + meshHitInfo = get_ray_collision_model(ray, &tower); if ((meshHitInfo.hit) && (meshHitInfo.distance < nearestHit.distance)) { @@ -143,15 +149,15 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut // If we hit something, draw the cursor at the hit point if (nearestHit.hit) { - d.draw_cube(nearestHit.position, 0.3, 0.3, 0.3, cursorColor); - d.draw_cube_wires(nearestHit.position, 0.3, 0.3, 0.3, Color::RED); + d.draw_cube(nearestHit.point, 0.3, 0.3, 0.3, cursorColor); + d.draw_cube_wires(nearestHit.point, 0.3, 0.3, 0.3, Color::RED); let mut normalEnd = Vector3::default(); - normalEnd.x = nearestHit.position.x + nearestHit.normal.x; - normalEnd.y = nearestHit.position.y + nearestHit.normal.y; - normalEnd.z = nearestHit.position.z + nearestHit.normal.z; + normalEnd.x = nearestHit.point.x + nearestHit.normal.x; + normalEnd.y = nearestHit.point.y + nearestHit.normal.y; + normalEnd.z = nearestHit.point.z + nearestHit.normal.z; - d.draw_line_3D(nearestHit.position, normalEnd, Color::RED); + d.draw_line_3D(nearestHit.point, normalEnd, Color::RED); } d.draw_ray(ray, Color::MAROON); @@ -169,10 +175,10 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut d.draw_text(&format!("Distance: {:3.2}", nearestHit.distance), 10, ypos, 10, Color::BLACK); - d.draw_text(&format!("Hit Pos: {:3.2} {:3.2} {:3.2}", - nearestHit.position.x, - nearestHit.position.y, - nearestHit.position.z), 10, ypos + 15, 10, Color::BLACK); + d.draw_text(&format!("Hit Point: {:3.2} {:3.2} {:3.2}", + nearestHit.point.x, + nearestHit.point.y, + nearestHit.point.z), 10, ypos + 15, 10, Color::BLACK); d.draw_text(&format!("Hit Norm: {:3.2} {:3.2} {:3.2}", nearestHit.normal.x, diff --git a/showcase/src/example/models/models_orthographic_projection.rs b/examples/src/example/models/models_orthographic_projection.rs similarity index 100% rename from showcase/src/example/models/models_orthographic_projection.rs rename to examples/src/example/models/models_orthographic_projection.rs diff --git a/showcase/src/example/models/models_rlgl_solar_system.rs b/examples/src/example/models/models_rlgl_solar_system.rs similarity index 82% rename from showcase/src/example/models/models_rlgl_solar_system.rs rename to examples/src/example/models/models_rlgl_solar_system.rs index f2cb3bbc..93acbdd5 100644 --- a/showcase/src/example/models/models_rlgl_solar_system.rs +++ b/examples/src/example/models/models_rlgl_solar_system.rs @@ -75,34 +75,34 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { let mut d = d.begin_mode3D(&camera); - + unsafe { ffi::rlPushMatrix(); ffi::rlScalef(sunRadius, sunRadius, sunRadius); // Scale Sun DrawSphereBasic(Color::GOLD); // Draw the Sun ffi::rlPopMatrix(); - + ffi::rlPushMatrix(); ffi::rlRotatef(earthOrbitRotation, 0.0, 1.0, 0.0); // Rotation for Earth orbit around Sun ffi::rlTranslatef(earthOrbitRadius, 0.0, 0.0); // Translation for Earth orbit ffi::rlRotatef(-earthOrbitRotation, 0.0, 1.0, 0.0); // Rotation for Earth orbit around Sun inverted - + ffi::rlPushMatrix(); ffi::rlRotatef(earthRotation, 0.25, 1.0, 0.0); // Rotation for Earth itself ffi::rlScalef(earthRadius, earthRadius, earthRadius);// Scale Earth - + DrawSphereBasic(Color::BLUE); // Draw the Earth ffi::rlPopMatrix(); - + ffi::rlRotatef(moonOrbitRotation, 0.0, 1.0, 0.0); // Rotation for Moon orbit around Earth ffi::rlTranslatef(moonOrbitRadius, 0.0, 0.0); // Translation for Moon orbit ffi::rlRotatef(-moonOrbitRotation, 0.0, 1.0, 0.0); // Rotation for Moon orbit around Earth inverted ffi::rlRotatef(moonRotation, 0.0, 1.0, 0.0); // Rotation for Moon itself ffi::rlScalef(moonRadius, moonRadius, moonRadius); // Scale Moon - + DrawSphereBasic(Color::LIGHTGRAY); // Draw the Moon ffi::rlPopMatrix(); - + } // Some reference elements (not affected by previous matrix transformations) @@ -129,33 +129,36 @@ fn DrawSphereBasic(color: Color) let slices = 16; unsafe { + ffi::rlCheckRenderBatchLimit((rings + 2) * slices * 6); + ffi::rlBegin(ffi::RL_TRIANGLES as i32); ffi::rlColor4ub(color.r, color.g, color.b, color.a); - + for i in 0..(rings + 2) { for j in 0..slices { - let deg2rad: f32 = 0.017453292519943295; + let deg2rad: f32 = consts::DEG2RAD as f32; + ffi::rlVertex3f((deg2rad*(270+(180/(rings + 1))*i) as f32).cos()*(deg2rad*(j*360/slices) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*i) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*i) as f32).cos()*(deg2rad*((j*360/slices) as f32).cos())); + (deg2rad*(270+(180/(rings + 1))*i) as f32).sin(), + (deg2rad*(270+(180/(rings + 1))*i) as f32).cos()*(deg2rad*(j*360/slices) as f32).cos()); ffi::rlVertex3f((deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).cos()*(deg2rad*((j+1)*360/slices) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).cos()*(deg2rad*((j+1)*360/slices) as f32).cos()); + (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).sin(), + (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).cos()*(deg2rad*((j+1)*360/slices) as f32).cos()); ffi::rlVertex3f((deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).cos()*(deg2rad*(j*360/slices) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).cos()*(deg2rad*((j*360/slices) as f32).cos())); - + (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).sin(), + (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).cos()*(deg2rad*(j*360/slices) as f32).cos()); + ffi::rlVertex3f((deg2rad*(270+(180/(rings + 1))*i) as f32).cos()*(deg2rad*(j*360/slices) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*i) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*i) as f32).cos()*(deg2rad*(j*360/slices) as f32).cos()); + (deg2rad*(270+(180/(rings + 1))*i) as f32).sin(), + (deg2rad*(270+(180/(rings + 1))*i) as f32).cos()*(deg2rad*(j*360/slices) as f32).cos()); ffi::rlVertex3f((deg2rad*(270+(180/(rings + 1))*(i)) as f32).cos()*(deg2rad*((j+1)*360/slices) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*(i)) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*(i)) as f32).cos()*(deg2rad*((j+1)*360/slices) as f32).cos()); + (deg2rad*(270+(180/(rings + 1))*(i)) as f32).sin(), + (deg2rad*(270+(180/(rings + 1))*(i)) as f32).cos()*(deg2rad*((j+1)*360/slices) as f32).cos()); ffi::rlVertex3f((deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).cos()*(deg2rad*((j+1)*360/slices) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).sin(), - (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).cos()*(deg2rad*((j+1)*360/slices) as f32).cos()); + (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).sin(), + (deg2rad*(270+(180/(rings + 1))*(i+1)) as f32).cos()*(deg2rad*((j+1)*360/slices) as f32).cos()); } } ffi::rlEnd(); diff --git a/showcase/src/example/models/models_skybox.rs b/examples/src/example/models/models_skybox.rs similarity index 100% rename from showcase/src/example/models/models_skybox.rs rename to examples/src/example/models/models_skybox.rs diff --git a/showcase/src/example/models/models_waving_cubes.rs b/examples/src/example/models/models_waving_cubes.rs similarity index 100% rename from showcase/src/example/models/models_waving_cubes.rs rename to examples/src/example/models/models_waving_cubes.rs diff --git a/showcase/src/example/models/models_yaw_pitch_roll.rs b/examples/src/example/models/models_yaw_pitch_roll.rs similarity index 100% rename from showcase/src/example/models/models_yaw_pitch_roll.rs rename to examples/src/example/models/models_yaw_pitch_roll.rs diff --git a/examples/src/example/others/mod.rs b/examples/src/example/others/mod.rs new file mode 100644 index 00000000..f8037c90 --- /dev/null +++ b/examples/src/example/others/mod.rs @@ -0,0 +1 @@ +pub mod rlgl_standalone; diff --git a/showcase/src/example/others/rlgl_standalone.rs b/examples/src/example/others/rlgl_standalone.rs similarity index 99% rename from showcase/src/example/others/rlgl_standalone.rs rename to examples/src/example/others/rlgl_standalone.rs index de1f43a9..640d2fdc 100644 --- a/showcase/src/example/others/rlgl_standalone.rs +++ b/examples/src/example/others/rlgl_standalone.rs @@ -106,7 +106,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { ); let mat_view = Matrix::look_at(camera.position, camera.target, camera.up); - ffi::rlSetMatrixProjection(mat_view.into()); // Set internal modelview matrix (default shader) + ffi::rlSetMatrixModelview(mat_view.into()); // Set internal modelview matrix (default shader) ffi::rlSetMatrixProjection(mat_proj.into()); // Set internal projection matrix (default shader) draw_cube(cube_position, 2.0, 2.0, 2.0, Color::RED); diff --git a/showcase/src/example/portable_window/mod.rs b/examples/src/example/portable_window/mod.rs similarity index 100% rename from showcase/src/example/portable_window/mod.rs rename to examples/src/example/portable_window/mod.rs diff --git a/showcase/src/example/portable_window/portable_window.rs b/examples/src/example/portable_window/portable_window.rs similarity index 98% rename from showcase/src/example/portable_window/portable_window.rs rename to examples/src/example/portable_window/portable_window.rs index 3ef5cf9c..348c6c54 100644 --- a/showcase/src/example/portable_window/portable_window.rs +++ b/examples/src/example/portable_window/portable_window.rs @@ -51,7 +51,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { //---------------------------------------------------------------------------------- mousePosition = rl.get_mouse_position(); - if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { if rrect(0, 0, screen_width, 20).check_collision_point_rec(mousePosition ) { @@ -65,7 +65,7 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { windowPosition.x += (mousePosition.x - panOffset.x); windowPosition.y += (mousePosition.y - panOffset.y); - if rl.is_mouse_button_released(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + if rl.is_mouse_button_released(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { dragWindow = false; } diff --git a/showcase/src/example/scroll_panel/gui_scroll_panel.rs b/examples/src/example/scroll_panel/gui_scroll_panel.rs similarity index 100% rename from showcase/src/example/scroll_panel/gui_scroll_panel.rs rename to examples/src/example/scroll_panel/gui_scroll_panel.rs diff --git a/showcase/src/example/scroll_panel/mod.rs b/examples/src/example/scroll_panel/mod.rs similarity index 100% rename from showcase/src/example/scroll_panel/mod.rs rename to examples/src/example/scroll_panel/mod.rs diff --git a/showcase/src/example/shaders/mod.rs b/examples/src/example/shaders/mod.rs similarity index 100% rename from showcase/src/example/shaders/mod.rs rename to examples/src/example/shaders/mod.rs diff --git a/showcase/src/example/shaders/shaders_basic_lighting.rs b/examples/src/example/shaders/shaders_basic_lighting.rs similarity index 100% rename from showcase/src/example/shaders/shaders_basic_lighting.rs rename to examples/src/example/shaders/shaders_basic_lighting.rs diff --git a/showcase/src/example/shaders/shaders_custom_uniform.png b/examples/src/example/shaders/shaders_custom_uniform.png similarity index 100% rename from showcase/src/example/shaders/shaders_custom_uniform.png rename to examples/src/example/shaders/shaders_custom_uniform.png diff --git a/showcase/src/example/shaders/shaders_custom_uniform.rs b/examples/src/example/shaders/shaders_custom_uniform.rs similarity index 100% rename from showcase/src/example/shaders/shaders_custom_uniform.rs rename to examples/src/example/shaders/shaders_custom_uniform.rs diff --git a/showcase/src/example/shaders/shaders_eratosthenes.png b/examples/src/example/shaders/shaders_eratosthenes.png similarity index 100% rename from showcase/src/example/shaders/shaders_eratosthenes.png rename to examples/src/example/shaders/shaders_eratosthenes.png diff --git a/showcase/src/example/shaders/shaders_eratosthenes.rs b/examples/src/example/shaders/shaders_eratosthenes.rs similarity index 100% rename from showcase/src/example/shaders/shaders_eratosthenes.rs rename to examples/src/example/shaders/shaders_eratosthenes.rs diff --git a/showcase/src/example/shaders/shaders_fog.png b/examples/src/example/shaders/shaders_fog.png similarity index 100% rename from showcase/src/example/shaders/shaders_fog.png rename to examples/src/example/shaders/shaders_fog.png diff --git a/showcase/src/example/shaders/shaders_fog.rs b/examples/src/example/shaders/shaders_fog.rs similarity index 100% rename from showcase/src/example/shaders/shaders_fog.rs rename to examples/src/example/shaders/shaders_fog.rs diff --git a/showcase/src/example/shaders/shaders_julia_set.png b/examples/src/example/shaders/shaders_julia_set.png similarity index 100% rename from showcase/src/example/shaders/shaders_julia_set.png rename to examples/src/example/shaders/shaders_julia_set.png diff --git a/showcase/src/example/shaders/shaders_julia_set.rs b/examples/src/example/shaders/shaders_julia_set.rs similarity index 98% rename from showcase/src/example/shaders/shaders_julia_set.rs rename to examples/src/example/shaders/shaders_julia_set.rs index 8406b9c5..4b56e8d0 100644 --- a/showcase/src/example/shaders/shaders_julia_set.rs +++ b/examples/src/example/shaders/shaders_julia_set.rs @@ -136,11 +136,11 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { // TODO: The idea is to zoom and move around with mouse // Probably offset movement should be proportional to zoom level - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) || rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_RIGHT_BUTTON) + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) || rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_RIGHT) { - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { zoom += zoom * 0.003;} - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_RIGHT_BUTTON) + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_RIGHT) { zoom -= zoom * 0.003;} let mousePos = rl.get_mouse_position(); diff --git a/showcase/src/example/shaders/shaders_model_shader.c b/examples/src/example/shaders/shaders_model_shader.c similarity index 100% rename from showcase/src/example/shaders/shaders_model_shader.c rename to examples/src/example/shaders/shaders_model_shader.c diff --git a/showcase/src/example/shaders/shaders_model_shader.png b/examples/src/example/shaders/shaders_model_shader.png similarity index 100% rename from showcase/src/example/shaders/shaders_model_shader.png rename to examples/src/example/shaders/shaders_model_shader.png diff --git a/showcase/src/example/shaders/shaders_palette_switch.c b/examples/src/example/shaders/shaders_palette_switch.c similarity index 100% rename from showcase/src/example/shaders/shaders_palette_switch.c rename to examples/src/example/shaders/shaders_palette_switch.c diff --git a/showcase/src/example/shaders/shaders_palette_switch.png b/examples/src/example/shaders/shaders_palette_switch.png similarity index 100% rename from showcase/src/example/shaders/shaders_palette_switch.png rename to examples/src/example/shaders/shaders_palette_switch.png diff --git a/showcase/src/example/shaders/shaders_postprocessing.c b/examples/src/example/shaders/shaders_postprocessing.c similarity index 100% rename from showcase/src/example/shaders/shaders_postprocessing.c rename to examples/src/example/shaders/shaders_postprocessing.c diff --git a/showcase/src/example/shaders/shaders_postprocessing.png b/examples/src/example/shaders/shaders_postprocessing.png similarity index 100% rename from showcase/src/example/shaders/shaders_postprocessing.png rename to examples/src/example/shaders/shaders_postprocessing.png diff --git a/showcase/src/example/shaders/shaders_postprocessing.rs b/examples/src/example/shaders/shaders_postprocessing.rs similarity index 100% rename from showcase/src/example/shaders/shaders_postprocessing.rs rename to examples/src/example/shaders/shaders_postprocessing.rs diff --git a/showcase/src/example/shaders/shaders_raymarching.c b/examples/src/example/shaders/shaders_raymarching.c similarity index 100% rename from showcase/src/example/shaders/shaders_raymarching.c rename to examples/src/example/shaders/shaders_raymarching.c diff --git a/showcase/src/example/shaders/shaders_raymarching.png b/examples/src/example/shaders/shaders_raymarching.png similarity index 100% rename from showcase/src/example/shaders/shaders_raymarching.png rename to examples/src/example/shaders/shaders_raymarching.png diff --git a/showcase/src/example/shaders/shaders_shapes_textures.c b/examples/src/example/shaders/shaders_shapes_textures.c similarity index 100% rename from showcase/src/example/shaders/shaders_shapes_textures.c rename to examples/src/example/shaders/shaders_shapes_textures.c diff --git a/showcase/src/example/shaders/shaders_shapes_textures.png b/examples/src/example/shaders/shaders_shapes_textures.png similarity index 100% rename from showcase/src/example/shaders/shaders_shapes_textures.png rename to examples/src/example/shaders/shaders_shapes_textures.png diff --git a/showcase/src/example/shaders/shaders_simple_mask.c b/examples/src/example/shaders/shaders_simple_mask.c similarity index 100% rename from showcase/src/example/shaders/shaders_simple_mask.c rename to examples/src/example/shaders/shaders_simple_mask.c diff --git a/showcase/src/example/shaders/shaders_simple_mask.png b/examples/src/example/shaders/shaders_simple_mask.png similarity index 100% rename from showcase/src/example/shaders/shaders_simple_mask.png rename to examples/src/example/shaders/shaders_simple_mask.png diff --git a/showcase/src/example/shaders/shaders_spotlight.c b/examples/src/example/shaders/shaders_spotlight.c similarity index 100% rename from showcase/src/example/shaders/shaders_spotlight.c rename to examples/src/example/shaders/shaders_spotlight.c diff --git a/showcase/src/example/shaders/shaders_spotlight.png b/examples/src/example/shaders/shaders_spotlight.png similarity index 100% rename from showcase/src/example/shaders/shaders_spotlight.png rename to examples/src/example/shaders/shaders_spotlight.png diff --git a/showcase/src/example/shaders/shaders_texture_drawing.c b/examples/src/example/shaders/shaders_texture_drawing.c similarity index 100% rename from showcase/src/example/shaders/shaders_texture_drawing.c rename to examples/src/example/shaders/shaders_texture_drawing.c diff --git a/showcase/src/example/shaders/shaders_texture_drawing.png b/examples/src/example/shaders/shaders_texture_drawing.png similarity index 100% rename from showcase/src/example/shaders/shaders_texture_drawing.png rename to examples/src/example/shaders/shaders_texture_drawing.png diff --git a/showcase/src/example/shaders/shaders_texture_waves.c b/examples/src/example/shaders/shaders_texture_waves.c similarity index 100% rename from showcase/src/example/shaders/shaders_texture_waves.c rename to examples/src/example/shaders/shaders_texture_waves.c diff --git a/showcase/src/example/shaders/shaders_texture_waves.png b/examples/src/example/shaders/shaders_texture_waves.png similarity index 100% rename from showcase/src/example/shaders/shaders_texture_waves.png rename to examples/src/example/shaders/shaders_texture_waves.png diff --git a/showcase/src/example/shapes/easings.h b/examples/src/example/shapes/easings.h similarity index 100% rename from showcase/src/example/shapes/easings.h rename to examples/src/example/shapes/easings.h diff --git a/showcase/src/example/shapes/raygui.h b/examples/src/example/shapes/raygui.h similarity index 100% rename from showcase/src/example/shapes/raygui.h rename to examples/src/example/shapes/raygui.h diff --git a/showcase/src/example/shapes/shapes_basic_shapes.c b/examples/src/example/shapes/shapes_basic_shapes.c similarity index 100% rename from showcase/src/example/shapes/shapes_basic_shapes.c rename to examples/src/example/shapes/shapes_basic_shapes.c diff --git a/showcase/src/example/shapes/shapes_basic_shapes.png b/examples/src/example/shapes/shapes_basic_shapes.png similarity index 100% rename from showcase/src/example/shapes/shapes_basic_shapes.png rename to examples/src/example/shapes/shapes_basic_shapes.png diff --git a/showcase/src/example/shapes/shapes_bouncing_ball.c b/examples/src/example/shapes/shapes_bouncing_ball.c similarity index 100% rename from showcase/src/example/shapes/shapes_bouncing_ball.c rename to examples/src/example/shapes/shapes_bouncing_ball.c diff --git a/showcase/src/example/shapes/shapes_bouncing_ball.png b/examples/src/example/shapes/shapes_bouncing_ball.png similarity index 100% rename from showcase/src/example/shapes/shapes_bouncing_ball.png rename to examples/src/example/shapes/shapes_bouncing_ball.png diff --git a/showcase/src/example/shapes/shapes_collision_area.c b/examples/src/example/shapes/shapes_collision_area.c similarity index 100% rename from showcase/src/example/shapes/shapes_collision_area.c rename to examples/src/example/shapes/shapes_collision_area.c diff --git a/showcase/src/example/shapes/shapes_collision_area.png b/examples/src/example/shapes/shapes_collision_area.png similarity index 100% rename from showcase/src/example/shapes/shapes_collision_area.png rename to examples/src/example/shapes/shapes_collision_area.png diff --git a/showcase/src/example/shapes/shapes_colors_palette.c b/examples/src/example/shapes/shapes_colors_palette.c similarity index 100% rename from showcase/src/example/shapes/shapes_colors_palette.c rename to examples/src/example/shapes/shapes_colors_palette.c diff --git a/showcase/src/example/shapes/shapes_colors_palette.png b/examples/src/example/shapes/shapes_colors_palette.png similarity index 100% rename from showcase/src/example/shapes/shapes_colors_palette.png rename to examples/src/example/shapes/shapes_colors_palette.png diff --git a/showcase/src/example/shapes/shapes_draw_circle_sector.c b/examples/src/example/shapes/shapes_draw_circle_sector.c similarity index 100% rename from showcase/src/example/shapes/shapes_draw_circle_sector.c rename to examples/src/example/shapes/shapes_draw_circle_sector.c diff --git a/showcase/src/example/shapes/shapes_draw_circle_sector.png b/examples/src/example/shapes/shapes_draw_circle_sector.png similarity index 100% rename from showcase/src/example/shapes/shapes_draw_circle_sector.png rename to examples/src/example/shapes/shapes_draw_circle_sector.png diff --git a/showcase/src/example/shapes/shapes_draw_rectangle_rounded.c b/examples/src/example/shapes/shapes_draw_rectangle_rounded.c similarity index 100% rename from showcase/src/example/shapes/shapes_draw_rectangle_rounded.c rename to examples/src/example/shapes/shapes_draw_rectangle_rounded.c diff --git a/showcase/src/example/shapes/shapes_draw_rectangle_rounded.png b/examples/src/example/shapes/shapes_draw_rectangle_rounded.png similarity index 100% rename from showcase/src/example/shapes/shapes_draw_rectangle_rounded.png rename to examples/src/example/shapes/shapes_draw_rectangle_rounded.png diff --git a/showcase/src/example/shapes/shapes_draw_ring.c b/examples/src/example/shapes/shapes_draw_ring.c similarity index 100% rename from showcase/src/example/shapes/shapes_draw_ring.c rename to examples/src/example/shapes/shapes_draw_ring.c diff --git a/showcase/src/example/shapes/shapes_draw_ring.png b/examples/src/example/shapes/shapes_draw_ring.png similarity index 100% rename from showcase/src/example/shapes/shapes_draw_ring.png rename to examples/src/example/shapes/shapes_draw_ring.png diff --git a/showcase/src/example/shapes/shapes_easings_ball_anim.c b/examples/src/example/shapes/shapes_easings_ball_anim.c similarity index 100% rename from showcase/src/example/shapes/shapes_easings_ball_anim.c rename to examples/src/example/shapes/shapes_easings_ball_anim.c diff --git a/showcase/src/example/shapes/shapes_easings_ball_anim.png b/examples/src/example/shapes/shapes_easings_ball_anim.png similarity index 100% rename from showcase/src/example/shapes/shapes_easings_ball_anim.png rename to examples/src/example/shapes/shapes_easings_ball_anim.png diff --git a/showcase/src/example/shapes/shapes_easings_box_anim.c b/examples/src/example/shapes/shapes_easings_box_anim.c similarity index 100% rename from showcase/src/example/shapes/shapes_easings_box_anim.c rename to examples/src/example/shapes/shapes_easings_box_anim.c diff --git a/showcase/src/example/shapes/shapes_easings_box_anim.png b/examples/src/example/shapes/shapes_easings_box_anim.png similarity index 100% rename from showcase/src/example/shapes/shapes_easings_box_anim.png rename to examples/src/example/shapes/shapes_easings_box_anim.png diff --git a/showcase/src/example/shapes/shapes_easings_rectangle_array.c b/examples/src/example/shapes/shapes_easings_rectangle_array.c similarity index 100% rename from showcase/src/example/shapes/shapes_easings_rectangle_array.c rename to examples/src/example/shapes/shapes_easings_rectangle_array.c diff --git a/showcase/src/example/shapes/shapes_easings_rectangle_array.png b/examples/src/example/shapes/shapes_easings_rectangle_array.png similarity index 100% rename from showcase/src/example/shapes/shapes_easings_rectangle_array.png rename to examples/src/example/shapes/shapes_easings_rectangle_array.png diff --git a/showcase/src/example/shapes/shapes_following_eyes.c b/examples/src/example/shapes/shapes_following_eyes.c similarity index 100% rename from showcase/src/example/shapes/shapes_following_eyes.c rename to examples/src/example/shapes/shapes_following_eyes.c diff --git a/showcase/src/example/shapes/shapes_following_eyes.png b/examples/src/example/shapes/shapes_following_eyes.png similarity index 100% rename from showcase/src/example/shapes/shapes_following_eyes.png rename to examples/src/example/shapes/shapes_following_eyes.png diff --git a/showcase/src/example/shapes/shapes_lines_bezier.c b/examples/src/example/shapes/shapes_lines_bezier.c similarity index 100% rename from showcase/src/example/shapes/shapes_lines_bezier.c rename to examples/src/example/shapes/shapes_lines_bezier.c diff --git a/showcase/src/example/shapes/shapes_lines_bezier.png b/examples/src/example/shapes/shapes_lines_bezier.png similarity index 100% rename from showcase/src/example/shapes/shapes_lines_bezier.png rename to examples/src/example/shapes/shapes_lines_bezier.png diff --git a/showcase/src/example/shapes/shapes_logo_raylib.c b/examples/src/example/shapes/shapes_logo_raylib.c similarity index 100% rename from showcase/src/example/shapes/shapes_logo_raylib.c rename to examples/src/example/shapes/shapes_logo_raylib.c diff --git a/showcase/src/example/shapes/shapes_logo_raylib.png b/examples/src/example/shapes/shapes_logo_raylib.png similarity index 100% rename from showcase/src/example/shapes/shapes_logo_raylib.png rename to examples/src/example/shapes/shapes_logo_raylib.png diff --git a/showcase/src/example/shapes/shapes_logo_raylib_anim.c b/examples/src/example/shapes/shapes_logo_raylib_anim.c similarity index 100% rename from showcase/src/example/shapes/shapes_logo_raylib_anim.c rename to examples/src/example/shapes/shapes_logo_raylib_anim.c diff --git a/showcase/src/example/shapes/shapes_logo_raylib_anim.png b/examples/src/example/shapes/shapes_logo_raylib_anim.png similarity index 100% rename from showcase/src/example/shapes/shapes_logo_raylib_anim.png rename to examples/src/example/shapes/shapes_logo_raylib_anim.png diff --git a/showcase/src/example/shapes/shapes_rectangle_scaling.c b/examples/src/example/shapes/shapes_rectangle_scaling.c similarity index 100% rename from showcase/src/example/shapes/shapes_rectangle_scaling.c rename to examples/src/example/shapes/shapes_rectangle_scaling.c diff --git a/showcase/src/example/shapes/shapes_rectangle_scaling.png b/examples/src/example/shapes/shapes_rectangle_scaling.png similarity index 100% rename from showcase/src/example/shapes/shapes_rectangle_scaling.png rename to examples/src/example/shapes/shapes_rectangle_scaling.png diff --git a/showcase/src/example/text/resources/AnonymousPro-Bold.ttf b/examples/src/example/text/resources/AnonymousPro-Bold.ttf similarity index 100% rename from showcase/src/example/text/resources/AnonymousPro-Bold.ttf rename to examples/src/example/text/resources/AnonymousPro-Bold.ttf diff --git a/showcase/src/example/text/resources/KAISG.ttf b/examples/src/example/text/resources/KAISG.ttf similarity index 100% rename from showcase/src/example/text/resources/KAISG.ttf rename to examples/src/example/text/resources/KAISG.ttf diff --git a/showcase/src/example/text/resources/LICENSE b/examples/src/example/text/resources/LICENSE similarity index 100% rename from showcase/src/example/text/resources/LICENSE rename to examples/src/example/text/resources/LICENSE diff --git a/showcase/src/example/text/resources/bmfont.fnt b/examples/src/example/text/resources/bmfont.fnt similarity index 100% rename from showcase/src/example/text/resources/bmfont.fnt rename to examples/src/example/text/resources/bmfont.fnt diff --git a/showcase/src/example/text/resources/bmfont.png b/examples/src/example/text/resources/bmfont.png similarity index 100% rename from showcase/src/example/text/resources/bmfont.png rename to examples/src/example/text/resources/bmfont.png diff --git a/showcase/src/example/text/resources/custom_alagard.png b/examples/src/example/text/resources/custom_alagard.png similarity index 100% rename from showcase/src/example/text/resources/custom_alagard.png rename to examples/src/example/text/resources/custom_alagard.png diff --git a/showcase/src/example/text/resources/custom_jupiter_crash.png b/examples/src/example/text/resources/custom_jupiter_crash.png similarity index 100% rename from showcase/src/example/text/resources/custom_jupiter_crash.png rename to examples/src/example/text/resources/custom_jupiter_crash.png diff --git a/showcase/src/example/text/resources/custom_mecha.png b/examples/src/example/text/resources/custom_mecha.png similarity index 100% rename from showcase/src/example/text/resources/custom_mecha.png rename to examples/src/example/text/resources/custom_mecha.png diff --git a/showcase/src/example/text/resources/dejavu.fnt b/examples/src/example/text/resources/dejavu.fnt similarity index 100% rename from showcase/src/example/text/resources/dejavu.fnt rename to examples/src/example/text/resources/dejavu.fnt diff --git a/showcase/src/example/text/resources/dejavu.png b/examples/src/example/text/resources/dejavu.png similarity index 100% rename from showcase/src/example/text/resources/dejavu.png rename to examples/src/example/text/resources/dejavu.png diff --git a/showcase/src/example/text/resources/emoji.fnt b/examples/src/example/text/resources/emoji.fnt similarity index 100% rename from showcase/src/example/text/resources/emoji.fnt rename to examples/src/example/text/resources/emoji.fnt diff --git a/showcase/src/example/text/resources/emoji.png b/examples/src/example/text/resources/emoji.png similarity index 100% rename from showcase/src/example/text/resources/emoji.png rename to examples/src/example/text/resources/emoji.png diff --git a/showcase/original/text/resources/fonts/alagard.png b/examples/src/example/text/resources/fonts/alagard.png similarity index 100% rename from showcase/original/text/resources/fonts/alagard.png rename to examples/src/example/text/resources/fonts/alagard.png diff --git a/showcase/src/example/text/resources/fonts/alpha_beta.png b/examples/src/example/text/resources/fonts/alpha_beta.png similarity index 100% rename from showcase/src/example/text/resources/fonts/alpha_beta.png rename to examples/src/example/text/resources/fonts/alpha_beta.png diff --git a/showcase/src/example/text/resources/fonts/jupiter_crash.png b/examples/src/example/text/resources/fonts/jupiter_crash.png similarity index 100% rename from showcase/src/example/text/resources/fonts/jupiter_crash.png rename to examples/src/example/text/resources/fonts/jupiter_crash.png diff --git a/showcase/src/example/text/resources/fonts/mecha.png b/examples/src/example/text/resources/fonts/mecha.png similarity index 100% rename from showcase/src/example/text/resources/fonts/mecha.png rename to examples/src/example/text/resources/fonts/mecha.png diff --git a/showcase/src/example/text/resources/fonts/pixantiqua.png b/examples/src/example/text/resources/fonts/pixantiqua.png similarity index 100% rename from showcase/src/example/text/resources/fonts/pixantiqua.png rename to examples/src/example/text/resources/fonts/pixantiqua.png diff --git a/showcase/src/example/text/resources/fonts/pixelplay.png b/examples/src/example/text/resources/fonts/pixelplay.png similarity index 100% rename from showcase/src/example/text/resources/fonts/pixelplay.png rename to examples/src/example/text/resources/fonts/pixelplay.png diff --git a/showcase/src/example/text/resources/fonts/romulus.png b/examples/src/example/text/resources/fonts/romulus.png similarity index 100% rename from showcase/src/example/text/resources/fonts/romulus.png rename to examples/src/example/text/resources/fonts/romulus.png diff --git a/showcase/src/example/text/resources/fonts/setback.png b/examples/src/example/text/resources/fonts/setback.png similarity index 100% rename from showcase/src/example/text/resources/fonts/setback.png rename to examples/src/example/text/resources/fonts/setback.png diff --git a/showcase/src/example/text/resources/notoCJK.fnt b/examples/src/example/text/resources/notoCJK.fnt similarity index 100% rename from showcase/src/example/text/resources/notoCJK.fnt rename to examples/src/example/text/resources/notoCJK.fnt diff --git a/showcase/src/example/text/resources/notoCJK.png b/examples/src/example/text/resources/notoCJK.png similarity index 100% rename from showcase/src/example/text/resources/notoCJK.png rename to examples/src/example/text/resources/notoCJK.png diff --git a/showcase/src/example/text/resources/pixantiqua.fnt b/examples/src/example/text/resources/pixantiqua.fnt similarity index 100% rename from showcase/src/example/text/resources/pixantiqua.fnt rename to examples/src/example/text/resources/pixantiqua.fnt diff --git a/showcase/src/example/text/resources/pixantiqua.png b/examples/src/example/text/resources/pixantiqua.png similarity index 100% rename from showcase/src/example/text/resources/pixantiqua.png rename to examples/src/example/text/resources/pixantiqua.png diff --git a/showcase/src/example/text/resources/pixantiqua.ttf b/examples/src/example/text/resources/pixantiqua.ttf similarity index 100% rename from showcase/src/example/text/resources/pixantiqua.ttf rename to examples/src/example/text/resources/pixantiqua.ttf diff --git a/showcase/src/example/text/resources/shaders/glsl100/sdf.fs b/examples/src/example/text/resources/shaders/glsl100/sdf.fs similarity index 100% rename from showcase/src/example/text/resources/shaders/glsl100/sdf.fs rename to examples/src/example/text/resources/shaders/glsl100/sdf.fs diff --git a/showcase/src/example/text/resources/shaders/glsl330/sdf.fs b/examples/src/example/text/resources/shaders/glsl330/sdf.fs similarity index 100% rename from showcase/src/example/text/resources/shaders/glsl330/sdf.fs rename to examples/src/example/text/resources/shaders/glsl330/sdf.fs diff --git a/showcase/src/example/text/text_font_filters.c b/examples/src/example/text/text_font_filters.c similarity index 100% rename from showcase/src/example/text/text_font_filters.c rename to examples/src/example/text/text_font_filters.c diff --git a/showcase/src/example/text/text_font_filters.png b/examples/src/example/text/text_font_filters.png similarity index 100% rename from showcase/src/example/text/text_font_filters.png rename to examples/src/example/text/text_font_filters.png diff --git a/showcase/src/example/text/text_font_loading.c b/examples/src/example/text/text_font_loading.c similarity index 100% rename from showcase/src/example/text/text_font_loading.c rename to examples/src/example/text/text_font_loading.c diff --git a/showcase/src/example/text/text_font_loading.png b/examples/src/example/text/text_font_loading.png similarity index 100% rename from showcase/src/example/text/text_font_loading.png rename to examples/src/example/text/text_font_loading.png diff --git a/showcase/src/example/text/text_font_sdf.c b/examples/src/example/text/text_font_sdf.c similarity index 100% rename from showcase/src/example/text/text_font_sdf.c rename to examples/src/example/text/text_font_sdf.c diff --git a/showcase/src/example/text/text_font_sdf.png b/examples/src/example/text/text_font_sdf.png similarity index 100% rename from showcase/src/example/text/text_font_sdf.png rename to examples/src/example/text/text_font_sdf.png diff --git a/showcase/src/example/text/text_font_spritefont.c b/examples/src/example/text/text_font_spritefont.c similarity index 100% rename from showcase/src/example/text/text_font_spritefont.c rename to examples/src/example/text/text_font_spritefont.c diff --git a/showcase/src/example/text/text_font_spritefont.png b/examples/src/example/text/text_font_spritefont.png similarity index 100% rename from showcase/src/example/text/text_font_spritefont.png rename to examples/src/example/text/text_font_spritefont.png diff --git a/showcase/src/example/text/text_format_text.c b/examples/src/example/text/text_format_text.c similarity index 100% rename from showcase/src/example/text/text_format_text.c rename to examples/src/example/text/text_format_text.c diff --git a/showcase/src/example/text/text_format_text.png b/examples/src/example/text/text_format_text.png similarity index 100% rename from showcase/src/example/text/text_format_text.png rename to examples/src/example/text/text_format_text.png diff --git a/showcase/src/example/text/text_input_box.c b/examples/src/example/text/text_input_box.c similarity index 100% rename from showcase/src/example/text/text_input_box.c rename to examples/src/example/text/text_input_box.c diff --git a/showcase/src/example/text/text_input_box.png b/examples/src/example/text/text_input_box.png similarity index 100% rename from showcase/src/example/text/text_input_box.png rename to examples/src/example/text/text_input_box.png diff --git a/showcase/src/example/text/text_raylib_fonts.c b/examples/src/example/text/text_raylib_fonts.c similarity index 100% rename from showcase/src/example/text/text_raylib_fonts.c rename to examples/src/example/text/text_raylib_fonts.c diff --git a/showcase/src/example/text/text_raylib_fonts.png b/examples/src/example/text/text_raylib_fonts.png similarity index 100% rename from showcase/src/example/text/text_raylib_fonts.png rename to examples/src/example/text/text_raylib_fonts.png diff --git a/showcase/src/example/text/text_rectangle_bounds.c b/examples/src/example/text/text_rectangle_bounds.c similarity index 100% rename from showcase/src/example/text/text_rectangle_bounds.c rename to examples/src/example/text/text_rectangle_bounds.c diff --git a/showcase/src/example/text/text_rectangle_bounds.png b/examples/src/example/text/text_rectangle_bounds.png similarity index 100% rename from showcase/src/example/text/text_rectangle_bounds.png rename to examples/src/example/text/text_rectangle_bounds.png diff --git a/showcase/src/example/text/text_unicode.c b/examples/src/example/text/text_unicode.c similarity index 100% rename from showcase/src/example/text/text_unicode.c rename to examples/src/example/text/text_unicode.c diff --git a/showcase/src/example/text/text_unicode.png b/examples/src/example/text/text_unicode.png similarity index 100% rename from showcase/src/example/text/text_unicode.png rename to examples/src/example/text/text_unicode.png diff --git a/showcase/src/example/text/text_writing_anim.c b/examples/src/example/text/text_writing_anim.c similarity index 100% rename from showcase/src/example/text/text_writing_anim.c rename to examples/src/example/text/text_writing_anim.c diff --git a/showcase/src/example/text/text_writing_anim.png b/examples/src/example/text/text_writing_anim.png similarity index 100% rename from showcase/src/example/text/text_writing_anim.png rename to examples/src/example/text/text_writing_anim.png diff --git a/showcase/src/example/text_box_selection/textbox_extended_demo.c b/examples/src/example/text_box_selection/textbox_extended_demo.c similarity index 100% rename from showcase/src/example/text_box_selection/textbox_extended_demo.c rename to examples/src/example/text_box_selection/textbox_extended_demo.c diff --git a/showcase/src/example/text_editor/text_editor.c b/examples/src/example/text_editor/text_editor.c similarity index 100% rename from showcase/src/example/text_editor/text_editor.c rename to examples/src/example/text_editor/text_editor.c diff --git a/showcase/src/example/textures/mod.rs b/examples/src/example/textures/mod.rs similarity index 100% rename from showcase/src/example/textures/mod.rs rename to examples/src/example/textures/mod.rs diff --git a/showcase/src/example/textures/textures_background_scrolling.c b/examples/src/example/textures/textures_background_scrolling.c similarity index 100% rename from showcase/src/example/textures/textures_background_scrolling.c rename to examples/src/example/textures/textures_background_scrolling.c diff --git a/showcase/src/example/textures/textures_background_scrolling.png b/examples/src/example/textures/textures_background_scrolling.png similarity index 100% rename from showcase/src/example/textures/textures_background_scrolling.png rename to examples/src/example/textures/textures_background_scrolling.png diff --git a/showcase/src/example/textures/textures_bunnymark.c b/examples/src/example/textures/textures_bunnymark.c similarity index 100% rename from showcase/src/example/textures/textures_bunnymark.c rename to examples/src/example/textures/textures_bunnymark.c diff --git a/showcase/src/example/textures/textures_bunnymark.png b/examples/src/example/textures/textures_bunnymark.png similarity index 100% rename from showcase/src/example/textures/textures_bunnymark.png rename to examples/src/example/textures/textures_bunnymark.png diff --git a/showcase/src/example/textures/textures_bunnymark.rs b/examples/src/example/textures/textures_bunnymark.rs similarity index 92% rename from showcase/src/example/textures/textures_bunnymark.rs rename to examples/src/example/textures/textures_bunnymark.rs index 45a09e35..a3cbafb4 100644 --- a/showcase/src/example/textures/textures_bunnymark.rs +++ b/examples/src/example/textures/textures_bunnymark.rs @@ -50,19 +50,19 @@ pub fn run(rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut { // Update //---------------------------------------------------------------------------------- - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) { + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { // Create more bunnies for _ in 0..100 { if bunnies_count < MAX_BUNNIES { bunnies[bunnies_count].position = rl.get_mouse_position(); bunnies[bunnies_count].speed.x = - get_random_value::(-250, 250) as f32 / 60.0; + rl.get_random_value::(-250, 250) as f32 / 60.0; bunnies[bunnies_count].speed.y = - get_random_value::(-250, 250) as f32 / 60.0; + rl.get_random_value::(-250, 250) as f32 / 60.0; bunnies[bunnies_count].color = Color::new( - get_random_value::(50, 240) as u8, - get_random_value::(80, 240) as u8, - get_random_value::(100, 240) as u8, + rl.get_random_value::(50, 240) as u8, + rl.get_random_value::(80, 240) as u8, + rl.get_random_value::(100, 240) as u8, 255, ); bunnies_count += 1; diff --git a/showcase/src/example/textures/textures_image_drawing.c b/examples/src/example/textures/textures_image_drawing.c similarity index 100% rename from showcase/src/example/textures/textures_image_drawing.c rename to examples/src/example/textures/textures_image_drawing.c diff --git a/showcase/src/example/textures/textures_image_drawing.png b/examples/src/example/textures/textures_image_drawing.png similarity index 100% rename from showcase/src/example/textures/textures_image_drawing.png rename to examples/src/example/textures/textures_image_drawing.png diff --git a/showcase/src/example/textures/textures_image_generation.c b/examples/src/example/textures/textures_image_generation.c similarity index 100% rename from showcase/src/example/textures/textures_image_generation.c rename to examples/src/example/textures/textures_image_generation.c diff --git a/showcase/src/example/textures/textures_image_generation.png b/examples/src/example/textures/textures_image_generation.png similarity index 100% rename from showcase/src/example/textures/textures_image_generation.png rename to examples/src/example/textures/textures_image_generation.png diff --git a/showcase/src/example/textures/textures_image_loading.c b/examples/src/example/textures/textures_image_loading.c similarity index 100% rename from showcase/src/example/textures/textures_image_loading.c rename to examples/src/example/textures/textures_image_loading.c diff --git a/showcase/src/example/textures/textures_image_loading.png b/examples/src/example/textures/textures_image_loading.png similarity index 100% rename from showcase/src/example/textures/textures_image_loading.png rename to examples/src/example/textures/textures_image_loading.png diff --git a/showcase/src/example/textures/textures_image_processing.c b/examples/src/example/textures/textures_image_processing.c similarity index 100% rename from showcase/src/example/textures/textures_image_processing.c rename to examples/src/example/textures/textures_image_processing.c diff --git a/showcase/src/example/textures/textures_image_processing.png b/examples/src/example/textures/textures_image_processing.png similarity index 100% rename from showcase/src/example/textures/textures_image_processing.png rename to examples/src/example/textures/textures_image_processing.png diff --git a/showcase/src/example/textures/textures_image_text.c b/examples/src/example/textures/textures_image_text.c similarity index 100% rename from showcase/src/example/textures/textures_image_text.c rename to examples/src/example/textures/textures_image_text.c diff --git a/showcase/src/example/textures/textures_image_text.png b/examples/src/example/textures/textures_image_text.png similarity index 100% rename from showcase/src/example/textures/textures_image_text.png rename to examples/src/example/textures/textures_image_text.png diff --git a/showcase/src/example/textures/textures_logo_raylib.c b/examples/src/example/textures/textures_logo_raylib.c similarity index 100% rename from showcase/src/example/textures/textures_logo_raylib.c rename to examples/src/example/textures/textures_logo_raylib.c diff --git a/showcase/src/example/textures/textures_logo_raylib.png b/examples/src/example/textures/textures_logo_raylib.png similarity index 100% rename from showcase/src/example/textures/textures_logo_raylib.png rename to examples/src/example/textures/textures_logo_raylib.png diff --git a/showcase/src/example/textures/textures_mouse_painting.c b/examples/src/example/textures/textures_mouse_painting.c similarity index 100% rename from showcase/src/example/textures/textures_mouse_painting.c rename to examples/src/example/textures/textures_mouse_painting.c diff --git a/showcase/src/example/textures/textures_mouse_painting.png b/examples/src/example/textures/textures_mouse_painting.png similarity index 100% rename from showcase/src/example/textures/textures_mouse_painting.png rename to examples/src/example/textures/textures_mouse_painting.png diff --git a/showcase/src/example/textures/textures_mouse_painting.rs b/examples/src/example/textures/textures_mouse_painting.rs similarity index 95% rename from showcase/src/example/textures/textures_mouse_painting.rs rename to examples/src/example/textures/textures_mouse_painting.rs index 020684c4..fc18f1c0 100644 --- a/showcase/src/example/textures/textures_mouse_painting.rs +++ b/examples/src/example/textures/textures_mouse_painting.rs @@ -41,10 +41,8 @@ pub fn run(mut rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut Color::DARKBLUE, Color::PURPLE, Color::VIOLET, - Color::DARKPURPLE, Color::BEIGE, Color::BROWN, - Color::DARKBROWN, Color::LIGHTGRAY, Color::GRAY, Color::DARKGRAY, @@ -66,7 +64,7 @@ pub fn run(mut rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut let mut color_mouse_hover = None; let mut brush_size = 20; - let btn_save_rec = rrect(750, 10, 40, 30); + let btn_save_rec = rrect::(750, 10, 40, 30); let mut btn_save_mouse_hover = false; let mut show_save_message = false; let mut save_message_counter = 0; @@ -89,7 +87,7 @@ pub fn run(mut rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut // Main game loop return Box::new( move |mut rl: &mut RaylibHandle, thread: &RaylibThread| -> () { - use raylib::consts::Gestures::*; + use raylib::consts::Gesture::*; // Update //---------------------------------------------------------------------------------- let mouse_pos = rl.get_mouse_position(); @@ -115,7 +113,7 @@ pub fn run(mut rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut } if color_mouse_hover.is_some() - && rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + && rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) { color_selected = color_mouse_hover.unwrap(); color_selected_prev = color_selected; @@ -136,7 +134,7 @@ pub fn run(mut rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut d.clear_background(colors[0]); } - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) || rl.get_gesture_detected() == GESTURE_DRAG { // Paint circle into render texture @@ -154,7 +152,7 @@ pub fn run(mut rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut } } - if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_RIGHT_BUTTON) { + if rl.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_RIGHT) { color_selected = 0; // Erase circle from render texture @@ -182,10 +180,10 @@ pub fn run(mut rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut // Image saving logic // NOTE: Saving painted texture to a default named image if btn_save_mouse_hover - && rl.is_mouse_button_released(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) + && rl.is_mouse_button_released(raylib::consts::MouseButton::MOUSE_BUTTON_LEFT) || rl.is_key_pressed(raylib::consts::KeyboardKey::KEY_S) { - let mut image = target.get_texture_data().unwrap(); + let mut image = target.load_image().unwrap(); image.flip_vertical(); image.export_image("my_amazing_texture_painting.png"); @@ -211,14 +209,14 @@ pub fn run(mut rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut // NOTE: Render texture must be y-flipped due to default OpenGL coordinates (left-bottom) d.draw_texture_rec( &target, - rrect(0, 0, target.texture.width, -target.texture.height), - rvec2(0, 0), + rrect::(0, 0, target.texture.width, -target.texture.height), + rvec2::(0, 0), Color::WHITE, ); // Draw drawing circle for reference if mouse_pos.y > 50.0 { - if d.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_RIGHT_BUTTON) { + if d.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_BUTTON_RIGHT) { d.draw_circle_lines( mouse_pos.x as i32, mouse_pos.y as i32, @@ -259,14 +257,14 @@ pub fn run(mut rl: &mut RaylibHandle, thread: &RaylibThread) -> crate::SampleOut colors_recs[color_selected].width + 4.0, colors_recs[color_selected].height + 4.0, ), - 2, + 2.0, Color::BLACK, ); // Draw save image button d.draw_rectangle_lines_ex( btn_save_rec, - 2, + 2.0, if btn_save_mouse_hover { Color::RED } else { diff --git a/showcase/src/example/textures/textures_npatch_drawing.c b/examples/src/example/textures/textures_npatch_drawing.c similarity index 100% rename from showcase/src/example/textures/textures_npatch_drawing.c rename to examples/src/example/textures/textures_npatch_drawing.c diff --git a/showcase/src/example/textures/textures_npatch_drawing.png b/examples/src/example/textures/textures_npatch_drawing.png similarity index 100% rename from showcase/src/example/textures/textures_npatch_drawing.png rename to examples/src/example/textures/textures_npatch_drawing.png diff --git a/showcase/src/example/textures/textures_particles_blending.c b/examples/src/example/textures/textures_particles_blending.c similarity index 100% rename from showcase/src/example/textures/textures_particles_blending.c rename to examples/src/example/textures/textures_particles_blending.c diff --git a/showcase/src/example/textures/textures_particles_blending.png b/examples/src/example/textures/textures_particles_blending.png similarity index 100% rename from showcase/src/example/textures/textures_particles_blending.png rename to examples/src/example/textures/textures_particles_blending.png diff --git a/showcase/src/example/textures/textures_raw_data.c b/examples/src/example/textures/textures_raw_data.c similarity index 100% rename from showcase/src/example/textures/textures_raw_data.c rename to examples/src/example/textures/textures_raw_data.c diff --git a/showcase/src/example/textures/textures_raw_data.png b/examples/src/example/textures/textures_raw_data.png similarity index 100% rename from showcase/src/example/textures/textures_raw_data.png rename to examples/src/example/textures/textures_raw_data.png diff --git a/showcase/src/example/textures/textures_rectangle.c b/examples/src/example/textures/textures_rectangle.c similarity index 100% rename from showcase/src/example/textures/textures_rectangle.c rename to examples/src/example/textures/textures_rectangle.c diff --git a/showcase/src/example/textures/textures_rectangle.png b/examples/src/example/textures/textures_rectangle.png similarity index 100% rename from showcase/src/example/textures/textures_rectangle.png rename to examples/src/example/textures/textures_rectangle.png diff --git a/showcase/src/example/textures/textures_rectangle.rs b/examples/src/example/textures/textures_rectangle.rs similarity index 100% rename from showcase/src/example/textures/textures_rectangle.rs rename to examples/src/example/textures/textures_rectangle.rs diff --git a/showcase/src/example/textures/textures_sprite_button.c b/examples/src/example/textures/textures_sprite_button.c similarity index 100% rename from showcase/src/example/textures/textures_sprite_button.c rename to examples/src/example/textures/textures_sprite_button.c diff --git a/showcase/src/example/textures/textures_sprite_button.png b/examples/src/example/textures/textures_sprite_button.png similarity index 100% rename from showcase/src/example/textures/textures_sprite_button.png rename to examples/src/example/textures/textures_sprite_button.png diff --git a/showcase/src/example/textures/textures_sprite_explosion.c b/examples/src/example/textures/textures_sprite_explosion.c similarity index 100% rename from showcase/src/example/textures/textures_sprite_explosion.c rename to examples/src/example/textures/textures_sprite_explosion.c diff --git a/showcase/src/example/textures/textures_sprite_explosion.png b/examples/src/example/textures/textures_sprite_explosion.png similarity index 100% rename from showcase/src/example/textures/textures_sprite_explosion.png rename to examples/src/example/textures/textures_sprite_explosion.png diff --git a/showcase/src/example/textures/textures_srcrec_dstrec.c b/examples/src/example/textures/textures_srcrec_dstrec.c similarity index 100% rename from showcase/src/example/textures/textures_srcrec_dstrec.c rename to examples/src/example/textures/textures_srcrec_dstrec.c diff --git a/showcase/src/example/textures/textures_srcrec_dstrec.png b/examples/src/example/textures/textures_srcrec_dstrec.png similarity index 100% rename from showcase/src/example/textures/textures_srcrec_dstrec.png rename to examples/src/example/textures/textures_srcrec_dstrec.png diff --git a/showcase/src/example/textures/textures_to_image.c b/examples/src/example/textures/textures_to_image.c similarity index 100% rename from showcase/src/example/textures/textures_to_image.c rename to examples/src/example/textures/textures_to_image.c diff --git a/showcase/src/example/textures/textures_to_image.png b/examples/src/example/textures/textures_to_image.png similarity index 100% rename from showcase/src/example/textures/textures_to_image.png rename to examples/src/example/textures/textures_to_image.png diff --git a/showcase/src/main.rs b/examples/src/main.rs similarity index 96% rename from showcase/src/main.rs rename to examples/src/main.rs index 6b21a159..fea01012 100644 --- a/showcase/src/main.rs +++ b/examples/src/main.rs @@ -14,13 +14,6 @@ thread_local! (static APP: RefCell bool>>> = RefCell:: pub const EXIT_KEY: raylib::consts::KeyboardKey = raylib::consts::KeyboardKey::KEY_ESCAPE; fn main() { - // Set the emscripten main loop before setting up raylib so that raylib has something - // to configure - // #[cfg(target_arch = "wasm32")] - // unsafe { - // wasm::emscripten_set_main_loop(wasm::_nothing_wasm, 0, 1); - // } - let title = "Showcase"; let screen_width = 800; let screen_height = 640; @@ -205,7 +198,6 @@ fn main() { rstr!("raylib [models] example - orthographic projection"), example::models::models_orthographic_projection::run, ), - #[cfg(target_os = "windows")] ( rstr!( "raylib [models] example - rlgl module usage with push/pop matrix transformations" @@ -260,7 +252,6 @@ fn main() { rstr!("raylib [textures] example - mouse painting"), example::textures::textures_mouse_painting::run, ), - #[cfg(target_os = "windows")] ( rstr!("rlgl standalone"), example::others::rlgl_standalone::run, @@ -285,7 +276,7 @@ fn main() { let list: Vec<_> = samples.iter().map(|(s, _)| *s).collect(); list_view_active = d.gui_list_view_ex( - rrect(100.0, y_margin, 600, box_length), + rrect(100.0, y_margin as f32, 600 as f32, box_length as f32), list.as_slice(), &mut list_view_focus, &mut list_view_scroll_index, @@ -313,7 +304,10 @@ fn main() { } } }; + #[cfg(not(target_arch = "wasm32"))] return rl.window_should_close(); + #[cfg(target_arch = "wasm32")] + return false; }); APP.with(|app| { @@ -363,6 +357,4 @@ mod wasm { pub extern "C" fn _update_wasm() { super::update(); } - - pub extern "C" fn _nothing_wasm() {} } diff --git a/raylib-sys/Cargo.toml b/raylib-sys/Cargo.toml index f0651cbd..2b9b58e7 100644 --- a/raylib-sys/Cargo.toml +++ b/raylib-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "raylib-sys" -version = "3.7.0" +version = "4.5.0" authors = ["DeltaPHC "] license = "Zlib" description = "Raw FFI bindings for Raylib" @@ -15,13 +15,25 @@ exclude = [ "raylib/templates/*" ] +[dependencies] +mint = "0.5" + [build-dependencies] -fs_extra = "1.1" -cmake = "0.1.35" +fs_extra = "1.2" +cmake = "0.1.49" cc = "1.0" - +bindgen = "0.61.0" [features] default = [] # Build Raylib headless for docs. Up to you to link -nobuild = [] \ No newline at end of file +nobuild = [] + +# Build for wayland on linux. Should fix #119 +wayland = [] + +# OpenGL stuff, intended for fixing #122 +opengl_33 = [] +opengl_21 = [] +# opengl_11 = [] I couldn't get this one working, the others were fine in my limited testing (unsure about wayland compatibility) +opengl_es_20 = [] \ No newline at end of file diff --git a/raylib-sys/GENERATING_BINDINGS.md b/raylib-sys/GENERATING_BINDINGS.md deleted file mode 100644 index 2ca8cb64..00000000 --- a/raylib-sys/GENERATING_BINDINGS.md +++ /dev/null @@ -1,8 +0,0 @@ -Bindings were generated with rust_bindgen with rustified enums using c11 - -Ex -bindgen rgui_wrapper.h -o bindings_osx.rs --rustified-enum .+ -- --target=x86_64-apple-darwin -std=c11 -bindgen rgui_wrapper.h -o bindings_linux.rs --rustified-enum .+ -- --target=x86_64-unknown-linux-gnu -std=c11 -Windows and Web bindings are generated from rgui.h and the extern functions are manually copied over -bindgen rgui_wrapper.h -o bindings_windows.rs --rustified-enum .+ -- --target=x86_64-pc-windows-msvc -std=c11 -bindgen rgui_wrapper.h -o bindings_web.rs --rustified-enum .+ -- --target=wasm32-unknown-emscripten -std=c11 diff --git a/raylib-sys/binding/binding.h b/raylib-sys/binding/binding.h new file mode 100644 index 00000000..5d2aaf43 --- /dev/null +++ b/raylib-sys/binding/binding.h @@ -0,0 +1,265 @@ +#include "../raylib/src/raylib.h" +#include "../raylib/src/rlgl.h" +#include "../raylib/src/rcamera.h" + +#include "../raygui/src/raygui.h" + +typedef enum +{ + RAYGUI_ICON_NONE = 0, + RAYGUI_ICON_FOLDER_FILE_OPEN = 1, + RAYGUI_ICON_FILE_SAVE_CLASSIC = 2, + RAYGUI_ICON_FOLDER_OPEN = 3, + RAYGUI_ICON_FOLDER_SAVE = 4, + RAYGUI_ICON_FILE_OPEN = 5, + RAYGUI_ICON_FILE_SAVE = 6, + RAYGUI_ICON_FILE_EXPORT = 7, + RAYGUI_ICON_FILE_ADD = 8, + RAYGUI_ICON_FILE_DELETE = 9, + RAYGUI_ICON_FILETYPE_TEXT = 10, + RAYGUI_ICON_FILETYPE_AUDIO = 11, + RAYGUI_ICON_FILETYPE_IMAGE = 12, + RAYGUI_ICON_FILETYPE_PLAY = 13, + RAYGUI_ICON_FILETYPE_VIDEO = 14, + RAYGUI_ICON_FILETYPE_INFO = 15, + RAYGUI_ICON_FILE_COPY = 16, + RAYGUI_ICON_FILE_CUT = 17, + RAYGUI_ICON_FILE_PASTE = 18, + RAYGUI_ICON_CURSOR_HAND = 19, + RAYGUI_ICON_CURSOR_POINTER = 20, + RAYGUI_ICON_CURSOR_CLASSIC = 21, + RAYGUI_ICON_PENCIL = 22, + RAYGUI_ICON_PENCIL_BIG = 23, + RAYGUI_ICON_BRUSH_CLASSIC = 24, + RAYGUI_ICON_BRUSH_PAINTER = 25, + RAYGUI_ICON_WATER_DROP = 26, + RAYGUI_ICON_COLOR_PICKER = 27, + RAYGUI_ICON_RUBBER = 28, + RAYGUI_ICON_COLOR_BUCKET = 29, + RAYGUI_ICON_TEXT_T = 30, + RAYGUI_ICON_TEXT_A = 31, + RAYGUI_ICON_SCALE = 32, + RAYGUI_ICON_RESIZE = 33, + RAYGUI_ICON_FILTER_POINT = 34, + RAYGUI_ICON_FILTER_BILINEAR = 35, + RAYGUI_ICON_CROP = 36, + RAYGUI_ICON_CROP_ALPHA = 37, + RAYGUI_ICON_SQUARE_TOGGLE = 38, + RAYGUI_ICON_SYMMETRY = 39, + RAYGUI_ICON_SYMMETRY_HORIZONTAL = 40, + RAYGUI_ICON_SYMMETRY_VERTICAL = 41, + RAYGUI_ICON_LENS = 42, + RAYGUI_ICON_LENS_BIG = 43, + RAYGUI_ICON_EYE_ON = 44, + RAYGUI_ICON_EYE_OFF = 45, + RAYGUI_ICON_FILTER_TOP = 46, + RAYGUI_ICON_FILTER = 47, + RAYGUI_ICON_TARGET_POINT = 48, + RAYGUI_ICON_TARGET_SMALL = 49, + RAYGUI_ICON_TARGET_BIG = 50, + RAYGUI_ICON_TARGET_MOVE = 51, + RAYGUI_ICON_CURSOR_MOVE = 52, + RAYGUI_ICON_CURSOR_SCALE = 53, + RAYGUI_ICON_CURSOR_SCALE_RIGHT = 54, + RAYGUI_ICON_CURSOR_SCALE_LEFT = 55, + RAYGUI_ICON_UNDO = 56, + RAYGUI_ICON_REDO = 57, + RAYGUI_ICON_REREDO = 58, + RAYGUI_ICON_MUTATE = 59, + RAYGUI_ICON_ROTATE = 60, + RAYGUI_ICON_REPEAT = 61, + RAYGUI_ICON_SHUFFLE = 62, + RAYGUI_ICON_EMPTYBOX = 63, + RAYGUI_ICON_TARGET = 64, + RAYGUI_ICON_TARGET_SMALL_FILL = 65, + RAYGUI_ICON_TARGET_BIG_FILL = 66, + RAYGUI_ICON_TARGET_MOVE_FILL = 67, + RAYGUI_ICON_CURSOR_MOVE_FILL = 68, + RAYGUI_ICON_CURSOR_SCALE_FILL = 69, + RAYGUI_ICON_CURSOR_SCALE_RIGHT_FILL = 70, + RAYGUI_ICON_CURSOR_SCALE_LEFT_FILL = 71, + RAYGUI_ICON_UNDO_FILL = 72, + RAYGUI_ICON_REDO_FILL = 73, + RAYGUI_ICON_REREDO_FILL = 74, + RAYGUI_ICON_MUTATE_FILL = 75, + RAYGUI_ICON_ROTATE_FILL = 76, + RAYGUI_ICON_REPEAT_FILL = 77, + RAYGUI_ICON_SHUFFLE_FILL = 78, + RAYGUI_ICON_EMPTYBOX_SMALL = 79, + RAYGUI_ICON_BOX = 80, + RAYGUI_ICON_BOX_TOP = 81, + RAYGUI_ICON_BOX_TOP_RIGHT = 82, + RAYGUI_ICON_BOX_RIGHT = 83, + RAYGUI_ICON_BOX_BOTTOM_RIGHT = 84, + RAYGUI_ICON_BOX_BOTTOM = 85, + RAYGUI_ICON_BOX_BOTTOM_LEFT = 86, + RAYGUI_ICON_BOX_LEFT = 87, + RAYGUI_ICON_BOX_TOP_LEFT = 88, + RAYGUI_ICON_BOX_CENTER = 89, + RAYGUI_ICON_BOX_CIRCLE_MASK = 90, + RAYGUI_ICON_POT = 91, + RAYGUI_ICON_ALPHA_MULTIPLY = 92, + RAYGUI_ICON_ALPHA_CLEAR = 93, + RAYGUI_ICON_DITHERING = 94, + RAYGUI_ICON_MIPMAPS = 95, + RAYGUI_ICON_BOX_GRID = 96, + RAYGUI_ICON_GRID = 97, + RAYGUI_ICON_BOX_CORNERS_SMALL = 98, + RAYGUI_ICON_BOX_CORNERS_BIG = 99, + RAYGUI_ICON_FOUR_BOXES = 100, + RAYGUI_ICON_GRID_FILL = 101, + RAYGUI_ICON_BOX_MULTISIZE = 102, + RAYGUI_ICON_ZOOM_SMALL = 103, + RAYGUI_ICON_ZOOM_MEDIUM = 104, + RAYGUI_ICON_ZOOM_BIG = 105, + RAYGUI_ICON_ZOOM_ALL = 106, + RAYGUI_ICON_ZOOM_CENTER = 107, + RAYGUI_ICON_BOX_DOTS_SMALL = 108, + RAYGUI_ICON_BOX_DOTS_BIG = 109, + RAYGUI_ICON_BOX_CONCENTRIC = 110, + RAYGUI_ICON_BOX_GRID_BIG = 111, + RAYGUI_ICON_OK_TICK = 112, + RAYGUI_ICON_CROSS = 113, + RAYGUI_ICON_ARROW_LEFT = 114, + RAYGUI_ICON_ARROW_RIGHT = 115, + RAYGUI_ICON_ARROW_DOWN = 116, + RAYGUI_ICON_ARROW_UP = 117, + RAYGUI_ICON_ARROW_LEFT_FILL = 118, + RAYGUI_ICON_ARROW_RIGHT_FILL = 119, + RAYGUI_ICON_ARROW_DOWN_FILL = 120, + RAYGUI_ICON_ARROW_UP_FILL = 121, + RAYGUI_ICON_AUDIO = 122, + RAYGUI_ICON_FX = 123, + RAYGUI_ICON_WAVE = 124, + RAYGUI_ICON_WAVE_SINUS = 125, + RAYGUI_ICON_WAVE_SQUARE = 126, + RAYGUI_ICON_WAVE_TRIANGULAR = 127, + RAYGUI_ICON_CROSS_SMALL = 128, + RAYGUI_ICON_PLAYER_PREVIOUS = 129, + RAYGUI_ICON_PLAYER_PLAY_BACK = 130, + RAYGUI_ICON_PLAYER_PLAY = 131, + RAYGUI_ICON_PLAYER_PAUSE = 132, + RAYGUI_ICON_PLAYER_STOP = 133, + RAYGUI_ICON_PLAYER_NEXT = 134, + RAYGUI_ICON_PLAYER_RECORD = 135, + RAYGUI_ICON_MAGNET = 136, + RAYGUI_ICON_LOCK_CLOSE = 137, + RAYGUI_ICON_LOCK_OPEN = 138, + RAYGUI_ICON_CLOCK = 139, + RAYGUI_ICON_TOOLS = 140, + RAYGUI_ICON_GEAR = 141, + RAYGUI_ICON_GEAR_BIG = 142, + RAYGUI_ICON_BIN = 143, + RAYGUI_ICON_HAND_POINTER = 144, + RAYGUI_ICON_LASER = 145, + RAYGUI_ICON_COIN = 146, + RAYGUI_ICON_EXPLOSION = 147, + RAYGUI_ICON_1UP = 148, + RAYGUI_ICON_PLAYER = 149, + RAYGUI_ICON_PLAYER_JUMP = 150, + RAYGUI_ICON_KEY = 151, + RAYGUI_ICON_DEMON = 152, + RAYGUI_ICON_TEXT_POPUP = 153, + RAYGUI_ICON_GEAR_EX = 154, + RAYGUI_ICON_CRACK = 155, + RAYGUI_ICON_CRACK_POINTS = 156, + RAYGUI_ICON_STAR = 157, + RAYGUI_ICON_DOOR = 158, + RAYGUI_ICON_EXIT = 159, + RAYGUI_ICON_MODE_2D = 160, + RAYGUI_ICON_MODE_3D = 161, + RAYGUI_ICON_CUBE = 162, + RAYGUI_ICON_CUBE_FACE_TOP = 163, + RAYGUI_ICON_CUBE_FACE_LEFT = 164, + RAYGUI_ICON_CUBE_FACE_FRONT = 165, + RAYGUI_ICON_CUBE_FACE_BOTTOM = 166, + RAYGUI_ICON_CUBE_FACE_RIGHT = 167, + RAYGUI_ICON_CUBE_FACE_BACK = 168, + RAYGUI_ICON_CAMERA = 169, + RAYGUI_ICON_SPECIAL = 170, + RAYGUI_ICON_LINK_NET = 171, + RAYGUI_ICON_LINK_BOXES = 172, + RAYGUI_ICON_LINK_MULTI = 173, + RAYGUI_ICON_LINK = 174, + RAYGUI_ICON_LINK_BROKE = 175, + RAYGUI_ICON_TEXT_NOTES = 176, + RAYGUI_ICON_NOTEBOOK = 177, + RAYGUI_ICON_SUITCASE = 178, + RAYGUI_ICON_SUITCASE_ZIP = 179, + RAYGUI_ICON_MAILBOX = 180, + RAYGUI_ICON_MONITOR = 181, + RAYGUI_ICON_PRINTER = 182, + RAYGUI_ICON_PHOTO_CAMERA = 183, + RAYGUI_ICON_PHOTO_CAMERA_FLASH = 184, + RAYGUI_ICON_HOUSE = 185, + RAYGUI_ICON_HEART = 186, + RAYGUI_ICON_CORNER = 187, + RAYGUI_ICON_VERTICAL_BARS = 188, + RAYGUI_ICON_VERTICAL_BARS_FILL = 189, + RAYGUI_ICON_LIFE_BARS = 190, + RAYGUI_ICON_INFO = 191, + RAYGUI_ICON_CROSSLINE = 192, + RAYGUI_ICON_HELP = 193, + RAYGUI_ICON_FILETYPE_ALPHA = 194, + RAYGUI_ICON_FILETYPE_HOME = 195, + RAYGUI_ICON_LAYERS_VISIBLE = 196, + RAYGUI_ICON_LAYERS = 197, + RAYGUI_ICON_WINDOW = 198, + RAYGUI_ICON_HIDPI = 199, + RAYGUI_ICON_FILETYPE_BINARY = 200, + RAYGUI_ICON_HEX = 201, + RAYGUI_ICON_SHIELD = 202, + RAYGUI_ICON_FILE_NEW = 203, + RAYGUI_ICON_FOLDER_ADD = 204, + RAYGUI_ICON_ALARM = 205, + RAYGUI_ICON_CPU = 206, + RAYGUI_ICON_ROM = 207, + RAYGUI_ICON_STEP_OVER = 208, + RAYGUI_ICON_STEP_INTO = 209, + RAYGUI_ICON_STEP_OUT = 210, + RAYGUI_ICON_RESTART = 211, + RAYGUI_ICON_BREAKPOINT_ON = 212, + RAYGUI_ICON_BREAKPOINT_OFF = 213, + RAYGUI_ICON_BURGER_MENU = 214, + RAYGUI_ICON_CASE_SENSITIVE = 215, + RAYGUI_ICON_REG_EXP = 216, + RAYGUI_ICON_FOLDER = 217, + RAYGUI_ICON_FILE = 218, + RAYGUI_ICON_219 = 219, + RAYGUI_ICON_220 = 220, + RAYGUI_ICON_221 = 221, + RAYGUI_ICON_222 = 222, + RAYGUI_ICON_223 = 223, + RAYGUI_ICON_224 = 224, + RAYGUI_ICON_225 = 225, + RAYGUI_ICON_226 = 226, + RAYGUI_ICON_227 = 227, + RAYGUI_ICON_228 = 228, + RAYGUI_ICON_229 = 229, + RAYGUI_ICON_230 = 230, + RAYGUI_ICON_231 = 231, + RAYGUI_ICON_232 = 232, + RAYGUI_ICON_233 = 233, + RAYGUI_ICON_234 = 234, + RAYGUI_ICON_235 = 235, + RAYGUI_ICON_236 = 236, + RAYGUI_ICON_237 = 237, + RAYGUI_ICON_238 = 238, + RAYGUI_ICON_239 = 239, + RAYGUI_ICON_240 = 240, + RAYGUI_ICON_241 = 241, + RAYGUI_ICON_242 = 242, + RAYGUI_ICON_243 = 243, + RAYGUI_ICON_244 = 244, + RAYGUI_ICON_245 = 245, + RAYGUI_ICON_246 = 246, + RAYGUI_ICON_247 = 247, + RAYGUI_ICON_248 = 248, + RAYGUI_ICON_249 = 249, + RAYGUI_ICON_250 = 250, + RAYGUI_ICON_251 = 251, + RAYGUI_ICON_252 = 252, + RAYGUI_ICON_253 = 253, + RAYGUI_ICON_254 = 254, + RAYGUI_ICON_255 = 255, +} guiRAYGUI_ICONName; \ No newline at end of file diff --git a/raylib-sys/binding/rgui_wrapper.c b/raylib-sys/binding/rgui_wrapper.c new file mode 100644 index 00000000..b5945f7c --- /dev/null +++ b/raylib-sys/binding/rgui_wrapper.c @@ -0,0 +1,7 @@ +#include "../raylib/src/raylib.h" +#define RAYGUI_IMPLEMENTATION +#define RAYGUI_SUPPORT_ICONS +#define RLGL_IMPLEMENTATION +#define RLGL_SUPPORT_TRACELOG +#include "../raylib/src/rlgl.h" // Don't include rlgl since it's in raylib +#include "../raygui/src/raygui.h" \ No newline at end of file diff --git a/raylib-sys/binding/wrapper.c b/raylib-sys/binding/wrapper.c new file mode 100644 index 00000000..2e1b296e --- /dev/null +++ b/raylib-sys/binding/wrapper.c @@ -0,0 +1,5 @@ +#include "../raylib/src/raylib.h" + +#define RAYGUI_IMPLEMENTATION +#define RAYGUI_SUPPORT_ICONS +#include "../raygui/src/raygui.h" \ No newline at end of file diff --git a/raylib-sys/bindings_linux.rs b/raylib-sys/bindings_linux.rs deleted file mode 100644 index 4b854986..00000000 --- a/raylib-sys/bindings_linux.rs +++ /dev/null @@ -1,8198 +0,0 @@ -/* automatically generated by rust-bindgen 0.59.1 */ - -pub const RAYGUI_VERSION: &'static [u8; 8usize] = b"2.6-dev\0"; -pub const __GNUC_VA_LIST: u32 = 1; -pub const PI: f64 = 3.141592653589793; -pub const DEG2RAD: f64 = 0.017453292519943295; -pub const RAD2DEG: f64 = 57.29577951308232; -pub const true_: u32 = 1; -pub const false_: u32 = 0; -pub const __bool_true_false_are_defined: u32 = 1; -pub const _FEATURES_H: u32 = 1; -pub const __GLIBC_USE_ISOC2X: u32 = 0; -pub const __USE_ISOC11: u32 = 1; -pub const __USE_ISOC99: u32 = 1; -pub const __USE_ISOC95: u32 = 1; -pub const __USE_FORTIFY_LEVEL: u32 = 0; -pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0; -pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0; -pub const _STDC_PREDEF_H: u32 = 1; -pub const __STDC_IEC_559__: u32 = 1; -pub const __STDC_IEC_559_COMPLEX__: u32 = 1; -pub const __STDC_ISO_10646__: u32 = 201706; -pub const __GNU_LIBRARY__: u32 = 6; -pub const __GLIBC__: u32 = 2; -pub const __GLIBC_MINOR__: u32 = 31; -pub const _SYS_CDEFS_H: u32 = 1; -pub const __glibc_c99_flexarr_available: u32 = 1; -pub const __WORDSIZE: u32 = 64; -pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1; -pub const __SYSCALL_WORDSIZE: u32 = 64; -pub const __LONG_DOUBLE_USES_FLOAT128: u32 = 0; -pub const __HAVE_GENERIC_SELECTION: u32 = 1; -pub const __GLIBC_USE_LIB_EXT2: u32 = 0; -pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0; -pub const __GLIBC_USE_IEC_60559_BFP_EXT_C2X: u32 = 0; -pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0; -pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X: u32 = 0; -pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0; -pub const _STDLIB_H: u32 = 1; -pub const __HAVE_FLOAT128: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT128: u32 = 0; -pub const __HAVE_FLOAT64X: u32 = 1; -pub const __HAVE_FLOAT64X_LONG_DOUBLE: u32 = 1; -pub const __HAVE_FLOAT16: u32 = 0; -pub const __HAVE_FLOAT32: u32 = 1; -pub const __HAVE_FLOAT64: u32 = 1; -pub const __HAVE_FLOAT32X: u32 = 1; -pub const __HAVE_FLOAT128X: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT16: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT32: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT64: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT32X: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT64X: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT128X: u32 = 0; -pub const __HAVE_FLOATN_NOT_TYPEDEF: u32 = 0; -pub const __ldiv_t_defined: u32 = 1; -pub const __lldiv_t_defined: u32 = 1; -pub const RAND_MAX: u32 = 2147483647; -pub const EXIT_FAILURE: u32 = 1; -pub const EXIT_SUCCESS: u32 = 0; -pub const NUM_CONTROLS: u32 = 16; -pub const NUM_PROPS_DEFAULT: u32 = 16; -pub const NUM_PROPS_EXTENDED: u32 = 8; -pub const TEXTEDIT_CURSOR_BLINK_FRAMES: u32 = 20; -pub const RICON_MAX_ICONS: u32 = 256; -pub const RICON_SIZE: u32 = 16; -pub const RICON_MAX_NAME_LENGTH: u32 = 32; -pub const RICON_DATA_ELEMENTS: u32 = 8; -pub const _STDIO_H: u32 = 1; -pub const _BITS_TYPES_H: u32 = 1; -pub const __TIMESIZE: u32 = 64; -pub const _BITS_TYPESIZES_H: u32 = 1; -pub const __OFF_T_MATCHES_OFF64_T: u32 = 1; -pub const __INO_T_MATCHES_INO64_T: u32 = 1; -pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1; -pub const __STATFS_MATCHES_STATFS64: u32 = 1; -pub const __FD_SETSIZE: u32 = 1024; -pub const _BITS_TIME64_H: u32 = 1; -pub const _____fpos_t_defined: u32 = 1; -pub const ____mbstate_t_defined: u32 = 1; -pub const _____fpos64_t_defined: u32 = 1; -pub const ____FILE_defined: u32 = 1; -pub const __FILE_defined: u32 = 1; -pub const __struct_FILE_defined: u32 = 1; -pub const _IO_EOF_SEEN: u32 = 16; -pub const _IO_ERR_SEEN: u32 = 32; -pub const _IO_USER_LOCK: u32 = 32768; -pub const _IOFBF: u32 = 0; -pub const _IOLBF: u32 = 1; -pub const _IONBF: u32 = 2; -pub const BUFSIZ: u32 = 8192; -pub const EOF: i32 = -1; -pub const SEEK_SET: u32 = 0; -pub const SEEK_CUR: u32 = 1; -pub const SEEK_END: u32 = 2; -pub const _BITS_STDIO_LIM_H: u32 = 1; -pub const L_tmpnam: u32 = 20; -pub const TMP_MAX: u32 = 238328; -pub const FILENAME_MAX: u32 = 4096; -pub const FOPEN_MAX: u32 = 16; -pub const _STRING_H: u32 = 1; -pub const _MATH_H: u32 = 1; -pub const _BITS_LIBM_SIMD_DECL_STUBS_H: u32 = 1; -pub const __FP_LOGB0_IS_MIN: u32 = 1; -pub const __FP_LOGBNAN_IS_MIN: u32 = 1; -pub const FP_ILOGB0: i32 = -2147483648; -pub const FP_ILOGBNAN: i32 = -2147483648; -pub const __MATH_DECLARING_DOUBLE: u32 = 1; -pub const __MATH_DECLARING_FLOATN: u32 = 0; -pub const __MATH_DECLARE_LDOUBLE: u32 = 1; -pub const FP_NAN: u32 = 0; -pub const FP_INFINITE: u32 = 1; -pub const FP_ZERO: u32 = 2; -pub const FP_SUBNORMAL: u32 = 3; -pub const FP_NORMAL: u32 = 4; -pub const MATH_ERRNO: u32 = 1; -pub const MATH_ERREXCEPT: u32 = 2; -pub const math_errhandling: u32 = 3; -pub const WINDOW_STATUSBAR_HEIGHT: u32 = 22; -pub const GROUPBOX_LINE_THICK: u32 = 1; -pub const GROUPBOX_TEXT_PADDING: u32 = 10; -pub const LINE_TEXT_PADDING: u32 = 10; -pub const PANEL_BORDER_WIDTH: u32 = 1; -pub const TOGGLEGROUP_MAX_ELEMENTS: u32 = 32; -pub const VALUEBOX_MAX_CHARS: u32 = 32; -pub const COLORBARALPHA_CHECKED_SIZE: u32 = 10; -pub const MESSAGEBOX_BUTTON_HEIGHT: u32 = 24; -pub const MESSAGEBOX_BUTTON_PADDING: u32 = 10; -pub const TEXTINPUTBOX_BUTTON_HEIGHT: u32 = 24; -pub const TEXTINPUTBOX_BUTTON_PADDING: u32 = 10; -pub const TEXTINPUTBOX_HEIGHT: u32 = 30; -pub const TEXTINPUTBOX_MAX_TEXT_LENGTH: u32 = 256; -pub const GRID_COLOR_ALPHA: f64 = 0.15; -pub const ICON_TEXT_PADDING: u32 = 4; -pub const TEXTSPLIT_MAX_TEXT_LENGTH: u32 = 1024; -pub const TEXTSPLIT_MAX_TEXT_ELEMENTS: u32 = 128; -pub const MAX_MATERIAL_MAPS: u32 = 12; -pub type va_list = __builtin_va_list; -pub type __gnuc_va_list = __builtin_va_list; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector2 { - pub x: f32, - pub y: f32, -} -#[test] -fn bindgen_test_layout_Vector2() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(Vector2)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector2), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector2), - "::", - stringify!(y) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector3 { - pub x: f32, - pub y: f32, - pub z: f32, -} -#[test] -fn bindgen_test_layout_Vector3() { - assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!("Size of: ", stringify!(Vector3)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector3)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).z as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(z) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector4 { - pub x: f32, - pub y: f32, - pub z: f32, - pub w: f32, -} -#[test] -fn bindgen_test_layout_Vector4() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Vector4)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector4)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).z as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(z) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).w as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(w) - ) - ); -} -pub type Quaternion = Vector4; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Matrix { - pub m0: f32, - pub m4: f32, - pub m8: f32, - pub m12: f32, - pub m1: f32, - pub m5: f32, - pub m9: f32, - pub m13: f32, - pub m2: f32, - pub m6: f32, - pub m10: f32, - pub m14: f32, - pub m3: f32, - pub m7: f32, - pub m11: f32, - pub m15: f32, -} -#[test] -fn bindgen_test_layout_Matrix() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(Matrix)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Matrix)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m0 as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m0) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m4 as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m4) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m8 as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m8) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m12 as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m12) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m1 as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m1) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m5 as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m5) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m9 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m9) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m13 as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m13) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m2 as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m6 as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m6) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m10 as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m10) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m14 as *const _ as usize }, - 44usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m14) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m3 as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m3) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m7 as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m7) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m11 as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m11) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m15 as *const _ as usize }, - 60usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m15) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Color { - pub r: ::std::os::raw::c_uchar, - pub g: ::std::os::raw::c_uchar, - pub b: ::std::os::raw::c_uchar, - pub a: ::std::os::raw::c_uchar, -} -#[test] -fn bindgen_test_layout_Color() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(Color)) - ); - assert_eq!( - ::std::mem::align_of::(), - 1usize, - concat!("Alignment of ", stringify!(Color)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).r as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(r)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).g as *const _ as usize }, - 1usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(g)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).b as *const _ as usize }, - 2usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(b)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).a as *const _ as usize }, - 3usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(a)) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Rectangle { - pub x: f32, - pub y: f32, - pub width: f32, - pub height: f32, -} -#[test] -fn bindgen_test_layout_Rectangle() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Rectangle)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Rectangle)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(height) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Image { - pub data: *mut ::std::os::raw::c_void, - pub width: ::std::os::raw::c_int, - pub height: ::std::os::raw::c_int, - pub mipmaps: ::std::os::raw::c_int, - pub format: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Image() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Image)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Image)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).data as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(data) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(height) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mipmaps as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(mipmaps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).format as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(format) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Texture { - pub id: ::std::os::raw::c_uint, - pub width: ::std::os::raw::c_int, - pub height: ::std::os::raw::c_int, - pub mipmaps: ::std::os::raw::c_int, - pub format: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Texture() { - assert_eq!( - ::std::mem::size_of::(), - 20usize, - concat!("Size of: ", stringify!(Texture)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Texture)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(height) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mipmaps as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(mipmaps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).format as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(format) - ) - ); -} -pub type Texture2D = Texture; -pub type TextureCubemap = Texture; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RenderTexture { - pub id: ::std::os::raw::c_uint, - pub texture: Texture, - pub depth: Texture, -} -#[test] -fn bindgen_test_layout_RenderTexture() { - assert_eq!( - ::std::mem::size_of::(), - 44usize, - concat!("Size of: ", stringify!(RenderTexture)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(RenderTexture)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).depth as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(depth) - ) - ); -} -pub type RenderTexture2D = RenderTexture; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct NPatchInfo { - pub source: Rectangle, - pub left: ::std::os::raw::c_int, - pub top: ::std::os::raw::c_int, - pub right: ::std::os::raw::c_int, - pub bottom: ::std::os::raw::c_int, - pub layout: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_NPatchInfo() { - assert_eq!( - ::std::mem::size_of::(), - 36usize, - concat!("Size of: ", stringify!(NPatchInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(NPatchInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).source as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(source) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).left as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(left) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).top as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(top) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).right as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(right) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bottom as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(bottom) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).layout as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(layout) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct CharInfo { - pub value: ::std::os::raw::c_int, - pub offsetX: ::std::os::raw::c_int, - pub offsetY: ::std::os::raw::c_int, - pub advanceX: ::std::os::raw::c_int, - pub image: Image, -} -#[test] -fn bindgen_test_layout_CharInfo() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(CharInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(CharInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).value as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(value) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offsetX as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(offsetX) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offsetY as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(offsetY) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).advanceX as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(advanceX) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).image as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(image) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Font { - pub baseSize: ::std::os::raw::c_int, - pub charsCount: ::std::os::raw::c_int, - pub charsPadding: ::std::os::raw::c_int, - pub texture: Texture2D, - pub recs: *mut Rectangle, - pub chars: *mut CharInfo, -} -#[test] -fn bindgen_test_layout_Font() { - assert_eq!( - ::std::mem::size_of::(), - 48usize, - concat!("Size of: ", stringify!(Font)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Font)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).baseSize as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(baseSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).charsCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(charsCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).charsPadding as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(charsPadding) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).recs as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(recs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).chars as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(chars) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Camera3D { - pub position: Vector3, - pub target: Vector3, - pub up: Vector3, - pub fovy: f32, - pub projection: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Camera3D() { - assert_eq!( - ::std::mem::size_of::(), - 44usize, - concat!("Size of: ", stringify!(Camera3D)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Camera3D)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).target as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).up as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(up) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).fovy as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(fovy) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).projection as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(projection) - ) - ); -} -pub type Camera = Camera3D; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Camera2D { - pub offset: Vector2, - pub target: Vector2, - pub rotation: f32, - pub zoom: f32, -} -#[test] -fn bindgen_test_layout_Camera2D() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Camera2D)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Camera2D)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offset as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).target as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rotation as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(rotation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).zoom as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(zoom) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Mesh { - pub vertexCount: ::std::os::raw::c_int, - pub triangleCount: ::std::os::raw::c_int, - pub vertices: *mut f32, - pub texcoords: *mut f32, - pub texcoords2: *mut f32, - pub normals: *mut f32, - pub tangents: *mut f32, - pub colors: *mut ::std::os::raw::c_uchar, - pub indices: *mut ::std::os::raw::c_ushort, - pub animVertices: *mut f32, - pub animNormals: *mut f32, - pub boneIds: *mut ::std::os::raw::c_int, - pub boneWeights: *mut f32, - pub vaoId: ::std::os::raw::c_uint, - pub vboId: *mut ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_Mesh() { - assert_eq!( - ::std::mem::size_of::(), - 112usize, - concat!("Size of: ", stringify!(Mesh)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Mesh)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vertexCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).triangleCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(triangleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertices as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(texcoords) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords2 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(texcoords2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).normals as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(normals) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).tangents as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(tangents) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).colors as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(colors) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).indices as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(indices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).animVertices as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(animVertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).animNormals as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(animNormals) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneIds as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(boneIds) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneWeights as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(boneWeights) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vaoId as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vaoId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vboId as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vboId) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Shader { - pub id: ::std::os::raw::c_uint, - pub locs: *mut ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Shader() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Shader)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Shader)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Shader), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).locs as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Shader), - "::", - stringify!(locs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct MaterialMap { - pub texture: Texture2D, - pub color: Color, - pub value: f32, -} -#[test] -fn bindgen_test_layout_MaterialMap() { - assert_eq!( - ::std::mem::size_of::(), - 28usize, - concat!("Size of: ", stringify!(MaterialMap)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(MaterialMap)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).color as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(color) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).value as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(value) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Material { - pub shader: Shader, - pub maps: *mut MaterialMap, - pub params: [f32; 4usize], -} -#[test] -fn bindgen_test_layout_Material() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(Material)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Material)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).shader as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(shader) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).maps as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(maps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).params as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(params) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Transform { - pub translation: Vector3, - pub rotation: Quaternion, - pub scale: Vector3, -} -#[test] -fn bindgen_test_layout_Transform() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(Transform)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Transform)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).translation as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(translation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rotation as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(rotation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scale as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(scale) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct BoneInfo { - pub name: [::std::os::raw::c_char; 32usize], - pub parent: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_BoneInfo() { - assert_eq!( - ::std::mem::size_of::(), - 36usize, - concat!("Size of: ", stringify!(BoneInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(BoneInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).name as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(BoneInfo), - "::", - stringify!(name) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).parent as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(BoneInfo), - "::", - stringify!(parent) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Model { - pub transform: Matrix, - pub meshCount: ::std::os::raw::c_int, - pub materialCount: ::std::os::raw::c_int, - pub meshes: *mut Mesh, - pub materials: *mut Material, - pub meshMaterial: *mut ::std::os::raw::c_int, - pub boneCount: ::std::os::raw::c_int, - pub bones: *mut BoneInfo, - pub bindPose: *mut Transform, -} -#[test] -fn bindgen_test_layout_Model() { - assert_eq!( - ::std::mem::size_of::(), - 120usize, - concat!("Size of: ", stringify!(Model)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Model)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).transform as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(transform) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshCount as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).materialCount as *const _ as usize }, - 68usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(materialCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshes as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshes) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).materials as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(materials) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshMaterial as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshMaterial) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneCount as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(boneCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bones as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(bones) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bindPose as *const _ as usize }, - 112usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(bindPose) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct ModelAnimation { - pub boneCount: ::std::os::raw::c_int, - pub frameCount: ::std::os::raw::c_int, - pub bones: *mut BoneInfo, - pub framePoses: *mut *mut Transform, -} -#[test] -fn bindgen_test_layout_ModelAnimation() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(ModelAnimation)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(ModelAnimation)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(boneCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).frameCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(frameCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bones as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(bones) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).framePoses as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(framePoses) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Ray { - pub position: Vector3, - pub direction: Vector3, -} -#[test] -fn bindgen_test_layout_Ray() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Ray)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Ray)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Ray), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).direction as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Ray), - "::", - stringify!(direction) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RayHitInfo { - pub hit: bool, - pub distance: f32, - pub position: Vector3, - pub normal: Vector3, -} -#[test] -fn bindgen_test_layout_RayHitInfo() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(RayHitInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(RayHitInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hit as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(hit) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).distance as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(distance) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).normal as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(normal) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct BoundingBox { - pub min: Vector3, - pub max: Vector3, -} -#[test] -fn bindgen_test_layout_BoundingBox() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(BoundingBox)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(BoundingBox)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).min as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(BoundingBox), - "::", - stringify!(min) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).max as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(BoundingBox), - "::", - stringify!(max) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Wave { - pub sampleCount: ::std::os::raw::c_uint, - pub sampleRate: ::std::os::raw::c_uint, - pub sampleSize: ::std::os::raw::c_uint, - pub channels: ::std::os::raw::c_uint, - pub data: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout_Wave() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Wave)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Wave)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleRate as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleRate) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleSize as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).channels as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(channels) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).data as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(data) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rAudioBuffer { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct AudioStream { - pub buffer: *mut rAudioBuffer, - pub sampleRate: ::std::os::raw::c_uint, - pub sampleSize: ::std::os::raw::c_uint, - pub channels: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_AudioStream() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(AudioStream)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(AudioStream)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).buffer as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(buffer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleRate as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(sampleRate) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleSize as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(sampleSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).channels as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(channels) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Sound { - pub stream: AudioStream, - pub sampleCount: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_Sound() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(Sound)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Sound)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stream as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Sound), - "::", - stringify!(stream) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Sound), - "::", - stringify!(sampleCount) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Music { - pub stream: AudioStream, - pub sampleCount: ::std::os::raw::c_uint, - pub looping: bool, - pub ctxType: ::std::os::raw::c_int, - pub ctxData: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout_Music() { - assert_eq!( - ::std::mem::size_of::(), - 48usize, - concat!("Size of: ", stringify!(Music)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Music)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stream as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(stream) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(sampleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).looping as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(looping) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ctxType as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(ctxType) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ctxData as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(ctxData) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VrDeviceInfo { - pub hResolution: ::std::os::raw::c_int, - pub vResolution: ::std::os::raw::c_int, - pub hScreenSize: f32, - pub vScreenSize: f32, - pub vScreenCenter: f32, - pub eyeToScreenDistance: f32, - pub lensSeparationDistance: f32, - pub interpupillaryDistance: f32, - pub lensDistortionValues: [f32; 4usize], - pub chromaAbCorrection: [f32; 4usize], -} -#[test] -fn bindgen_test_layout_VrDeviceInfo() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(VrDeviceInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(VrDeviceInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hResolution as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(hResolution) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vResolution as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vResolution) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hScreenSize as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(hScreenSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vScreenSize as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vScreenSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vScreenCenter as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vScreenCenter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).eyeToScreenDistance as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(eyeToScreenDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).lensSeparationDistance as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(lensSeparationDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).interpupillaryDistance as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(interpupillaryDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).lensDistortionValues as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(lensDistortionValues) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).chromaAbCorrection as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(chromaAbCorrection) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VrStereoConfig { - pub projection: [Matrix; 2usize], - pub viewOffset: [Matrix; 2usize], - pub leftLensCenter: [f32; 2usize], - pub rightLensCenter: [f32; 2usize], - pub leftScreenCenter: [f32; 2usize], - pub rightScreenCenter: [f32; 2usize], - pub scale: [f32; 2usize], - pub scaleIn: [f32; 2usize], -} -#[test] -fn bindgen_test_layout_VrStereoConfig() { - assert_eq!( - ::std::mem::size_of::(), - 304usize, - concat!("Size of: ", stringify!(VrStereoConfig)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(VrStereoConfig)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).projection as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(projection) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).viewOffset as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(viewOffset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).leftLensCenter as *const _ as usize }, - 256usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(leftLensCenter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rightLensCenter as *const _ as usize }, - 264usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(rightLensCenter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).leftScreenCenter as *const _ as usize }, - 272usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(leftScreenCenter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).rightScreenCenter as *const _ as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(rightScreenCenter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scale as *const _ as usize }, - 288usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(scale) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scaleIn as *const _ as usize }, - 296usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(scaleIn) - ) - ); -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum ConfigFlags { - FLAG_VSYNC_HINT = 64, - FLAG_FULLSCREEN_MODE = 2, - FLAG_WINDOW_RESIZABLE = 4, - FLAG_WINDOW_UNDECORATED = 8, - FLAG_WINDOW_HIDDEN = 128, - FLAG_WINDOW_MINIMIZED = 512, - FLAG_WINDOW_MAXIMIZED = 1024, - FLAG_WINDOW_UNFOCUSED = 2048, - FLAG_WINDOW_TOPMOST = 4096, - FLAG_WINDOW_ALWAYS_RUN = 256, - FLAG_WINDOW_TRANSPARENT = 16, - FLAG_WINDOW_HIGHDPI = 8192, - FLAG_MSAA_4X_HINT = 32, - FLAG_INTERLACED_HINT = 65536, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum TraceLogLevel { - LOG_ALL = 0, - LOG_TRACE = 1, - LOG_DEBUG = 2, - LOG_INFO = 3, - LOG_WARNING = 4, - LOG_ERROR = 5, - LOG_FATAL = 6, - LOG_NONE = 7, -} -impl KeyboardKey { - pub const KEY_MENU: KeyboardKey = KeyboardKey::KEY_R; -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum KeyboardKey { - KEY_NULL = 0, - KEY_APOSTROPHE = 39, - KEY_COMMA = 44, - KEY_MINUS = 45, - KEY_PERIOD = 46, - KEY_SLASH = 47, - KEY_ZERO = 48, - KEY_ONE = 49, - KEY_TWO = 50, - KEY_THREE = 51, - KEY_FOUR = 52, - KEY_FIVE = 53, - KEY_SIX = 54, - KEY_SEVEN = 55, - KEY_EIGHT = 56, - KEY_NINE = 57, - KEY_SEMICOLON = 59, - KEY_EQUAL = 61, - KEY_A = 65, - KEY_B = 66, - KEY_C = 67, - KEY_D = 68, - KEY_E = 69, - KEY_F = 70, - KEY_G = 71, - KEY_H = 72, - KEY_I = 73, - KEY_J = 74, - KEY_K = 75, - KEY_L = 76, - KEY_M = 77, - KEY_N = 78, - KEY_O = 79, - KEY_P = 80, - KEY_Q = 81, - KEY_R = 82, - KEY_S = 83, - KEY_T = 84, - KEY_U = 85, - KEY_V = 86, - KEY_W = 87, - KEY_X = 88, - KEY_Y = 89, - KEY_Z = 90, - KEY_SPACE = 32, - KEY_ESCAPE = 256, - KEY_ENTER = 257, - KEY_TAB = 258, - KEY_BACKSPACE = 259, - KEY_INSERT = 260, - KEY_DELETE = 261, - KEY_RIGHT = 262, - KEY_LEFT = 263, - KEY_DOWN = 264, - KEY_UP = 265, - KEY_PAGE_UP = 266, - KEY_PAGE_DOWN = 267, - KEY_HOME = 268, - KEY_END = 269, - KEY_CAPS_LOCK = 280, - KEY_SCROLL_LOCK = 281, - KEY_NUM_LOCK = 282, - KEY_PRINT_SCREEN = 283, - KEY_PAUSE = 284, - KEY_F1 = 290, - KEY_F2 = 291, - KEY_F3 = 292, - KEY_F4 = 293, - KEY_F5 = 294, - KEY_F6 = 295, - KEY_F7 = 296, - KEY_F8 = 297, - KEY_F9 = 298, - KEY_F10 = 299, - KEY_F11 = 300, - KEY_F12 = 301, - KEY_LEFT_SHIFT = 340, - KEY_LEFT_CONTROL = 341, - KEY_LEFT_ALT = 342, - KEY_LEFT_SUPER = 343, - KEY_RIGHT_SHIFT = 344, - KEY_RIGHT_CONTROL = 345, - KEY_RIGHT_ALT = 346, - KEY_RIGHT_SUPER = 347, - KEY_KB_MENU = 348, - KEY_LEFT_BRACKET = 91, - KEY_BACKSLASH = 92, - KEY_RIGHT_BRACKET = 93, - KEY_GRAVE = 96, - KEY_KP_0 = 320, - KEY_KP_1 = 321, - KEY_KP_2 = 322, - KEY_KP_3 = 323, - KEY_KP_4 = 324, - KEY_KP_5 = 325, - KEY_KP_6 = 326, - KEY_KP_7 = 327, - KEY_KP_8 = 328, - KEY_KP_9 = 329, - KEY_KP_DECIMAL = 330, - KEY_KP_DIVIDE = 331, - KEY_KP_MULTIPLY = 332, - KEY_KP_SUBTRACT = 333, - KEY_KP_ADD = 334, - KEY_KP_ENTER = 335, - KEY_KP_EQUAL = 336, - KEY_BACK = 4, - KEY_VOLUME_UP = 24, - KEY_VOLUME_DOWN = 25, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum MouseButton { - MOUSE_LEFT_BUTTON = 0, - MOUSE_RIGHT_BUTTON = 1, - MOUSE_MIDDLE_BUTTON = 2, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum MouseCursor { - MOUSE_CURSOR_DEFAULT = 0, - MOUSE_CURSOR_ARROW = 1, - MOUSE_CURSOR_IBEAM = 2, - MOUSE_CURSOR_CROSSHAIR = 3, - MOUSE_CURSOR_POINTING_HAND = 4, - MOUSE_CURSOR_RESIZE_EW = 5, - MOUSE_CURSOR_RESIZE_NS = 6, - MOUSE_CURSOR_RESIZE_NWSE = 7, - MOUSE_CURSOR_RESIZE_NESW = 8, - MOUSE_CURSOR_RESIZE_ALL = 9, - MOUSE_CURSOR_NOT_ALLOWED = 10, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GamepadButton { - GAMEPAD_BUTTON_UNKNOWN = 0, - GAMEPAD_BUTTON_LEFT_FACE_UP = 1, - GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2, - GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3, - GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4, - GAMEPAD_BUTTON_RIGHT_FACE_UP = 5, - GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6, - GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7, - GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8, - GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9, - GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10, - GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11, - GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12, - GAMEPAD_BUTTON_MIDDLE_LEFT = 13, - GAMEPAD_BUTTON_MIDDLE = 14, - GAMEPAD_BUTTON_MIDDLE_RIGHT = 15, - GAMEPAD_BUTTON_LEFT_THUMB = 16, - GAMEPAD_BUTTON_RIGHT_THUMB = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GamepadAxis { - GAMEPAD_AXIS_LEFT_X = 0, - GAMEPAD_AXIS_LEFT_Y = 1, - GAMEPAD_AXIS_RIGHT_X = 2, - GAMEPAD_AXIS_RIGHT_Y = 3, - GAMEPAD_AXIS_LEFT_TRIGGER = 4, - GAMEPAD_AXIS_RIGHT_TRIGGER = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum MaterialMapIndex { - MATERIAL_MAP_ALBEDO = 0, - MATERIAL_MAP_METALNESS = 1, - MATERIAL_MAP_NORMAL = 2, - MATERIAL_MAP_ROUGHNESS = 3, - MATERIAL_MAP_OCCLUSION = 4, - MATERIAL_MAP_EMISSION = 5, - MATERIAL_MAP_HEIGHT = 6, - MATERIAL_MAP_BRDG = 7, - MATERIAL_MAP_CUBEMAP = 8, - MATERIAL_MAP_IRRADIANCE = 9, - MATERIAL_MAP_PREFILTER = 10, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum ShaderLocationIndex { - SHADER_LOC_VERTEX_POSITION = 0, - SHADER_LOC_VERTEX_TEXCOORD01 = 1, - SHADER_LOC_VERTEX_TEXCOORD02 = 2, - SHADER_LOC_VERTEX_NORMAL = 3, - SHADER_LOC_VERTEX_TANGENT = 4, - SHADER_LOC_VERTEX_COLOR = 5, - SHADER_LOC_MATRIX_MVP = 6, - SHADER_LOC_MATRIX_VIEW = 7, - SHADER_LOC_MATRIX_PROJECTION = 8, - SHADER_LOC_MATRIX_MODEL = 9, - SHADER_LOC_MATRIX_NORMAL = 10, - SHADER_LOC_VECTOR_VIEW = 11, - SHADER_LOC_COLOR_DIFFUSE = 12, - SHADER_LOC_COLOR_SPECULAR = 13, - SHADER_LOC_COLOR_AMBIENT = 14, - SHADER_LOC_MAP_ALBEDO = 15, - SHADER_LOC_MAP_METALNESS = 16, - SHADER_LOC_MAP_NORMAL = 17, - SHADER_LOC_MAP_ROUGHNESS = 18, - SHADER_LOC_MAP_OCCLUSION = 19, - SHADER_LOC_MAP_EMISSION = 20, - SHADER_LOC_MAP_HEIGHT = 21, - SHADER_LOC_MAP_CUBEMAP = 22, - SHADER_LOC_MAP_IRRADIANCE = 23, - SHADER_LOC_MAP_PREFILTER = 24, - SHADER_LOC_MAP_BRDF = 25, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum ShaderUniformDataType { - SHADER_UNIFORM_FLOAT = 0, - SHADER_UNIFORM_VEC2 = 1, - SHADER_UNIFORM_VEC3 = 2, - SHADER_UNIFORM_VEC4 = 3, - SHADER_UNIFORM_INT = 4, - SHADER_UNIFORM_IVEC2 = 5, - SHADER_UNIFORM_IVEC3 = 6, - SHADER_UNIFORM_IVEC4 = 7, - SHADER_UNIFORM_SAMPLER2D = 8, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum PixelFormat { - PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, - PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2, - PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3, - PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4, - PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5, - PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6, - PIXELFORMAT_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7, - PIXELFORMAT_UNCOMPRESSED_R32 = 8, - PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9, - PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10, - PIXELFORMAT_COMPRESSED_DXT1_RGB = 11, - PIXELFORMAT_COMPRESSED_DXT1_RGBA = 12, - PIXELFORMAT_COMPRESSED_DXT3_RGBA = 13, - PIXELFORMAT_COMPRESSED_DXT5_RGBA = 14, - PIXELFORMAT_COMPRESSED_ETC1_RGB = 15, - PIXELFORMAT_COMPRESSED_ETC2_RGB = 16, - PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 17, - PIXELFORMAT_COMPRESSED_PVRT_RGB = 18, - PIXELFORMAT_COMPRESSED_PVRT_RGBA = 19, - PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 20, - PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 21, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum TextureFilter { - TEXTURE_FILTER_POINT = 0, - TEXTURE_FILTER_BILINEAR = 1, - TEXTURE_FILTER_TRILINEAR = 2, - TEXTURE_FILTER_ANISOTROPIC_4X = 3, - TEXTURE_FILTER_ANISOTROPIC_8X = 4, - TEXTURE_FILTER_ANISOTROPIC_16X = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum TextureWrap { - TEXTURE_WRAP_REPEAT = 0, - TEXTURE_WRAP_CLAMP = 1, - TEXTURE_WRAP_MIRROR_REPEAT = 2, - TEXTURE_WRAP_MIRROR_CLAMP = 3, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum CubemapLayout { - CUBEMAP_LAYOUT_AUTO_DETECT = 0, - CUBEMAP_LAYOUT_LINE_VERTICAL = 1, - CUBEMAP_LAYOUT_LINE_HORIZONTAL = 2, - CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR = 3, - CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE = 4, - CUBEMAP_LAYOUT_PANORAMA = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum FontType { - FONT_DEFAULT = 0, - FONT_BITMAP = 1, - FONT_SDF = 2, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum BlendMode { - BLEND_ALPHA = 0, - BLEND_ADDITIVE = 1, - BLEND_MULTIPLIED = 2, - BLEND_ADD_COLORS = 3, - BLEND_SUBTRACT_COLORS = 4, - BLEND_CUSTOM = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum Gestures { - GESTURE_NONE = 0, - GESTURE_TAP = 1, - GESTURE_DOUBLETAP = 2, - GESTURE_HOLD = 4, - GESTURE_DRAG = 8, - GESTURE_SWIPE_RIGHT = 16, - GESTURE_SWIPE_LEFT = 32, - GESTURE_SWIPE_UP = 64, - GESTURE_SWIPE_DOWN = 128, - GESTURE_PINCH_IN = 256, - GESTURE_PINCH_OUT = 512, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum CameraMode { - CAMERA_CUSTOM = 0, - CAMERA_FREE = 1, - CAMERA_ORBITAL = 2, - CAMERA_FIRST_PERSON = 3, - CAMERA_THIRD_PERSON = 4, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum CameraProjection { - CAMERA_PERSPECTIVE = 0, - CAMERA_ORTHOGRAPHIC = 1, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum NPatchLayout { - NPATCH_NINE_PATCH = 0, - NPATCH_THREE_PATCH_VERTICAL = 1, - NPATCH_THREE_PATCH_HORIZONTAL = 2, -} -pub type TraceLogCallback = ::std::option::Option< - unsafe extern "C" fn( - logLevel: ::std::os::raw::c_int, - text: *const ::std::os::raw::c_char, - args: *mut __va_list_tag, - ), ->; -pub type LoadFileDataCallback = ::std::option::Option< - unsafe extern "C" fn( - fileName: *const ::std::os::raw::c_char, - bytesRead: *mut ::std::os::raw::c_uint, - ) -> *mut ::std::os::raw::c_uchar, ->; -pub type SaveFileDataCallback = ::std::option::Option< - unsafe extern "C" fn( - fileName: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_void, - bytesToWrite: ::std::os::raw::c_uint, - ) -> bool, ->; -pub type LoadFileTextCallback = ::std::option::Option< - unsafe extern "C" fn(fileName: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char, ->; -pub type SaveFileTextCallback = ::std::option::Option< - unsafe extern "C" fn( - fileName: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> bool, ->; -extern "C" { - pub fn InitWindow( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - title: *const ::std::os::raw::c_char, - ); -} -extern "C" { - pub fn WindowShouldClose() -> bool; -} -extern "C" { - pub fn CloseWindow(); -} -extern "C" { - pub fn IsWindowReady() -> bool; -} -extern "C" { - pub fn IsWindowFullscreen() -> bool; -} -extern "C" { - pub fn IsWindowHidden() -> bool; -} -extern "C" { - pub fn IsWindowMinimized() -> bool; -} -extern "C" { - pub fn IsWindowMaximized() -> bool; -} -extern "C" { - pub fn IsWindowFocused() -> bool; -} -extern "C" { - pub fn IsWindowResized() -> bool; -} -extern "C" { - pub fn IsWindowState(flag: ::std::os::raw::c_uint) -> bool; -} -extern "C" { - pub fn SetWindowState(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn ClearWindowState(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn ToggleFullscreen(); -} -extern "C" { - pub fn MaximizeWindow(); -} -extern "C" { - pub fn MinimizeWindow(); -} -extern "C" { - pub fn RestoreWindow(); -} -extern "C" { - pub fn SetWindowIcon(image: Image); -} -extern "C" { - pub fn SetWindowTitle(title: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn SetWindowPosition(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowMonitor(monitor: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowMinSize(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowSize(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetWindowHandle() -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn GetScreenWidth() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetScreenHeight() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorCount() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCurrentMonitor() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPosition(monitor: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn GetMonitorWidth(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorHeight(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPhysicalWidth(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPhysicalHeight(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorRefreshRate(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetWindowPosition() -> Vector2; -} -extern "C" { - pub fn GetWindowScaleDPI() -> Vector2; -} -extern "C" { - pub fn GetMonitorName(monitor: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn SetClipboardText(text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GetClipboardText() -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn ShowCursor(); -} -extern "C" { - pub fn HideCursor(); -} -extern "C" { - pub fn IsCursorHidden() -> bool; -} -extern "C" { - pub fn EnableCursor(); -} -extern "C" { - pub fn DisableCursor(); -} -extern "C" { - pub fn IsCursorOnScreen() -> bool; -} -extern "C" { - pub fn ClearBackground(color: Color); -} -extern "C" { - pub fn BeginDrawing(); -} -extern "C" { - pub fn EndDrawing(); -} -extern "C" { - pub fn BeginMode2D(camera: Camera2D); -} -extern "C" { - pub fn EndMode2D(); -} -extern "C" { - pub fn BeginMode3D(camera: Camera3D); -} -extern "C" { - pub fn EndMode3D(); -} -extern "C" { - pub fn BeginTextureMode(target: RenderTexture2D); -} -extern "C" { - pub fn EndTextureMode(); -} -extern "C" { - pub fn BeginShaderMode(shader: Shader); -} -extern "C" { - pub fn EndShaderMode(); -} -extern "C" { - pub fn BeginBlendMode(mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn EndBlendMode(); -} -extern "C" { - pub fn BeginScissorMode( - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn EndScissorMode(); -} -extern "C" { - pub fn BeginVrStereoMode(config: VrStereoConfig); -} -extern "C" { - pub fn EndVrStereoMode(); -} -extern "C" { - pub fn LoadVrStereoConfig(device: VrDeviceInfo) -> VrStereoConfig; -} -extern "C" { - pub fn UnloadVrStereoConfig(config: VrStereoConfig); -} -extern "C" { - pub fn LoadShader( - vsFileName: *const ::std::os::raw::c_char, - fsFileName: *const ::std::os::raw::c_char, - ) -> Shader; -} -extern "C" { - pub fn LoadShaderFromMemory( - vsCode: *const ::std::os::raw::c_char, - fsCode: *const ::std::os::raw::c_char, - ) -> Shader; -} -extern "C" { - pub fn GetShaderLocation( - shader: Shader, - uniformName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetShaderLocationAttrib( - shader: Shader, - attribName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn SetShaderValue( - shader: Shader, - locIndex: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - uniformType: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShaderValueV( - shader: Shader, - locIndex: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - uniformType: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShaderValueMatrix(shader: Shader, locIndex: ::std::os::raw::c_int, mat: Matrix); -} -extern "C" { - pub fn SetShaderValueTexture( - shader: Shader, - locIndex: ::std::os::raw::c_int, - texture: Texture2D, - ); -} -extern "C" { - pub fn UnloadShader(shader: Shader); -} -extern "C" { - pub fn GetMouseRay(mousePosition: Vector2, camera: Camera) -> Ray; -} -extern "C" { - pub fn GetCameraMatrix(camera: Camera) -> Matrix; -} -extern "C" { - pub fn GetCameraMatrix2D(camera: Camera2D) -> Matrix; -} -extern "C" { - pub fn GetWorldToScreen(position: Vector3, camera: Camera) -> Vector2; -} -extern "C" { - pub fn GetWorldToScreenEx( - position: Vector3, - camera: Camera, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> Vector2; -} -extern "C" { - pub fn GetWorldToScreen2D(position: Vector2, camera: Camera2D) -> Vector2; -} -extern "C" { - pub fn GetScreenToWorld2D(position: Vector2, camera: Camera2D) -> Vector2; -} -extern "C" { - pub fn SetTargetFPS(fps: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetFPS() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetFrameTime() -> f32; -} -extern "C" { - pub fn GetTime() -> f64; -} -extern "C" { - pub fn GetRandomValue( - min: ::std::os::raw::c_int, - max: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TakeScreenshot(fileName: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn SetConfigFlags(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn TraceLog(logLevel: ::std::os::raw::c_int, text: *const ::std::os::raw::c_char, ...); -} -extern "C" { - pub fn SetTraceLogLevel(logLevel: ::std::os::raw::c_int); -} -extern "C" { - pub fn MemAlloc(size: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn MemRealloc( - ptr: *mut ::std::os::raw::c_void, - size: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn MemFree(ptr: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn SetTraceLogCallback(callback: TraceLogCallback); -} -extern "C" { - pub fn SetLoadFileDataCallback(callback: LoadFileDataCallback); -} -extern "C" { - pub fn SetSaveFileDataCallback(callback: SaveFileDataCallback); -} -extern "C" { - pub fn SetLoadFileTextCallback(callback: LoadFileTextCallback); -} -extern "C" { - pub fn SetSaveFileTextCallback(callback: SaveFileTextCallback); -} -extern "C" { - pub fn LoadFileData( - fileName: *const ::std::os::raw::c_char, - bytesRead: *mut ::std::os::raw::c_uint, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn UnloadFileData(data: *mut ::std::os::raw::c_uchar); -} -extern "C" { - pub fn SaveFileData( - fileName: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_void, - bytesToWrite: ::std::os::raw::c_uint, - ) -> bool; -} -extern "C" { - pub fn LoadFileText(fileName: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn UnloadFileText(text: *mut ::std::os::raw::c_uchar); -} -extern "C" { - pub fn SaveFileText( - fileName: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn FileExists(fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn DirectoryExists(dirPath: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn IsFileExtension( - fileName: *const ::std::os::raw::c_char, - ext: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn GetFileExtension( - fileName: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetFileName(filePath: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetFileNameWithoutExt( - filePath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetDirectoryPath( - filePath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetPrevDirectoryPath( - dirPath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetWorkingDirectory() -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetDirectoryFiles( - dirPath: *const ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ClearDirectoryFiles(); -} -extern "C" { - pub fn ChangeDirectory(dir: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn IsFileDropped() -> bool; -} -extern "C" { - pub fn GetDroppedFiles(count: *mut ::std::os::raw::c_int) -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ClearDroppedFiles(); -} -extern "C" { - pub fn GetFileModTime(fileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn CompressData( - data: *mut ::std::os::raw::c_uchar, - dataLength: ::std::os::raw::c_int, - compDataLength: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn DecompressData( - compData: *mut ::std::os::raw::c_uchar, - compDataLength: ::std::os::raw::c_int, - dataLength: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn SaveStorageValue(position: ::std::os::raw::c_uint, value: ::std::os::raw::c_int) - -> bool; -} -extern "C" { - pub fn LoadStorageValue(position: ::std::os::raw::c_uint) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn OpenURL(url: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn IsKeyPressed(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyDown(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyReleased(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyUp(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn SetExitKey(key: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetKeyPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCharPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsGamepadAvailable(gamepad: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsGamepadName( - gamepad: ::std::os::raw::c_int, - name: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn GetGamepadName(gamepad: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn IsGamepadButtonPressed( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonDown( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonReleased( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonUp(gamepad: ::std::os::raw::c_int, button: ::std::os::raw::c_int) - -> bool; -} -extern "C" { - pub fn GetGamepadButtonPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGamepadAxisCount(gamepad: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGamepadAxisMovement( - gamepad: ::std::os::raw::c_int, - axis: ::std::os::raw::c_int, - ) -> f32; -} -extern "C" { - pub fn SetGamepadMappings(mappings: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsMouseButtonPressed(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonDown(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonReleased(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonUp(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn GetMouseX() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMouseY() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMousePosition() -> Vector2; -} -extern "C" { - pub fn SetMousePosition(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetMouseOffset(offsetX: ::std::os::raw::c_int, offsetY: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetMouseScale(scaleX: f32, scaleY: f32); -} -extern "C" { - pub fn GetMouseWheelMove() -> f32; -} -extern "C" { - pub fn SetMouseCursor(cursor: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetTouchX() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchY() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchPosition(index: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn SetGesturesEnabled(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn IsGestureDetected(gesture: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn GetGestureDetected() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchPointsCount() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGestureHoldDuration() -> f32; -} -extern "C" { - pub fn GetGestureDragVector() -> Vector2; -} -extern "C" { - pub fn GetGestureDragAngle() -> f32; -} -extern "C" { - pub fn GetGesturePinchVector() -> Vector2; -} -extern "C" { - pub fn GetGesturePinchAngle() -> f32; -} -extern "C" { - pub fn SetCameraMode(camera: Camera, mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn UpdateCamera(camera: *mut Camera); -} -extern "C" { - pub fn SetCameraPanControl(keyPan: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraAltControl(keyAlt: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraSmoothZoomControl(keySmoothZoom: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraMoveControls( - keyFront: ::std::os::raw::c_int, - keyBack: ::std::os::raw::c_int, - keyRight: ::std::os::raw::c_int, - keyLeft: ::std::os::raw::c_int, - keyUp: ::std::os::raw::c_int, - keyDown: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShapesTexture(texture: Texture2D, source: Rectangle); -} -extern "C" { - pub fn DrawPixel(posX: ::std::os::raw::c_int, posY: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawPixelV(position: Vector2, color: Color); -} -extern "C" { - pub fn DrawLine( - startPosX: ::std::os::raw::c_int, - startPosY: ::std::os::raw::c_int, - endPosX: ::std::os::raw::c_int, - endPosY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawLineV(startPos: Vector2, endPos: Vector2, color: Color); -} -extern "C" { - pub fn DrawLineEx(startPos: Vector2, endPos: Vector2, thick: f32, color: Color); -} -extern "C" { - pub fn DrawLineBezier(startPos: Vector2, endPos: Vector2, thick: f32, color: Color); -} -extern "C" { - pub fn DrawLineBezierQuad( - startPos: Vector2, - endPos: Vector2, - controlPos: Vector2, - thick: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawLineStrip(points: *mut Vector2, pointsCount: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawCircle( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleSector( - center: Vector2, - radius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleSectorLines( - center: Vector2, - radius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleGradient( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawCircleV(center: Vector2, radius: f32, color: Color); -} -extern "C" { - pub fn DrawCircleLines( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawEllipse( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radiusH: f32, - radiusV: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawEllipseLines( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radiusH: f32, - radiusV: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawRing( - center: Vector2, - innerRadius: f32, - outerRadius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRingLines( - center: Vector2, - innerRadius: f32, - outerRadius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangle( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleV(position: Vector2, size: Vector2, color: Color); -} -extern "C" { - pub fn DrawRectangleRec(rec: Rectangle, color: Color); -} -extern "C" { - pub fn DrawRectanglePro(rec: Rectangle, origin: Vector2, rotation: f32, color: Color); -} -extern "C" { - pub fn DrawRectangleGradientV( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawRectangleGradientH( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawRectangleGradientEx( - rec: Rectangle, - col1: Color, - col2: Color, - col3: Color, - col4: Color, - ); -} -extern "C" { - pub fn DrawRectangleLines( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleLinesEx(rec: Rectangle, lineThick: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawRectangleRounded( - rec: Rectangle, - roundness: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleRoundedLines( - rec: Rectangle, - roundness: f32, - segments: ::std::os::raw::c_int, - lineThick: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawTriangle(v1: Vector2, v2: Vector2, v3: Vector2, color: Color); -} -extern "C" { - pub fn DrawTriangleLines(v1: Vector2, v2: Vector2, v3: Vector2, color: Color); -} -extern "C" { - pub fn DrawTriangleFan(points: *mut Vector2, pointsCount: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawTriangleStrip( - points: *mut Vector2, - pointsCount: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawPoly( - center: Vector2, - sides: ::std::os::raw::c_int, - radius: f32, - rotation: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawPolyLines( - center: Vector2, - sides: ::std::os::raw::c_int, - radius: f32, - rotation: f32, - color: Color, - ); -} -extern "C" { - pub fn CheckCollisionRecs(rec1: Rectangle, rec2: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionCircles( - center1: Vector2, - radius1: f32, - center2: Vector2, - radius2: f32, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionCircleRec(center: Vector2, radius: f32, rec: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionPointRec(point: Vector2, rec: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionPointCircle(point: Vector2, center: Vector2, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionPointTriangle( - point: Vector2, - p1: Vector2, - p2: Vector2, - p3: Vector2, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionLines( - startPos1: Vector2, - endPos1: Vector2, - startPos2: Vector2, - endPos2: Vector2, - collisionPoint: *mut Vector2, - ) -> bool; -} -extern "C" { - pub fn GetCollisionRec(rec1: Rectangle, rec2: Rectangle) -> Rectangle; -} -extern "C" { - pub fn LoadImage(fileName: *const ::std::os::raw::c_char) -> Image; -} -extern "C" { - pub fn LoadImageRaw( - fileName: *const ::std::os::raw::c_char, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - headerSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn LoadImageAnim( - fileName: *const ::std::os::raw::c_char, - frames: *mut ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn LoadImageFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn UnloadImage(image: Image); -} -extern "C" { - pub fn ExportImage(image: Image, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn ExportImageAsCode(image: Image, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GenImageColor( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientV( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - top: Color, - bottom: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientH( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - left: Color, - right: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientRadial( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - density: f32, - inner: Color, - outer: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageChecked( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - checksX: ::std::os::raw::c_int, - checksY: ::std::os::raw::c_int, - col1: Color, - col2: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageWhiteNoise( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - factor: f32, - ) -> Image; -} -extern "C" { - pub fn GenImagePerlinNoise( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - scale: f32, - ) -> Image; -} -extern "C" { - pub fn GenImageCellular( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - tileSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn ImageCopy(image: Image) -> Image; -} -extern "C" { - pub fn ImageFromImage(image: Image, rec: Rectangle) -> Image; -} -extern "C" { - pub fn ImageText( - text: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - color: Color, - ) -> Image; -} -extern "C" { - pub fn ImageTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - fontSize: f32, - spacing: f32, - tint: Color, - ) -> Image; -} -extern "C" { - pub fn ImageFormat(image: *mut Image, newFormat: ::std::os::raw::c_int); -} -extern "C" { - pub fn ImageToPOT(image: *mut Image, fill: Color); -} -extern "C" { - pub fn ImageCrop(image: *mut Image, crop: Rectangle); -} -extern "C" { - pub fn ImageAlphaCrop(image: *mut Image, threshold: f32); -} -extern "C" { - pub fn ImageAlphaClear(image: *mut Image, color: Color, threshold: f32); -} -extern "C" { - pub fn ImageAlphaMask(image: *mut Image, alphaMask: Image); -} -extern "C" { - pub fn ImageAlphaPremultiply(image: *mut Image); -} -extern "C" { - pub fn ImageResize( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageResizeNN( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageResizeCanvas( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - fill: Color, - ); -} -extern "C" { - pub fn ImageMipmaps(image: *mut Image); -} -extern "C" { - pub fn ImageDither( - image: *mut Image, - rBpp: ::std::os::raw::c_int, - gBpp: ::std::os::raw::c_int, - bBpp: ::std::os::raw::c_int, - aBpp: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageFlipVertical(image: *mut Image); -} -extern "C" { - pub fn ImageFlipHorizontal(image: *mut Image); -} -extern "C" { - pub fn ImageRotateCW(image: *mut Image); -} -extern "C" { - pub fn ImageRotateCCW(image: *mut Image); -} -extern "C" { - pub fn ImageColorTint(image: *mut Image, color: Color); -} -extern "C" { - pub fn ImageColorInvert(image: *mut Image); -} -extern "C" { - pub fn ImageColorGrayscale(image: *mut Image); -} -extern "C" { - pub fn ImageColorContrast(image: *mut Image, contrast: f32); -} -extern "C" { - pub fn ImageColorBrightness(image: *mut Image, brightness: ::std::os::raw::c_int); -} -extern "C" { - pub fn ImageColorReplace(image: *mut Image, color: Color, replace: Color); -} -extern "C" { - pub fn LoadImageColors(image: Image) -> *mut Color; -} -extern "C" { - pub fn LoadImagePalette( - image: Image, - maxPaletteSize: ::std::os::raw::c_int, - colorsCount: *mut ::std::os::raw::c_int, - ) -> *mut Color; -} -extern "C" { - pub fn UnloadImageColors(colors: *mut Color); -} -extern "C" { - pub fn UnloadImagePalette(colors: *mut Color); -} -extern "C" { - pub fn GetImageAlphaBorder(image: Image, threshold: f32) -> Rectangle; -} -extern "C" { - pub fn ImageClearBackground(dst: *mut Image, color: Color); -} -extern "C" { - pub fn ImageDrawPixel( - dst: *mut Image, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawPixelV(dst: *mut Image, position: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawLine( - dst: *mut Image, - startPosX: ::std::os::raw::c_int, - startPosY: ::std::os::raw::c_int, - endPosX: ::std::os::raw::c_int, - endPosY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawLineV(dst: *mut Image, start: Vector2, end: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawCircle( - dst: *mut Image, - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawCircleV( - dst: *mut Image, - center: Vector2, - radius: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawRectangle( - dst: *mut Image, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawRectangleV(dst: *mut Image, position: Vector2, size: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawRectangleRec(dst: *mut Image, rec: Rectangle, color: Color); -} -extern "C" { - pub fn ImageDrawRectangleLines( - dst: *mut Image, - rec: Rectangle, - thick: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDraw( - dst: *mut Image, - src: Image, - srcRec: Rectangle, - dstRec: Rectangle, - tint: Color, - ); -} -extern "C" { - pub fn ImageDrawText( - dst: *mut Image, - text: *const ::std::os::raw::c_char, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawTextEx( - dst: *mut Image, - font: Font, - text: *const ::std::os::raw::c_char, - position: Vector2, - fontSize: f32, - spacing: f32, - tint: Color, - ); -} -extern "C" { - pub fn LoadTexture(fileName: *const ::std::os::raw::c_char) -> Texture2D; -} -extern "C" { - pub fn LoadTextureFromImage(image: Image) -> Texture2D; -} -extern "C" { - pub fn LoadTextureCubemap(image: Image, layout: ::std::os::raw::c_int) -> TextureCubemap; -} -extern "C" { - pub fn LoadRenderTexture( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> RenderTexture2D; -} -extern "C" { - pub fn UnloadTexture(texture: Texture2D); -} -extern "C" { - pub fn UnloadRenderTexture(target: RenderTexture2D); -} -extern "C" { - pub fn UpdateTexture(texture: Texture2D, pixels: *const ::std::os::raw::c_void); -} -extern "C" { - pub fn UpdateTextureRec( - texture: Texture2D, - rec: Rectangle, - pixels: *const ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn GetTextureData(texture: Texture2D) -> Image; -} -extern "C" { - pub fn GetScreenData() -> Image; -} -extern "C" { - pub fn GenTextureMipmaps(texture: *mut Texture2D); -} -extern "C" { - pub fn SetTextureFilter(texture: Texture2D, filter: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetTextureWrap(texture: Texture2D, wrap: ::std::os::raw::c_int); -} -extern "C" { - pub fn DrawTexture( - texture: Texture2D, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureV(texture: Texture2D, position: Vector2, tint: Color); -} -extern "C" { - pub fn DrawTextureEx( - texture: Texture2D, - position: Vector2, - rotation: f32, - scale: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureRec(texture: Texture2D, source: Rectangle, position: Vector2, tint: Color); -} -extern "C" { - pub fn DrawTextureQuad( - texture: Texture2D, - tiling: Vector2, - offset: Vector2, - quad: Rectangle, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureTiled( - texture: Texture2D, - source: Rectangle, - dest: Rectangle, - origin: Vector2, - rotation: f32, - scale: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTexturePro( - texture: Texture2D, - source: Rectangle, - dest: Rectangle, - origin: Vector2, - rotation: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureNPatch( - texture: Texture2D, - nPatchInfo: NPatchInfo, - dest: Rectangle, - origin: Vector2, - rotation: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTexturePoly( - texture: Texture2D, - center: Vector2, - points: *mut Vector2, - texcoords: *mut Vector2, - pointsCount: ::std::os::raw::c_int, - tint: Color, - ); -} -extern "C" { - pub fn Fade(color: Color, alpha: f32) -> Color; -} -extern "C" { - pub fn ColorToInt(color: Color) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ColorNormalize(color: Color) -> Vector4; -} -extern "C" { - pub fn ColorFromNormalized(normalized: Vector4) -> Color; -} -extern "C" { - pub fn ColorToHSV(color: Color) -> Vector3; -} -extern "C" { - pub fn ColorFromHSV(hue: f32, saturation: f32, value: f32) -> Color; -} -extern "C" { - pub fn ColorAlpha(color: Color, alpha: f32) -> Color; -} -extern "C" { - pub fn ColorAlphaBlend(dst: Color, src: Color, tint: Color) -> Color; -} -extern "C" { - pub fn GetColor(hexValue: ::std::os::raw::c_int) -> Color; -} -extern "C" { - pub fn GetPixelColor( - srcPtr: *mut ::std::os::raw::c_void, - format: ::std::os::raw::c_int, - ) -> Color; -} -extern "C" { - pub fn SetPixelColor( - dstPtr: *mut ::std::os::raw::c_void, - color: Color, - format: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GetPixelDataSize( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetFontDefault() -> Font; -} -extern "C" { - pub fn LoadFont(fileName: *const ::std::os::raw::c_char) -> Font; -} -extern "C" { - pub fn LoadFontEx( - fileName: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - ) -> Font; -} -extern "C" { - pub fn LoadFontFromImage(image: Image, key: Color, firstChar: ::std::os::raw::c_int) -> Font; -} -extern "C" { - pub fn LoadFontFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - ) -> Font; -} -extern "C" { - pub fn LoadFontData( - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - type_: ::std::os::raw::c_int, - ) -> *mut CharInfo; -} -extern "C" { - pub fn GenImageFontAtlas( - chars: *const CharInfo, - recs: *mut *mut Rectangle, - charsCount: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - padding: ::std::os::raw::c_int, - packMethod: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn UnloadFontData(chars: *mut CharInfo, charsCount: ::std::os::raw::c_int); -} -extern "C" { - pub fn UnloadFont(font: Font); -} -extern "C" { - pub fn DrawFPS(posX: ::std::os::raw::c_int, posY: ::std::os::raw::c_int); -} -extern "C" { - pub fn DrawText( - text: *const ::std::os::raw::c_char, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - position: Vector2, - fontSize: f32, - spacing: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextRec( - font: Font, - text: *const ::std::os::raw::c_char, - rec: Rectangle, - fontSize: f32, - spacing: f32, - wordWrap: bool, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextRecEx( - font: Font, - text: *const ::std::os::raw::c_char, - rec: Rectangle, - fontSize: f32, - spacing: f32, - wordWrap: bool, - tint: Color, - selectStart: ::std::os::raw::c_int, - selectLength: ::std::os::raw::c_int, - selectTint: Color, - selectBackTint: Color, - ); -} -extern "C" { - pub fn DrawTextCodepoint( - font: Font, - codepoint: ::std::os::raw::c_int, - position: Vector2, - fontSize: f32, - tint: Color, - ); -} -extern "C" { - pub fn MeasureText( - text: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn MeasureTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - fontSize: f32, - spacing: f32, - ) -> Vector2; -} -extern "C" { - pub fn GetGlyphIndex(font: Font, codepoint: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextCopy( - dst: *mut ::std::os::raw::c_char, - src: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextIsEqual( - text1: *const ::std::os::raw::c_char, - text2: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn TextLength(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn TextFormat(text: *const ::std::os::raw::c_char, ...) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextSubtext( - text: *const ::std::os::raw::c_char, - position: ::std::os::raw::c_int, - length: ::std::os::raw::c_int, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextReplace( - text: *mut ::std::os::raw::c_char, - replace: *const ::std::os::raw::c_char, - by: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn TextInsert( - text: *const ::std::os::raw::c_char, - insert: *const ::std::os::raw::c_char, - position: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn TextJoin( - textList: *mut *const ::std::os::raw::c_char, - count: ::std::os::raw::c_int, - delimiter: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextSplit( - text: *const ::std::os::raw::c_char, - delimiter: ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextAppend( - text: *mut ::std::os::raw::c_char, - append: *const ::std::os::raw::c_char, - position: *mut ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn TextFindIndex( - text: *const ::std::os::raw::c_char, - find: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextToUpper(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToLower(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToPascal(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToInteger(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextToUtf8( - codepoints: *mut ::std::os::raw::c_int, - length: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn GetCodepoints( - text: *const ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCodepointsCount(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetNextCodepoint( - text: *const ::std::os::raw::c_char, - bytesProcessed: *mut ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn CodepointToUtf8( - codepoint: ::std::os::raw::c_int, - byteLength: *mut ::std::os::raw::c_int, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn DrawLine3D(startPos: Vector3, endPos: Vector3, color: Color); -} -extern "C" { - pub fn DrawPoint3D(position: Vector3, color: Color); -} -extern "C" { - pub fn DrawCircle3D( - center: Vector3, - radius: f32, - rotationAxis: Vector3, - rotationAngle: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawTriangle3D(v1: Vector3, v2: Vector3, v3: Vector3, color: Color); -} -extern "C" { - pub fn DrawTriangleStrip3D( - points: *mut Vector3, - pointsCount: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCube(position: Vector3, width: f32, height: f32, length: f32, color: Color); -} -extern "C" { - pub fn DrawCubeV(position: Vector3, size: Vector3, color: Color); -} -extern "C" { - pub fn DrawCubeWires(position: Vector3, width: f32, height: f32, length: f32, color: Color); -} -extern "C" { - pub fn DrawCubeWiresV(position: Vector3, size: Vector3, color: Color); -} -extern "C" { - pub fn DrawCubeTexture( - texture: Texture2D, - position: Vector3, - width: f32, - height: f32, - length: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawSphere(centerPos: Vector3, radius: f32, color: Color); -} -extern "C" { - pub fn DrawSphereEx( - centerPos: Vector3, - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawSphereWires( - centerPos: Vector3, - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCylinder( - position: Vector3, - radiusTop: f32, - radiusBottom: f32, - height: f32, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCylinderWires( - position: Vector3, - radiusTop: f32, - radiusBottom: f32, - height: f32, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawPlane(centerPos: Vector3, size: Vector2, color: Color); -} -extern "C" { - pub fn DrawRay(ray: Ray, color: Color); -} -extern "C" { - pub fn DrawGrid(slices: ::std::os::raw::c_int, spacing: f32); -} -extern "C" { - pub fn LoadModel(fileName: *const ::std::os::raw::c_char) -> Model; -} -extern "C" { - pub fn LoadModelFromMesh(mesh: Mesh) -> Model; -} -extern "C" { - pub fn UnloadModel(model: Model); -} -extern "C" { - pub fn UnloadModelKeepMeshes(model: Model); -} -extern "C" { - pub fn UploadMesh(mesh: *mut Mesh, dynamic: bool); -} -extern "C" { - pub fn UpdateMeshBuffer( - mesh: Mesh, - index: ::std::os::raw::c_int, - data: *mut ::std::os::raw::c_void, - dataSize: ::std::os::raw::c_int, - offset: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn DrawMesh(mesh: Mesh, material: Material, transform: Matrix); -} -extern "C" { - pub fn DrawMeshInstanced( - mesh: Mesh, - material: Material, - transforms: *mut Matrix, - instances: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn UnloadMesh(mesh: Mesh); -} -extern "C" { - pub fn ExportMesh(mesh: Mesh, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn LoadMaterials( - fileName: *const ::std::os::raw::c_char, - materialCount: *mut ::std::os::raw::c_int, - ) -> *mut Material; -} -extern "C" { - pub fn LoadMaterialDefault() -> Material; -} -extern "C" { - pub fn UnloadMaterial(material: Material); -} -extern "C" { - pub fn SetMaterialTexture( - material: *mut Material, - mapType: ::std::os::raw::c_int, - texture: Texture2D, - ); -} -extern "C" { - pub fn SetModelMeshMaterial( - model: *mut Model, - meshId: ::std::os::raw::c_int, - materialId: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn LoadModelAnimations( - fileName: *const ::std::os::raw::c_char, - animsCount: *mut ::std::os::raw::c_int, - ) -> *mut ModelAnimation; -} -extern "C" { - pub fn UpdateModelAnimation(model: Model, anim: ModelAnimation, frame: ::std::os::raw::c_int); -} -extern "C" { - pub fn UnloadModelAnimation(anim: ModelAnimation); -} -extern "C" { - pub fn UnloadModelAnimations(animations: *mut ModelAnimation, count: ::std::os::raw::c_uint); -} -extern "C" { - pub fn IsModelAnimationValid(model: Model, anim: ModelAnimation) -> bool; -} -extern "C" { - pub fn GenMeshPoly(sides: ::std::os::raw::c_int, radius: f32) -> Mesh; -} -extern "C" { - pub fn GenMeshPlane( - width: f32, - length: f32, - resX: ::std::os::raw::c_int, - resZ: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshCube(width: f32, height: f32, length: f32) -> Mesh; -} -extern "C" { - pub fn GenMeshSphere( - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshHemiSphere( - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshCylinder(radius: f32, height: f32, slices: ::std::os::raw::c_int) -> Mesh; -} -extern "C" { - pub fn GenMeshTorus( - radius: f32, - size: f32, - radSeg: ::std::os::raw::c_int, - sides: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshKnot( - radius: f32, - size: f32, - radSeg: ::std::os::raw::c_int, - sides: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshHeightmap(heightmap: Image, size: Vector3) -> Mesh; -} -extern "C" { - pub fn GenMeshCubicmap(cubicmap: Image, cubeSize: Vector3) -> Mesh; -} -extern "C" { - pub fn MeshBoundingBox(mesh: Mesh) -> BoundingBox; -} -extern "C" { - pub fn MeshTangents(mesh: *mut Mesh); -} -extern "C" { - pub fn MeshBinormals(mesh: *mut Mesh); -} -extern "C" { - pub fn DrawModel(model: Model, position: Vector3, scale: f32, tint: Color); -} -extern "C" { - pub fn DrawModelEx( - model: Model, - position: Vector3, - rotationAxis: Vector3, - rotationAngle: f32, - scale: Vector3, - tint: Color, - ); -} -extern "C" { - pub fn DrawModelWires(model: Model, position: Vector3, scale: f32, tint: Color); -} -extern "C" { - pub fn DrawModelWiresEx( - model: Model, - position: Vector3, - rotationAxis: Vector3, - rotationAngle: f32, - scale: Vector3, - tint: Color, - ); -} -extern "C" { - pub fn DrawBoundingBox(box_: BoundingBox, color: Color); -} -extern "C" { - pub fn DrawBillboard( - camera: Camera, - texture: Texture2D, - center: Vector3, - size: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawBillboardRec( - camera: Camera, - texture: Texture2D, - source: Rectangle, - center: Vector3, - size: f32, - tint: Color, - ); -} -extern "C" { - pub fn CheckCollisionSpheres( - center1: Vector3, - radius1: f32, - center2: Vector3, - radius2: f32, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionBoxes(box1: BoundingBox, box2: BoundingBox) -> bool; -} -extern "C" { - pub fn CheckCollisionBoxSphere(box_: BoundingBox, center: Vector3, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionRaySphere(ray: Ray, center: Vector3, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionRaySphereEx( - ray: Ray, - center: Vector3, - radius: f32, - collisionPoint: *mut Vector3, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionRayBox(ray: Ray, box_: BoundingBox) -> bool; -} -extern "C" { - pub fn GetCollisionRayMesh(ray: Ray, mesh: Mesh, transform: Matrix) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayModel(ray: Ray, model: Model) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayTriangle(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayGround(ray: Ray, groundHeight: f32) -> RayHitInfo; -} -extern "C" { - pub fn InitAudioDevice(); -} -extern "C" { - pub fn CloseAudioDevice(); -} -extern "C" { - pub fn IsAudioDeviceReady() -> bool; -} -extern "C" { - pub fn SetMasterVolume(volume: f32); -} -extern "C" { - pub fn LoadWave(fileName: *const ::std::os::raw::c_char) -> Wave; -} -extern "C" { - pub fn LoadWaveFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Wave; -} -extern "C" { - pub fn LoadSound(fileName: *const ::std::os::raw::c_char) -> Sound; -} -extern "C" { - pub fn LoadSoundFromWave(wave: Wave) -> Sound; -} -extern "C" { - pub fn UpdateSound( - sound: Sound, - data: *const ::std::os::raw::c_void, - samplesCount: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn UnloadWave(wave: Wave); -} -extern "C" { - pub fn UnloadSound(sound: Sound); -} -extern "C" { - pub fn ExportWave(wave: Wave, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn ExportWaveAsCode(wave: Wave, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn PlaySound(sound: Sound); -} -extern "C" { - pub fn StopSound(sound: Sound); -} -extern "C" { - pub fn PauseSound(sound: Sound); -} -extern "C" { - pub fn ResumeSound(sound: Sound); -} -extern "C" { - pub fn PlaySoundMulti(sound: Sound); -} -extern "C" { - pub fn StopSoundMulti(); -} -extern "C" { - pub fn GetSoundsPlaying() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsSoundPlaying(sound: Sound) -> bool; -} -extern "C" { - pub fn SetSoundVolume(sound: Sound, volume: f32); -} -extern "C" { - pub fn SetSoundPitch(sound: Sound, pitch: f32); -} -extern "C" { - pub fn WaveFormat( - wave: *mut Wave, - sampleRate: ::std::os::raw::c_int, - sampleSize: ::std::os::raw::c_int, - channels: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn WaveCopy(wave: Wave) -> Wave; -} -extern "C" { - pub fn WaveCrop( - wave: *mut Wave, - initSample: ::std::os::raw::c_int, - finalSample: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn LoadWaveSamples(wave: Wave) -> *mut f32; -} -extern "C" { - pub fn UnloadWaveSamples(samples: *mut f32); -} -extern "C" { - pub fn LoadMusicStream(fileName: *const ::std::os::raw::c_char) -> Music; -} -extern "C" { - pub fn LoadMusicStreamFromMemory( - fileType: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Music; -} -extern "C" { - pub fn UnloadMusicStream(music: Music); -} -extern "C" { - pub fn PlayMusicStream(music: Music); -} -extern "C" { - pub fn IsMusicPlaying(music: Music) -> bool; -} -extern "C" { - pub fn UpdateMusicStream(music: Music); -} -extern "C" { - pub fn StopMusicStream(music: Music); -} -extern "C" { - pub fn PauseMusicStream(music: Music); -} -extern "C" { - pub fn ResumeMusicStream(music: Music); -} -extern "C" { - pub fn SetMusicVolume(music: Music, volume: f32); -} -extern "C" { - pub fn SetMusicPitch(music: Music, pitch: f32); -} -extern "C" { - pub fn GetMusicTimeLength(music: Music) -> f32; -} -extern "C" { - pub fn GetMusicTimePlayed(music: Music) -> f32; -} -extern "C" { - pub fn InitAudioStream( - sampleRate: ::std::os::raw::c_uint, - sampleSize: ::std::os::raw::c_uint, - channels: ::std::os::raw::c_uint, - ) -> AudioStream; -} -extern "C" { - pub fn UpdateAudioStream( - stream: AudioStream, - data: *const ::std::os::raw::c_void, - samplesCount: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn CloseAudioStream(stream: AudioStream); -} -extern "C" { - pub fn IsAudioStreamProcessed(stream: AudioStream) -> bool; -} -extern "C" { - pub fn PlayAudioStream(stream: AudioStream); -} -extern "C" { - pub fn PauseAudioStream(stream: AudioStream); -} -extern "C" { - pub fn ResumeAudioStream(stream: AudioStream); -} -extern "C" { - pub fn IsAudioStreamPlaying(stream: AudioStream) -> bool; -} -extern "C" { - pub fn StopAudioStream(stream: AudioStream); -} -extern "C" { - pub fn SetAudioStreamVolume(stream: AudioStream, volume: f32); -} -extern "C" { - pub fn SetAudioStreamPitch(stream: AudioStream, pitch: f32); -} -extern "C" { - pub fn SetAudioStreamBufferSizeDefault(size: ::std::os::raw::c_int); -} -pub type size_t = ::std::os::raw::c_ulong; -pub type wchar_t = ::std::os::raw::c_int; -pub type _Float32 = f32; -pub type _Float64 = f64; -pub type _Float32x = f64; -pub type _Float64x = u128; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct div_t { - pub quot: ::std::os::raw::c_int, - pub rem: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_div_t() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(div_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(div_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(div_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(div_t), - "::", - stringify!(rem) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct ldiv_t { - pub quot: ::std::os::raw::c_long, - pub rem: ::std::os::raw::c_long, -} -#[test] -fn bindgen_test_layout_ldiv_t() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(ldiv_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(ldiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(ldiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(ldiv_t), - "::", - stringify!(rem) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct lldiv_t { - pub quot: ::std::os::raw::c_longlong, - pub rem: ::std::os::raw::c_longlong, -} -#[test] -fn bindgen_test_layout_lldiv_t() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(lldiv_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(lldiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(lldiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(lldiv_t), - "::", - stringify!(rem) - ) - ); -} -extern "C" { - pub fn __ctype_get_mb_cur_max() -> size_t; -} -extern "C" { - pub fn atof(__nptr: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn atoi(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn atol(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn atoll(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn strtod( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - ) -> f64; -} -extern "C" { - pub fn strtof( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - ) -> f32; -} -extern "C" { - pub fn strtold( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - ) -> u128; -} -extern "C" { - pub fn strtol( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn strtoul( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strtoll( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn strtoull( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn rand() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn srand(__seed: ::std::os::raw::c_uint); -} -extern "C" { - pub fn malloc(__size: ::std::os::raw::c_ulong) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn calloc( - __nmemb: ::std::os::raw::c_ulong, - __size: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn realloc( - __ptr: *mut ::std::os::raw::c_void, - __size: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn free(__ptr: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn aligned_alloc(__alignment: size_t, __size: size_t) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn abort(); -} -extern "C" { - pub fn atexit(__func: ::std::option::Option) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn at_quick_exit( - __func: ::std::option::Option, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn exit(__status: ::std::os::raw::c_int); -} -extern "C" { - pub fn quick_exit(__status: ::std::os::raw::c_int); -} -extern "C" { - pub fn _Exit(__status: ::std::os::raw::c_int); -} -extern "C" { - pub fn getenv(__name: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn system(__command: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -pub type __compar_fn_t = ::std::option::Option< - unsafe extern "C" fn( - arg1: *const ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, ->; -extern "C" { - pub fn bsearch( - __key: *const ::std::os::raw::c_void, - __base: *const ::std::os::raw::c_void, - __nmemb: size_t, - __size: size_t, - __compar: __compar_fn_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn qsort( - __base: *mut ::std::os::raw::c_void, - __nmemb: size_t, - __size: size_t, - __compar: __compar_fn_t, - ); -} -extern "C" { - pub fn abs(__x: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn labs(__x: ::std::os::raw::c_long) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llabs(__x: ::std::os::raw::c_longlong) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn div(__numer: ::std::os::raw::c_int, __denom: ::std::os::raw::c_int) -> div_t; -} -extern "C" { - pub fn ldiv(__numer: ::std::os::raw::c_long, __denom: ::std::os::raw::c_long) -> ldiv_t; -} -extern "C" { - pub fn lldiv( - __numer: ::std::os::raw::c_longlong, - __denom: ::std::os::raw::c_longlong, - ) -> lldiv_t; -} -extern "C" { - pub fn mblen(__s: *const ::std::os::raw::c_char, __n: size_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mbtowc( - __pwc: *mut wchar_t, - __s: *const ::std::os::raw::c_char, - __n: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wctomb(__s: *mut ::std::os::raw::c_char, __wchar: wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mbstowcs( - __pwcs: *mut wchar_t, - __s: *const ::std::os::raw::c_char, - __n: size_t, - ) -> size_t; -} -extern "C" { - pub fn wcstombs( - __s: *mut ::std::os::raw::c_char, - __pwcs: *const wchar_t, - __n: size_t, - ) -> size_t; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct GuiStyleProp { - pub controlId: ::std::os::raw::c_ushort, - pub propertyId: ::std::os::raw::c_ushort, - pub propertyValue: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_GuiStyleProp() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(GuiStyleProp)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(GuiStyleProp)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).controlId as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(controlId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).propertyId as *const _ as usize }, - 2usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(propertyId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).propertyValue as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(propertyValue) - ) - ); -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiControlState { - GUI_STATE_NORMAL = 0, - GUI_STATE_FOCUSED = 1, - GUI_STATE_PRESSED = 2, - GUI_STATE_DISABLED = 3, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiTextAlignment { - GUI_TEXT_ALIGN_LEFT = 0, - GUI_TEXT_ALIGN_CENTER = 1, - GUI_TEXT_ALIGN_RIGHT = 2, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiControl { - DEFAULT = 0, - LABEL = 1, - BUTTON = 2, - TOGGLE = 3, - SLIDER = 4, - PROGRESSBAR = 5, - CHECKBOX = 6, - COMBOBOX = 7, - DROPDOWNBOX = 8, - TEXTBOX = 9, - VALUEBOX = 10, - SPINNER = 11, - LISTVIEW = 12, - COLORPICKER = 13, - SCROLLBAR = 14, - STATUSBAR = 15, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiControlProperty { - BORDER_COLOR_NORMAL = 0, - BASE_COLOR_NORMAL = 1, - TEXT_COLOR_NORMAL = 2, - BORDER_COLOR_FOCUSED = 3, - BASE_COLOR_FOCUSED = 4, - TEXT_COLOR_FOCUSED = 5, - BORDER_COLOR_PRESSED = 6, - BASE_COLOR_PRESSED = 7, - TEXT_COLOR_PRESSED = 8, - BORDER_COLOR_DISABLED = 9, - BASE_COLOR_DISABLED = 10, - TEXT_COLOR_DISABLED = 11, - BORDER_WIDTH = 12, - TEXT_PADDING = 13, - TEXT_ALIGNMENT = 14, - RESERVED = 15, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiDefaultProperty { - TEXT_SIZE = 16, - TEXT_SPACING = 17, - LINE_COLOR = 18, - BACKGROUND_COLOR = 19, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiToggleProperty { - GROUP_PADDING = 16, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiSliderProperty { - SLIDER_WIDTH = 16, - SLIDER_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiProgressBarProperty { - PROGRESS_PADDING = 16, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiCheckBoxProperty { - CHECK_PADDING = 16, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiComboBoxProperty { - COMBO_BUTTON_WIDTH = 16, - COMBO_BUTTON_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiDropdownBoxProperty { - ARROW_PADDING = 16, - DROPDOWN_ITEMS_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiTextBoxProperty { - TEXT_INNER_PADDING = 16, - TEXT_LINES_PADDING = 17, - COLOR_SELECTED_FG = 18, - COLOR_SELECTED_BG = 19, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiSpinnerProperty { - SPIN_BUTTON_WIDTH = 16, - SPIN_BUTTON_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiScrollBarProperty { - ARROWS_SIZE = 16, - ARROWS_VISIBLE = 17, - SCROLL_SLIDER_PADDING = 18, - SCROLL_SLIDER_SIZE = 19, - SCROLL_PADDING = 20, - SCROLL_SPEED = 21, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiScrollBarSide { - SCROLLBAR_LEFT_SIDE = 0, - SCROLLBAR_RIGHT_SIDE = 1, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiListViewProperty { - LIST_ITEMS_HEIGHT = 16, - LIST_ITEMS_PADDING = 17, - SCROLLBAR_WIDTH = 18, - SCROLLBAR_SIDE = 19, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiColorPickerProperty { - COLOR_SELECTOR_SIZE = 16, - HUEBAR_WIDTH = 17, - HUEBAR_PADDING = 18, - HUEBAR_SELECTOR_HEIGHT = 19, - HUEBAR_SELECTOR_OVERFLOW = 20, -} -extern "C" { - pub fn GuiEnable(); -} -extern "C" { - pub fn GuiDisable(); -} -extern "C" { - pub fn GuiLock(); -} -extern "C" { - pub fn GuiUnlock(); -} -extern "C" { - pub fn GuiFade(alpha: f32); -} -extern "C" { - pub fn GuiSetState(state: ::std::os::raw::c_int); -} -extern "C" { - pub fn GuiGetState() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiSetFont(font: Font); -} -extern "C" { - pub fn GuiGetFont() -> Font; -} -extern "C" { - pub fn GuiSetStyle( - control: ::std::os::raw::c_int, - property: ::std::os::raw::c_int, - value: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiGetStyle( - control: ::std::os::raw::c_int, - property: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiEnableTooltip(); -} -extern "C" { - pub fn GuiDisableTooltip(); -} -extern "C" { - pub fn GuiSetTooltip(tooltip: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiClearTooltip(); -} -extern "C" { - pub fn GuiWindowBox(bounds: Rectangle, title: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiGroupBox(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiLine(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiPanel(bounds: Rectangle); -} -extern "C" { - pub fn GuiScrollPanel(bounds: Rectangle, content: Rectangle, scroll: *mut Vector2) - -> Rectangle; -} -extern "C" { - pub fn GuiLabel(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiButton(bounds: Rectangle, text: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiLabelButton(bounds: Rectangle, text: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiImageButton( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - texture: Texture2D, - ) -> bool; -} -extern "C" { - pub fn GuiImageButtonEx( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - texture: Texture2D, - texSource: Rectangle, - ) -> bool; -} -extern "C" { - pub fn GuiToggle(bounds: Rectangle, text: *const ::std::os::raw::c_char, active: bool) -> bool; -} -extern "C" { - pub fn GuiToggleGroup( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiCheckBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - checked: bool, - ) -> bool; -} -extern "C" { - pub fn GuiComboBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiDropdownBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: *mut ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiSpinner( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - value: *mut ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiValueBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - value: *mut ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiTextBox( - bounds: Rectangle, - text: *mut ::std::os::raw::c_char, - textSize: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiTextBoxMulti( - bounds: Rectangle, - text: *mut ::std::os::raw::c_char, - textSize: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiSlider( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiSliderBar( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiProgressBar( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiStatusBar(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiDummyRec(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiScrollBar( - bounds: Rectangle, - value: ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiGrid(bounds: Rectangle, spacing: f32, subdivs: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn GuiListView( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - scrollIndex: *mut ::std::os::raw::c_int, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiListViewEx( - bounds: Rectangle, - text: *mut *const ::std::os::raw::c_char, - count: ::std::os::raw::c_int, - focus: *mut ::std::os::raw::c_int, - scrollIndex: *mut ::std::os::raw::c_int, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiMessageBox( - bounds: Rectangle, - title: *const ::std::os::raw::c_char, - message: *const ::std::os::raw::c_char, - buttons: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiTextInputBox( - bounds: Rectangle, - title: *const ::std::os::raw::c_char, - message: *const ::std::os::raw::c_char, - buttons: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiColorPicker(bounds: Rectangle, color: Color) -> Color; -} -extern "C" { - pub fn GuiColorPanel(bounds: Rectangle, color: Color) -> Color; -} -extern "C" { - pub fn GuiColorBarAlpha(bounds: Rectangle, alpha: f32) -> f32; -} -extern "C" { - pub fn GuiColorBarHue(bounds: Rectangle, value: f32) -> f32; -} -extern "C" { - pub fn GuiLoadStyle(fileName: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiLoadStyleDefault(); -} -extern "C" { - pub fn GuiIconText( - iconId: ::std::os::raw::c_int, - text: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GuiDrawIcon( - iconId: ::std::os::raw::c_int, - position: Vector2, - pixelSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn GuiGetIcons() -> *mut ::std::os::raw::c_uint; -} -extern "C" { - pub fn GuiGetIconData(iconId: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_uint; -} -extern "C" { - pub fn GuiSetIconData(iconId: ::std::os::raw::c_int, data: *mut ::std::os::raw::c_uint); -} -extern "C" { - pub fn GuiSetIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiClearIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiCheckIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ) -> bool; -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum guiIconName { - RICON_NONE = 0, - RICON_FOLDER_FILE_OPEN = 1, - RICON_FILE_SAVE_CLASSIC = 2, - RICON_FOLDER_OPEN = 3, - RICON_FOLDER_SAVE = 4, - RICON_FILE_OPEN = 5, - RICON_FILE_SAVE = 6, - RICON_FILE_EXPORT = 7, - RICON_FILE_NEW = 8, - RICON_FILE_DELETE = 9, - RICON_FILETYPE_TEXT = 10, - RICON_FILETYPE_AUDIO = 11, - RICON_FILETYPE_IMAGE = 12, - RICON_FILETYPE_PLAY = 13, - RICON_FILETYPE_VIDEO = 14, - RICON_FILETYPE_INFO = 15, - RICON_FILE_COPY = 16, - RICON_FILE_CUT = 17, - RICON_FILE_PASTE = 18, - RICON_CURSOR_HAND = 19, - RICON_CURSOR_POINTER = 20, - RICON_CURSOR_CLASSIC = 21, - RICON_PENCIL = 22, - RICON_PENCIL_BIG = 23, - RICON_BRUSH_CLASSIC = 24, - RICON_BRUSH_PAINTER = 25, - RICON_WATER_DROP = 26, - RICON_COLOR_PICKER = 27, - RICON_RUBBER = 28, - RICON_COLOR_BUCKET = 29, - RICON_TEXT_T = 30, - RICON_TEXT_A = 31, - RICON_SCALE = 32, - RICON_RESIZE = 33, - RICON_FILTER_POINT = 34, - RICON_FILTER_BILINEAR = 35, - RICON_CROP = 36, - RICON_CROP_ALPHA = 37, - RICON_SQUARE_TOGGLE = 38, - RICON_SYMMETRY = 39, - RICON_SYMMETRY_HORIZONTAL = 40, - RICON_SYMMETRY_VERTICAL = 41, - RICON_LENS = 42, - RICON_LENS_BIG = 43, - RICON_EYE_ON = 44, - RICON_EYE_OFF = 45, - RICON_FILTER_TOP = 46, - RICON_FILTER = 47, - RICON_TARGET_POINT = 48, - RICON_TARGET_SMALL = 49, - RICON_TARGET_BIG = 50, - RICON_TARGET_MOVE = 51, - RICON_CURSOR_MOVE = 52, - RICON_CURSOR_SCALE = 53, - RICON_CURSOR_SCALE_RIGHT = 54, - RICON_CURSOR_SCALE_LEFT = 55, - RICON_UNDO = 56, - RICON_REDO = 57, - RICON_REREDO = 58, - RICON_MUTATE = 59, - RICON_ROTATE = 60, - RICON_REPEAT = 61, - RICON_SHUFFLE = 62, - RICON_EMPTYBOX = 63, - RICON_TARGET = 64, - RICON_TARGET_SMALL_FILL = 65, - RICON_TARGET_BIG_FILL = 66, - RICON_TARGET_MOVE_FILL = 67, - RICON_CURSOR_MOVE_FILL = 68, - RICON_CURSOR_SCALE_FILL = 69, - RICON_CURSOR_SCALE_RIGHT_FILL = 70, - RICON_CURSOR_SCALE_LEFT_FILL = 71, - RICON_UNDO_FILL = 72, - RICON_REDO_FILL = 73, - RICON_REREDO_FILL = 74, - RICON_MUTATE_FILL = 75, - RICON_ROTATE_FILL = 76, - RICON_REPEAT_FILL = 77, - RICON_SHUFFLE_FILL = 78, - RICON_EMPTYBOX_SMALL = 79, - RICON_BOX = 80, - RICON_BOX_TOP = 81, - RICON_BOX_TOP_RIGHT = 82, - RICON_BOX_RIGHT = 83, - RICON_BOX_BOTTOM_RIGHT = 84, - RICON_BOX_BOTTOM = 85, - RICON_BOX_BOTTOM_LEFT = 86, - RICON_BOX_LEFT = 87, - RICON_BOX_TOP_LEFT = 88, - RICON_BOX_CENTER = 89, - RICON_BOX_CIRCLE_MASK = 90, - RICON_POT = 91, - RICON_ALPHA_MULTIPLY = 92, - RICON_ALPHA_CLEAR = 93, - RICON_DITHERING = 94, - RICON_MIPMAPS = 95, - RICON_BOX_GRID = 96, - RICON_GRID = 97, - RICON_BOX_CORNERS_SMALL = 98, - RICON_BOX_CORNERS_BIG = 99, - RICON_FOUR_BOXES = 100, - RICON_GRID_FILL = 101, - RICON_BOX_MULTISIZE = 102, - RICON_ZOOM_SMALL = 103, - RICON_ZOOM_MEDIUM = 104, - RICON_ZOOM_BIG = 105, - RICON_ZOOM_ALL = 106, - RICON_ZOOM_CENTER = 107, - RICON_BOX_DOTS_SMALL = 108, - RICON_BOX_DOTS_BIG = 109, - RICON_BOX_CONCENTRIC = 110, - RICON_BOX_GRID_BIG = 111, - RICON_OK_TICK = 112, - RICON_CROSS = 113, - RICON_ARROW_LEFT = 114, - RICON_ARROW_RIGHT = 115, - RICON_ARROW_BOTTOM = 116, - RICON_ARROW_TOP = 117, - RICON_ARROW_LEFT_FILL = 118, - RICON_ARROW_RIGHT_FILL = 119, - RICON_ARROW_BOTTOM_FILL = 120, - RICON_ARROW_TOP_FILL = 121, - RICON_AUDIO = 122, - RICON_FX = 123, - RICON_WAVE = 124, - RICON_WAVE_SINUS = 125, - RICON_WAVE_SQUARE = 126, - RICON_WAVE_TRIANGULAR = 127, - RICON_CROSS_SMALL = 128, - RICON_PLAYER_PREVIOUS = 129, - RICON_PLAYER_PLAY_BACK = 130, - RICON_PLAYER_PLAY = 131, - RICON_PLAYER_PAUSE = 132, - RICON_PLAYER_STOP = 133, - RICON_PLAYER_NEXT = 134, - RICON_PLAYER_RECORD = 135, - RICON_MAGNET = 136, - RICON_LOCK_CLOSE = 137, - RICON_LOCK_OPEN = 138, - RICON_CLOCK = 139, - RICON_TOOLS = 140, - RICON_GEAR = 141, - RICON_GEAR_BIG = 142, - RICON_BIN = 143, - RICON_HAND_POINTER = 144, - RICON_LASER = 145, - RICON_COIN = 146, - RICON_EXPLOSION = 147, - RICON_1UP = 148, - RICON_PLAYER = 149, - RICON_PLAYER_JUMP = 150, - RICON_KEY = 151, - RICON_DEMON = 152, - RICON_TEXT_POPUP = 153, - RICON_GEAR_EX = 154, - RICON_CRACK = 155, - RICON_CRACK_POINTS = 156, - RICON_STAR = 157, - RICON_DOOR = 158, - RICON_EXIT = 159, - RICON_MODE_2D = 160, - RICON_MODE_3D = 161, - RICON_CUBE = 162, - RICON_CUBE_FACE_TOP = 163, - RICON_CUBE_FACE_LEFT = 164, - RICON_CUBE_FACE_FRONT = 165, - RICON_CUBE_FACE_BOTTOM = 166, - RICON_CUBE_FACE_RIGHT = 167, - RICON_CUBE_FACE_BACK = 168, - RICON_CAMERA = 169, - RICON_SPECIAL = 170, - RICON_LINK_NET = 171, - RICON_LINK_BOXES = 172, - RICON_LINK_MULTI = 173, - RICON_LINK = 174, - RICON_LINK_BROKE = 175, - RICON_TEXT_NOTES = 176, - RICON_NOTEBOOK = 177, - RICON_SUITCASE = 178, - RICON_SUITCASE_ZIP = 179, - RICON_MAILBOX = 180, - RICON_MONITOR = 181, - RICON_PRINTER = 182, - RICON_PHOTO_CAMERA = 183, - RICON_PHOTO_CAMERA_FLASH = 184, - RICON_HOUSE = 185, - RICON_HEART = 186, - RICON_CORNER = 187, - RICON_VERTICAL_BARS = 188, - RICON_VERTICAL_BARS_FILL = 189, - RICON_LIFE_BARS = 190, - RICON_INFO = 191, - RICON_CROSSLINE = 192, - RICON_HELP = 193, - RICON_FILETYPE_ALPHA = 194, - RICON_FILETYPE_HOME = 195, - RICON_LAYERS_VISIBLE = 196, - RICON_LAYERS = 197, - RICON_WINDOW = 198, - RICON_HIDPI = 199, - RICON_200 = 200, - RICON_201 = 201, - RICON_202 = 202, - RICON_203 = 203, - RICON_204 = 204, - RICON_205 = 205, - RICON_206 = 206, - RICON_207 = 207, - RICON_208 = 208, - RICON_209 = 209, - RICON_210 = 210, - RICON_211 = 211, - RICON_212 = 212, - RICON_213 = 213, - RICON_214 = 214, - RICON_215 = 215, - RICON_216 = 216, - RICON_217 = 217, - RICON_218 = 218, - RICON_219 = 219, - RICON_220 = 220, - RICON_221 = 221, - RICON_222 = 222, - RICON_223 = 223, - RICON_224 = 224, - RICON_225 = 225, - RICON_226 = 226, - RICON_227 = 227, - RICON_228 = 228, - RICON_229 = 229, - RICON_230 = 230, - RICON_231 = 231, - RICON_232 = 232, - RICON_233 = 233, - RICON_234 = 234, - RICON_235 = 235, - RICON_236 = 236, - RICON_237 = 237, - RICON_238 = 238, - RICON_239 = 239, - RICON_240 = 240, - RICON_241 = 241, - RICON_242 = 242, - RICON_243 = 243, - RICON_244 = 244, - RICON_245 = 245, - RICON_246 = 246, - RICON_247 = 247, - RICON_248 = 248, - RICON_249 = 249, - RICON_250 = 250, - RICON_251 = 251, - RICON_252 = 252, - RICON_253 = 253, - RICON_254 = 254, - RICON_255 = 255, -} -extern "C" { - pub static mut guiIcons: [::std::os::raw::c_uint; 2048usize]; -} -pub type __u_char = ::std::os::raw::c_uchar; -pub type __u_short = ::std::os::raw::c_ushort; -pub type __u_int = ::std::os::raw::c_uint; -pub type __u_long = ::std::os::raw::c_ulong; -pub type __int8_t = ::std::os::raw::c_schar; -pub type __uint8_t = ::std::os::raw::c_uchar; -pub type __int16_t = ::std::os::raw::c_short; -pub type __uint16_t = ::std::os::raw::c_ushort; -pub type __int32_t = ::std::os::raw::c_int; -pub type __uint32_t = ::std::os::raw::c_uint; -pub type __int64_t = ::std::os::raw::c_long; -pub type __uint64_t = ::std::os::raw::c_ulong; -pub type __int_least8_t = __int8_t; -pub type __uint_least8_t = __uint8_t; -pub type __int_least16_t = __int16_t; -pub type __uint_least16_t = __uint16_t; -pub type __int_least32_t = __int32_t; -pub type __uint_least32_t = __uint32_t; -pub type __int_least64_t = __int64_t; -pub type __uint_least64_t = __uint64_t; -pub type __quad_t = ::std::os::raw::c_long; -pub type __u_quad_t = ::std::os::raw::c_ulong; -pub type __intmax_t = ::std::os::raw::c_long; -pub type __uintmax_t = ::std::os::raw::c_ulong; -pub type __dev_t = ::std::os::raw::c_ulong; -pub type __uid_t = ::std::os::raw::c_uint; -pub type __gid_t = ::std::os::raw::c_uint; -pub type __ino_t = ::std::os::raw::c_ulong; -pub type __ino64_t = ::std::os::raw::c_ulong; -pub type __mode_t = ::std::os::raw::c_uint; -pub type __nlink_t = ::std::os::raw::c_ulong; -pub type __off_t = ::std::os::raw::c_long; -pub type __off64_t = ::std::os::raw::c_long; -pub type __pid_t = ::std::os::raw::c_int; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __fsid_t { - pub __val: [::std::os::raw::c_int; 2usize], -} -#[test] -fn bindgen_test_layout___fsid_t() { - assert_eq!( - ::std::mem::size_of::<__fsid_t>(), - 8usize, - concat!("Size of: ", stringify!(__fsid_t)) - ); - assert_eq!( - ::std::mem::align_of::<__fsid_t>(), - 4usize, - concat!("Alignment of ", stringify!(__fsid_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__fsid_t>())).__val as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__fsid_t), - "::", - stringify!(__val) - ) - ); -} -pub type __clock_t = ::std::os::raw::c_long; -pub type __rlim_t = ::std::os::raw::c_ulong; -pub type __rlim64_t = ::std::os::raw::c_ulong; -pub type __id_t = ::std::os::raw::c_uint; -pub type __time_t = ::std::os::raw::c_long; -pub type __useconds_t = ::std::os::raw::c_uint; -pub type __suseconds_t = ::std::os::raw::c_long; -pub type __daddr_t = ::std::os::raw::c_int; -pub type __key_t = ::std::os::raw::c_int; -pub type __clockid_t = ::std::os::raw::c_int; -pub type __timer_t = *mut ::std::os::raw::c_void; -pub type __blksize_t = ::std::os::raw::c_long; -pub type __blkcnt_t = ::std::os::raw::c_long; -pub type __blkcnt64_t = ::std::os::raw::c_long; -pub type __fsblkcnt_t = ::std::os::raw::c_ulong; -pub type __fsblkcnt64_t = ::std::os::raw::c_ulong; -pub type __fsfilcnt_t = ::std::os::raw::c_ulong; -pub type __fsfilcnt64_t = ::std::os::raw::c_ulong; -pub type __fsword_t = ::std::os::raw::c_long; -pub type __ssize_t = ::std::os::raw::c_long; -pub type __syscall_slong_t = ::std::os::raw::c_long; -pub type __syscall_ulong_t = ::std::os::raw::c_ulong; -pub type __loff_t = __off64_t; -pub type __caddr_t = *mut ::std::os::raw::c_char; -pub type __intptr_t = ::std::os::raw::c_long; -pub type __socklen_t = ::std::os::raw::c_uint; -pub type __sig_atomic_t = ::std::os::raw::c_int; -#[repr(C)] -#[derive(Copy, Clone)] -pub struct __mbstate_t { - pub __count: ::std::os::raw::c_int, - pub __value: __mbstate_t__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union __mbstate_t__bindgen_ty_1 { - pub __wch: ::std::os::raw::c_uint, - pub __wchb: [::std::os::raw::c_char; 4usize], -} -#[test] -fn bindgen_test_layout___mbstate_t__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<__mbstate_t__bindgen_ty_1>(), - 4usize, - concat!("Size of: ", stringify!(__mbstate_t__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<__mbstate_t__bindgen_ty_1>(), - 4usize, - concat!("Alignment of ", stringify!(__mbstate_t__bindgen_ty_1)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__mbstate_t__bindgen_ty_1>())).__wch as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t__bindgen_ty_1), - "::", - stringify!(__wch) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__mbstate_t__bindgen_ty_1>())).__wchb as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t__bindgen_ty_1), - "::", - stringify!(__wchb) - ) - ); -} -#[test] -fn bindgen_test_layout___mbstate_t() { - assert_eq!( - ::std::mem::size_of::<__mbstate_t>(), - 8usize, - concat!("Size of: ", stringify!(__mbstate_t)) - ); - assert_eq!( - ::std::mem::align_of::<__mbstate_t>(), - 4usize, - concat!("Alignment of ", stringify!(__mbstate_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__mbstate_t>())).__count as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t), - "::", - stringify!(__count) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__mbstate_t>())).__value as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t), - "::", - stringify!(__value) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct _G_fpos_t { - pub __pos: __off_t, - pub __state: __mbstate_t, -} -#[test] -fn bindgen_test_layout__G_fpos_t() { - assert_eq!( - ::std::mem::size_of::<_G_fpos_t>(), - 16usize, - concat!("Size of: ", stringify!(_G_fpos_t)) - ); - assert_eq!( - ::std::mem::align_of::<_G_fpos_t>(), - 8usize, - concat!("Alignment of ", stringify!(_G_fpos_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_G_fpos_t>())).__pos as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_G_fpos_t), - "::", - stringify!(__pos) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_G_fpos_t>())).__state as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_G_fpos_t), - "::", - stringify!(__state) - ) - ); -} -pub type __fpos_t = _G_fpos_t; -#[repr(C)] -#[derive(Copy, Clone)] -pub struct _G_fpos64_t { - pub __pos: __off64_t, - pub __state: __mbstate_t, -} -#[test] -fn bindgen_test_layout__G_fpos64_t() { - assert_eq!( - ::std::mem::size_of::<_G_fpos64_t>(), - 16usize, - concat!("Size of: ", stringify!(_G_fpos64_t)) - ); - assert_eq!( - ::std::mem::align_of::<_G_fpos64_t>(), - 8usize, - concat!("Alignment of ", stringify!(_G_fpos64_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_G_fpos64_t>())).__pos as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_G_fpos64_t), - "::", - stringify!(__pos) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_G_fpos64_t>())).__state as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_G_fpos64_t), - "::", - stringify!(__state) - ) - ); -} -pub type __fpos64_t = _G_fpos64_t; -pub type __FILE = _IO_FILE; -pub type FILE = _IO_FILE; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _IO_marker { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _IO_codecvt { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _IO_wide_data { - _unused: [u8; 0], -} -pub type _IO_lock_t = ::std::os::raw::c_void; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _IO_FILE { - pub _flags: ::std::os::raw::c_int, - pub _IO_read_ptr: *mut ::std::os::raw::c_char, - pub _IO_read_end: *mut ::std::os::raw::c_char, - pub _IO_read_base: *mut ::std::os::raw::c_char, - pub _IO_write_base: *mut ::std::os::raw::c_char, - pub _IO_write_ptr: *mut ::std::os::raw::c_char, - pub _IO_write_end: *mut ::std::os::raw::c_char, - pub _IO_buf_base: *mut ::std::os::raw::c_char, - pub _IO_buf_end: *mut ::std::os::raw::c_char, - pub _IO_save_base: *mut ::std::os::raw::c_char, - pub _IO_backup_base: *mut ::std::os::raw::c_char, - pub _IO_save_end: *mut ::std::os::raw::c_char, - pub _markers: *mut _IO_marker, - pub _chain: *mut _IO_FILE, - pub _fileno: ::std::os::raw::c_int, - pub _flags2: ::std::os::raw::c_int, - pub _old_offset: __off_t, - pub _cur_column: ::std::os::raw::c_ushort, - pub _vtable_offset: ::std::os::raw::c_schar, - pub _shortbuf: [::std::os::raw::c_char; 1usize], - pub _lock: *mut _IO_lock_t, - pub _offset: __off64_t, - pub _codecvt: *mut _IO_codecvt, - pub _wide_data: *mut _IO_wide_data, - pub _freeres_list: *mut _IO_FILE, - pub _freeres_buf: *mut ::std::os::raw::c_void, - pub __pad5: size_t, - pub _mode: ::std::os::raw::c_int, - pub _unused2: [::std::os::raw::c_char; 20usize], -} -#[test] -fn bindgen_test_layout__IO_FILE() { - assert_eq!( - ::std::mem::size_of::<_IO_FILE>(), - 216usize, - concat!("Size of: ", stringify!(_IO_FILE)) - ); - assert_eq!( - ::std::mem::align_of::<_IO_FILE>(), - 8usize, - concat!("Alignment of ", stringify!(_IO_FILE)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._flags as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_read_ptr as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_read_ptr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_read_end as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_read_end) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_read_base as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_read_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_write_base as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_write_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_write_ptr as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_write_ptr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_write_end as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_write_end) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_buf_base as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_buf_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_buf_end as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_buf_end) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_save_base as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_save_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_backup_base as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_backup_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_save_end as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_save_end) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._markers as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_markers) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._chain as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_chain) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._fileno as *const _ as usize }, - 112usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_fileno) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._flags2 as *const _ as usize }, - 116usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_flags2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._old_offset as *const _ as usize }, - 120usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_old_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._cur_column as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_cur_column) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._vtable_offset as *const _ as usize }, - 130usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_vtable_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._shortbuf as *const _ as usize }, - 131usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_shortbuf) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._lock as *const _ as usize }, - 136usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_lock) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._offset as *const _ as usize }, - 144usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._codecvt as *const _ as usize }, - 152usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_codecvt) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._wide_data as *const _ as usize }, - 160usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_wide_data) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._freeres_list as *const _ as usize }, - 168usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_freeres_list) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._freeres_buf as *const _ as usize }, - 176usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_freeres_buf) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>())).__pad5 as *const _ as usize }, - 184usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(__pad5) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._mode as *const _ as usize }, - 192usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_mode) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._unused2 as *const _ as usize }, - 196usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_unused2) - ) - ); -} -pub type fpos_t = __fpos_t; -extern "C" { - pub static mut stdin: *mut FILE; -} -extern "C" { - pub static mut stdout: *mut FILE; -} -extern "C" { - pub static mut stderr: *mut FILE; -} -extern "C" { - pub fn remove(__filename: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rename( - __old: *const ::std::os::raw::c_char, - __new: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn tmpfile() -> *mut FILE; -} -extern "C" { - pub fn tmpnam(__s: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fclose(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fflush(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fopen( - __filename: *const ::std::os::raw::c_char, - __modes: *const ::std::os::raw::c_char, - ) -> *mut FILE; -} -extern "C" { - pub fn freopen( - __filename: *const ::std::os::raw::c_char, - __modes: *const ::std::os::raw::c_char, - __stream: *mut FILE, - ) -> *mut FILE; -} -extern "C" { - pub fn setbuf(__stream: *mut FILE, __buf: *mut ::std::os::raw::c_char); -} -extern "C" { - pub fn setvbuf( - __stream: *mut FILE, - __buf: *mut ::std::os::raw::c_char, - __modes: ::std::os::raw::c_int, - __n: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fprintf( - __stream: *mut FILE, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn printf(__format: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn sprintf( - __s: *mut ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vfprintf( - __s: *mut FILE, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vprintf( - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vsprintf( - __s: *mut ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn snprintf( - __s: *mut ::std::os::raw::c_char, - __maxlen: ::std::os::raw::c_ulong, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vsnprintf( - __s: *mut ::std::os::raw::c_char, - __maxlen: ::std::os::raw::c_ulong, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fscanf( - __stream: *mut FILE, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn scanf(__format: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn sscanf( - __s: *const ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_fscanf"] - pub fn fscanf1( - __stream: *mut FILE, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_scanf"] - pub fn scanf1(__format: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_sscanf"] - pub fn sscanf1( - __s: *const ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vfscanf( - __s: *mut FILE, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vscanf( - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vsscanf( - __s: *const ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_vfscanf"] - pub fn vfscanf1( - __s: *mut FILE, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_vscanf"] - pub fn vscanf1( - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_vsscanf"] - pub fn vsscanf1( - __s: *const ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgetc(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getc(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getchar() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fputc(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putc(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putchar(__c: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgets( - __s: *mut ::std::os::raw::c_char, - __n: ::std::os::raw::c_int, - __stream: *mut FILE, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fputs(__s: *const ::std::os::raw::c_char, __stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn puts(__s: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ungetc(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fread( - __ptr: *mut ::std::os::raw::c_void, - __size: ::std::os::raw::c_ulong, - __n: ::std::os::raw::c_ulong, - __stream: *mut FILE, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn fwrite( - __ptr: *const ::std::os::raw::c_void, - __size: ::std::os::raw::c_ulong, - __n: ::std::os::raw::c_ulong, - __s: *mut FILE, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn fseek( - __stream: *mut FILE, - __off: ::std::os::raw::c_long, - __whence: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ftell(__stream: *mut FILE) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn rewind(__stream: *mut FILE); -} -extern "C" { - pub fn fgetpos(__stream: *mut FILE, __pos: *mut fpos_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fsetpos(__stream: *mut FILE, __pos: *const fpos_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn clearerr(__stream: *mut FILE); -} -extern "C" { - pub fn feof(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ferror(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn perror(__s: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn __uflow(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __overflow(arg1: *mut FILE, arg2: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn memcpy( - __dest: *mut ::std::os::raw::c_void, - __src: *const ::std::os::raw::c_void, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memmove( - __dest: *mut ::std::os::raw::c_void, - __src: *const ::std::os::raw::c_void, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memset( - __s: *mut ::std::os::raw::c_void, - __c: ::std::os::raw::c_int, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memcmp( - __s1: *const ::std::os::raw::c_void, - __s2: *const ::std::os::raw::c_void, - __n: ::std::os::raw::c_ulong, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn memchr( - __s: *const ::std::os::raw::c_void, - __c: ::std::os::raw::c_int, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn strcpy( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strncpy( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcat( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strncat( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcmp( - __s1: *const ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strncmp( - __s1: *const ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strcoll( - __s1: *const ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strxfrm( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strchr( - __s: *const ::std::os::raw::c_char, - __c: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strrchr( - __s: *const ::std::os::raw::c_char, - __c: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcspn( - __s: *const ::std::os::raw::c_char, - __reject: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strspn( - __s: *const ::std::os::raw::c_char, - __accept: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strpbrk( - __s: *const ::std::os::raw::c_char, - __accept: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strstr( - __haystack: *const ::std::os::raw::c_char, - __needle: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strtok( - __s: *mut ::std::os::raw::c_char, - __delim: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn __strtok_r( - __s: *mut ::std::os::raw::c_char, - __delim: *const ::std::os::raw::c_char, - __save_ptr: *mut *mut ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strlen(__s: *const ::std::os::raw::c_char) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strerror(__errnum: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char; -} -pub type float_t = f32; -pub type double_t = f64; -extern "C" { - pub fn __fpclassify(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __signbit(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isinf(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __finite(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isnan(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __iseqsig(__x: f64, __y: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __issignaling(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn acos(__x: f64) -> f64; -} -extern "C" { - pub fn __acos(__x: f64) -> f64; -} -extern "C" { - pub fn asin(__x: f64) -> f64; -} -extern "C" { - pub fn __asin(__x: f64) -> f64; -} -extern "C" { - pub fn atan(__x: f64) -> f64; -} -extern "C" { - pub fn __atan(__x: f64) -> f64; -} -extern "C" { - pub fn atan2(__y: f64, __x: f64) -> f64; -} -extern "C" { - pub fn __atan2(__y: f64, __x: f64) -> f64; -} -extern "C" { - pub fn cos(__x: f64) -> f64; -} -extern "C" { - pub fn __cos(__x: f64) -> f64; -} -extern "C" { - pub fn sin(__x: f64) -> f64; -} -extern "C" { - pub fn __sin(__x: f64) -> f64; -} -extern "C" { - pub fn tan(__x: f64) -> f64; -} -extern "C" { - pub fn __tan(__x: f64) -> f64; -} -extern "C" { - pub fn cosh(__x: f64) -> f64; -} -extern "C" { - pub fn __cosh(__x: f64) -> f64; -} -extern "C" { - pub fn sinh(__x: f64) -> f64; -} -extern "C" { - pub fn __sinh(__x: f64) -> f64; -} -extern "C" { - pub fn tanh(__x: f64) -> f64; -} -extern "C" { - pub fn __tanh(__x: f64) -> f64; -} -extern "C" { - pub fn acosh(__x: f64) -> f64; -} -extern "C" { - pub fn __acosh(__x: f64) -> f64; -} -extern "C" { - pub fn asinh(__x: f64) -> f64; -} -extern "C" { - pub fn __asinh(__x: f64) -> f64; -} -extern "C" { - pub fn atanh(__x: f64) -> f64; -} -extern "C" { - pub fn __atanh(__x: f64) -> f64; -} -extern "C" { - pub fn exp(__x: f64) -> f64; -} -extern "C" { - pub fn __exp(__x: f64) -> f64; -} -extern "C" { - pub fn frexp(__x: f64, __exponent: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn __frexp(__x: f64, __exponent: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn ldexp(__x: f64, __exponent: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn __ldexp(__x: f64, __exponent: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn log(__x: f64) -> f64; -} -extern "C" { - pub fn __log(__x: f64) -> f64; -} -extern "C" { - pub fn log10(__x: f64) -> f64; -} -extern "C" { - pub fn __log10(__x: f64) -> f64; -} -extern "C" { - pub fn modf(__x: f64, __iptr: *mut f64) -> f64; -} -extern "C" { - pub fn __modf(__x: f64, __iptr: *mut f64) -> f64; -} -extern "C" { - pub fn expm1(__x: f64) -> f64; -} -extern "C" { - pub fn __expm1(__x: f64) -> f64; -} -extern "C" { - pub fn log1p(__x: f64) -> f64; -} -extern "C" { - pub fn __log1p(__x: f64) -> f64; -} -extern "C" { - pub fn logb(__x: f64) -> f64; -} -extern "C" { - pub fn __logb(__x: f64) -> f64; -} -extern "C" { - pub fn exp2(__x: f64) -> f64; -} -extern "C" { - pub fn __exp2(__x: f64) -> f64; -} -extern "C" { - pub fn log2(__x: f64) -> f64; -} -extern "C" { - pub fn __log2(__x: f64) -> f64; -} -extern "C" { - pub fn pow(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __pow(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn sqrt(__x: f64) -> f64; -} -extern "C" { - pub fn __sqrt(__x: f64) -> f64; -} -extern "C" { - pub fn hypot(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __hypot(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn cbrt(__x: f64) -> f64; -} -extern "C" { - pub fn __cbrt(__x: f64) -> f64; -} -extern "C" { - pub fn ceil(__x: f64) -> f64; -} -extern "C" { - pub fn __ceil(__x: f64) -> f64; -} -extern "C" { - pub fn fabs(__x: f64) -> f64; -} -extern "C" { - pub fn __fabs(__x: f64) -> f64; -} -extern "C" { - pub fn floor(__x: f64) -> f64; -} -extern "C" { - pub fn __floor(__x: f64) -> f64; -} -extern "C" { - pub fn fmod(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __fmod(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn copysign(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __copysign(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn nan(__tagb: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn __nan(__tagb: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn erf(arg1: f64) -> f64; -} -extern "C" { - pub fn __erf(arg1: f64) -> f64; -} -extern "C" { - pub fn erfc(arg1: f64) -> f64; -} -extern "C" { - pub fn __erfc(arg1: f64) -> f64; -} -extern "C" { - pub fn lgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn __lgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn tgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn __tgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn rint(__x: f64) -> f64; -} -extern "C" { - pub fn __rint(__x: f64) -> f64; -} -extern "C" { - pub fn nextafter(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __nextafter(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn nexttoward(__x: f64, __y: u128) -> f64; -} -extern "C" { - pub fn __nexttoward(__x: f64, __y: u128) -> f64; -} -extern "C" { - pub fn remainder(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __remainder(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn scalbn(__x: f64, __n: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn __scalbn(__x: f64, __n: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn ilogb(__x: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __ilogb(__x: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn scalbln(__x: f64, __n: ::std::os::raw::c_long) -> f64; -} -extern "C" { - pub fn __scalbln(__x: f64, __n: ::std::os::raw::c_long) -> f64; -} -extern "C" { - pub fn nearbyint(__x: f64) -> f64; -} -extern "C" { - pub fn __nearbyint(__x: f64) -> f64; -} -extern "C" { - pub fn round(__x: f64) -> f64; -} -extern "C" { - pub fn __round(__x: f64) -> f64; -} -extern "C" { - pub fn trunc(__x: f64) -> f64; -} -extern "C" { - pub fn __trunc(__x: f64) -> f64; -} -extern "C" { - pub fn remquo(__x: f64, __y: f64, __quo: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn __remquo(__x: f64, __y: f64, __quo: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn lrint(__x: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lrint(__x: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llrint(__x: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llrint(__x: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn lround(__x: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lround(__x: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llround(__x: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llround(__x: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn fdim(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __fdim(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn fmax(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __fmax(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn fmin(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __fmin(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn fma(__x: f64, __y: f64, __z: f64) -> f64; -} -extern "C" { - pub fn __fma(__x: f64, __y: f64, __z: f64) -> f64; -} -extern "C" { - pub fn __fpclassifyf(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __signbitf(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isinff(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __finitef(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isnanf(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __iseqsigf(__x: f32, __y: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __issignalingf(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn acosf(__x: f32) -> f32; -} -extern "C" { - pub fn __acosf(__x: f32) -> f32; -} -extern "C" { - pub fn asinf(__x: f32) -> f32; -} -extern "C" { - pub fn __asinf(__x: f32) -> f32; -} -extern "C" { - pub fn atanf(__x: f32) -> f32; -} -extern "C" { - pub fn __atanf(__x: f32) -> f32; -} -extern "C" { - pub fn atan2f(__y: f32, __x: f32) -> f32; -} -extern "C" { - pub fn __atan2f(__y: f32, __x: f32) -> f32; -} -extern "C" { - pub fn cosf(__x: f32) -> f32; -} -extern "C" { - pub fn __cosf(__x: f32) -> f32; -} -extern "C" { - pub fn sinf(__x: f32) -> f32; -} -extern "C" { - pub fn __sinf(__x: f32) -> f32; -} -extern "C" { - pub fn tanf(__x: f32) -> f32; -} -extern "C" { - pub fn __tanf(__x: f32) -> f32; -} -extern "C" { - pub fn coshf(__x: f32) -> f32; -} -extern "C" { - pub fn __coshf(__x: f32) -> f32; -} -extern "C" { - pub fn sinhf(__x: f32) -> f32; -} -extern "C" { - pub fn __sinhf(__x: f32) -> f32; -} -extern "C" { - pub fn tanhf(__x: f32) -> f32; -} -extern "C" { - pub fn __tanhf(__x: f32) -> f32; -} -extern "C" { - pub fn acoshf(__x: f32) -> f32; -} -extern "C" { - pub fn __acoshf(__x: f32) -> f32; -} -extern "C" { - pub fn asinhf(__x: f32) -> f32; -} -extern "C" { - pub fn __asinhf(__x: f32) -> f32; -} -extern "C" { - pub fn atanhf(__x: f32) -> f32; -} -extern "C" { - pub fn __atanhf(__x: f32) -> f32; -} -extern "C" { - pub fn expf(__x: f32) -> f32; -} -extern "C" { - pub fn __expf(__x: f32) -> f32; -} -extern "C" { - pub fn frexpf(__x: f32, __exponent: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn __frexpf(__x: f32, __exponent: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn ldexpf(__x: f32, __exponent: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn __ldexpf(__x: f32, __exponent: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn logf(__x: f32) -> f32; -} -extern "C" { - pub fn __logf(__x: f32) -> f32; -} -extern "C" { - pub fn log10f(__x: f32) -> f32; -} -extern "C" { - pub fn __log10f(__x: f32) -> f32; -} -extern "C" { - pub fn modff(__x: f32, __iptr: *mut f32) -> f32; -} -extern "C" { - pub fn __modff(__x: f32, __iptr: *mut f32) -> f32; -} -extern "C" { - pub fn expm1f(__x: f32) -> f32; -} -extern "C" { - pub fn __expm1f(__x: f32) -> f32; -} -extern "C" { - pub fn log1pf(__x: f32) -> f32; -} -extern "C" { - pub fn __log1pf(__x: f32) -> f32; -} -extern "C" { - pub fn logbf(__x: f32) -> f32; -} -extern "C" { - pub fn __logbf(__x: f32) -> f32; -} -extern "C" { - pub fn exp2f(__x: f32) -> f32; -} -extern "C" { - pub fn __exp2f(__x: f32) -> f32; -} -extern "C" { - pub fn log2f(__x: f32) -> f32; -} -extern "C" { - pub fn __log2f(__x: f32) -> f32; -} -extern "C" { - pub fn powf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __powf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn sqrtf(__x: f32) -> f32; -} -extern "C" { - pub fn __sqrtf(__x: f32) -> f32; -} -extern "C" { - pub fn hypotf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __hypotf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn cbrtf(__x: f32) -> f32; -} -extern "C" { - pub fn __cbrtf(__x: f32) -> f32; -} -extern "C" { - pub fn ceilf(__x: f32) -> f32; -} -extern "C" { - pub fn __ceilf(__x: f32) -> f32; -} -extern "C" { - pub fn fabsf(__x: f32) -> f32; -} -extern "C" { - pub fn __fabsf(__x: f32) -> f32; -} -extern "C" { - pub fn floorf(__x: f32) -> f32; -} -extern "C" { - pub fn __floorf(__x: f32) -> f32; -} -extern "C" { - pub fn fmodf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __fmodf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn copysignf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __copysignf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn nanf(__tagb: *const ::std::os::raw::c_char) -> f32; -} -extern "C" { - pub fn __nanf(__tagb: *const ::std::os::raw::c_char) -> f32; -} -extern "C" { - pub fn erff(arg1: f32) -> f32; -} -extern "C" { - pub fn __erff(arg1: f32) -> f32; -} -extern "C" { - pub fn erfcf(arg1: f32) -> f32; -} -extern "C" { - pub fn __erfcf(arg1: f32) -> f32; -} -extern "C" { - pub fn lgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn __lgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn tgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn __tgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn rintf(__x: f32) -> f32; -} -extern "C" { - pub fn __rintf(__x: f32) -> f32; -} -extern "C" { - pub fn nextafterf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __nextafterf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn nexttowardf(__x: f32, __y: u128) -> f32; -} -extern "C" { - pub fn __nexttowardf(__x: f32, __y: u128) -> f32; -} -extern "C" { - pub fn remainderf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __remainderf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn scalbnf(__x: f32, __n: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn __scalbnf(__x: f32, __n: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn ilogbf(__x: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __ilogbf(__x: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn scalblnf(__x: f32, __n: ::std::os::raw::c_long) -> f32; -} -extern "C" { - pub fn __scalblnf(__x: f32, __n: ::std::os::raw::c_long) -> f32; -} -extern "C" { - pub fn nearbyintf(__x: f32) -> f32; -} -extern "C" { - pub fn __nearbyintf(__x: f32) -> f32; -} -extern "C" { - pub fn roundf(__x: f32) -> f32; -} -extern "C" { - pub fn __roundf(__x: f32) -> f32; -} -extern "C" { - pub fn truncf(__x: f32) -> f32; -} -extern "C" { - pub fn __truncf(__x: f32) -> f32; -} -extern "C" { - pub fn remquof(__x: f32, __y: f32, __quo: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn __remquof(__x: f32, __y: f32, __quo: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn lrintf(__x: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lrintf(__x: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llrintf(__x: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llrintf(__x: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn lroundf(__x: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lroundf(__x: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llroundf(__x: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llroundf(__x: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn fdimf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __fdimf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn fmaxf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __fmaxf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn fminf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __fminf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn fmaf(__x: f32, __y: f32, __z: f32) -> f32; -} -extern "C" { - pub fn __fmaf(__x: f32, __y: f32, __z: f32) -> f32; -} -extern "C" { - pub fn __fpclassifyl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __signbitl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isinfl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __finitel(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isnanl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __iseqsigl(__x: u128, __y: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __issignalingl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn acosl(__x: u128) -> u128; -} -extern "C" { - pub fn __acosl(__x: u128) -> u128; -} -extern "C" { - pub fn asinl(__x: u128) -> u128; -} -extern "C" { - pub fn __asinl(__x: u128) -> u128; -} -extern "C" { - pub fn atanl(__x: u128) -> u128; -} -extern "C" { - pub fn __atanl(__x: u128) -> u128; -} -extern "C" { - pub fn atan2l(__y: u128, __x: u128) -> u128; -} -extern "C" { - pub fn __atan2l(__y: u128, __x: u128) -> u128; -} -extern "C" { - pub fn cosl(__x: u128) -> u128; -} -extern "C" { - pub fn __cosl(__x: u128) -> u128; -} -extern "C" { - pub fn sinl(__x: u128) -> u128; -} -extern "C" { - pub fn __sinl(__x: u128) -> u128; -} -extern "C" { - pub fn tanl(__x: u128) -> u128; -} -extern "C" { - pub fn __tanl(__x: u128) -> u128; -} -extern "C" { - pub fn coshl(__x: u128) -> u128; -} -extern "C" { - pub fn __coshl(__x: u128) -> u128; -} -extern "C" { - pub fn sinhl(__x: u128) -> u128; -} -extern "C" { - pub fn __sinhl(__x: u128) -> u128; -} -extern "C" { - pub fn tanhl(__x: u128) -> u128; -} -extern "C" { - pub fn __tanhl(__x: u128) -> u128; -} -extern "C" { - pub fn acoshl(__x: u128) -> u128; -} -extern "C" { - pub fn __acoshl(__x: u128) -> u128; -} -extern "C" { - pub fn asinhl(__x: u128) -> u128; -} -extern "C" { - pub fn __asinhl(__x: u128) -> u128; -} -extern "C" { - pub fn atanhl(__x: u128) -> u128; -} -extern "C" { - pub fn __atanhl(__x: u128) -> u128; -} -extern "C" { - pub fn expl(__x: u128) -> u128; -} -extern "C" { - pub fn __expl(__x: u128) -> u128; -} -extern "C" { - pub fn frexpl(__x: u128, __exponent: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn __frexpl(__x: u128, __exponent: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn ldexpl(__x: u128, __exponent: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn __ldexpl(__x: u128, __exponent: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn logl(__x: u128) -> u128; -} -extern "C" { - pub fn __logl(__x: u128) -> u128; -} -extern "C" { - pub fn log10l(__x: u128) -> u128; -} -extern "C" { - pub fn __log10l(__x: u128) -> u128; -} -extern "C" { - pub fn modfl(__x: u128, __iptr: *mut u128) -> u128; -} -extern "C" { - pub fn __modfl(__x: u128, __iptr: *mut u128) -> u128; -} -extern "C" { - pub fn expm1l(__x: u128) -> u128; -} -extern "C" { - pub fn __expm1l(__x: u128) -> u128; -} -extern "C" { - pub fn log1pl(__x: u128) -> u128; -} -extern "C" { - pub fn __log1pl(__x: u128) -> u128; -} -extern "C" { - pub fn logbl(__x: u128) -> u128; -} -extern "C" { - pub fn __logbl(__x: u128) -> u128; -} -extern "C" { - pub fn exp2l(__x: u128) -> u128; -} -extern "C" { - pub fn __exp2l(__x: u128) -> u128; -} -extern "C" { - pub fn log2l(__x: u128) -> u128; -} -extern "C" { - pub fn __log2l(__x: u128) -> u128; -} -extern "C" { - pub fn powl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __powl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn sqrtl(__x: u128) -> u128; -} -extern "C" { - pub fn __sqrtl(__x: u128) -> u128; -} -extern "C" { - pub fn hypotl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __hypotl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn cbrtl(__x: u128) -> u128; -} -extern "C" { - pub fn __cbrtl(__x: u128) -> u128; -} -extern "C" { - pub fn ceill(__x: u128) -> u128; -} -extern "C" { - pub fn __ceill(__x: u128) -> u128; -} -extern "C" { - pub fn fabsl(__x: u128) -> u128; -} -extern "C" { - pub fn __fabsl(__x: u128) -> u128; -} -extern "C" { - pub fn floorl(__x: u128) -> u128; -} -extern "C" { - pub fn __floorl(__x: u128) -> u128; -} -extern "C" { - pub fn fmodl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __fmodl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn copysignl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __copysignl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn nanl(__tagb: *const ::std::os::raw::c_char) -> u128; -} -extern "C" { - pub fn __nanl(__tagb: *const ::std::os::raw::c_char) -> u128; -} -extern "C" { - pub fn erfl(arg1: u128) -> u128; -} -extern "C" { - pub fn __erfl(arg1: u128) -> u128; -} -extern "C" { - pub fn erfcl(arg1: u128) -> u128; -} -extern "C" { - pub fn __erfcl(arg1: u128) -> u128; -} -extern "C" { - pub fn lgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn __lgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn tgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn __tgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn rintl(__x: u128) -> u128; -} -extern "C" { - pub fn __rintl(__x: u128) -> u128; -} -extern "C" { - pub fn nextafterl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __nextafterl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn nexttowardl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __nexttowardl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn remainderl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __remainderl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn scalbnl(__x: u128, __n: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn __scalbnl(__x: u128, __n: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn ilogbl(__x: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __ilogbl(__x: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn scalblnl(__x: u128, __n: ::std::os::raw::c_long) -> u128; -} -extern "C" { - pub fn __scalblnl(__x: u128, __n: ::std::os::raw::c_long) -> u128; -} -extern "C" { - pub fn nearbyintl(__x: u128) -> u128; -} -extern "C" { - pub fn __nearbyintl(__x: u128) -> u128; -} -extern "C" { - pub fn roundl(__x: u128) -> u128; -} -extern "C" { - pub fn __roundl(__x: u128) -> u128; -} -extern "C" { - pub fn truncl(__x: u128) -> u128; -} -extern "C" { - pub fn __truncl(__x: u128) -> u128; -} -extern "C" { - pub fn remquol(__x: u128, __y: u128, __quo: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn __remquol(__x: u128, __y: u128, __quo: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn lrintl(__x: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lrintl(__x: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llrintl(__x: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llrintl(__x: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn lroundl(__x: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lroundl(__x: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llroundl(__x: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llroundl(__x: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn fdiml(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __fdiml(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn fmaxl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __fmaxl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn fminl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __fminl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn fmal(__x: u128, __y: u128, __z: u128) -> u128; -} -extern "C" { - pub fn __fmal(__x: u128, __y: u128, __z: u128) -> u128; -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum _bindgen_ty_1 { - FP_NAN = 0, - FP_INFINITE = 1, - FP_ZERO = 2, - FP_SUBNORMAL = 3, - FP_NORMAL = 4, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiPropertyElement { - BORDER = 0, - BASE = 1, - TEXT = 2, - OTHER = 3, -} -extern "C" { - pub static mut guiState: GuiControlState; -} -extern "C" { - pub static mut guiFont: Font; -} -pub const guiLocked: bool = false; -pub const guiAlpha: f32 = 1.0; -extern "C" { - pub static mut guiStyle: [::std::os::raw::c_uint; 384usize]; -} -pub const guiStyleLoaded: bool = false; -extern "C" { - pub static mut guiTooltip: *const ::std::os::raw::c_char; -} -pub const guiTooltipEnabled: bool = true; -extern "C" { - pub fn GuiSliderPro( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - sliderWidth: ::std::os::raw::c_int, - ) -> f32; -} -extern "C" { - pub fn GuiColorPanelEx(bounds: Rectangle, color: Color, hue: f32) -> Color; -} -extern "C" { - pub fn GuiLoadIcons( - fileName: *const ::std::os::raw::c_char, - loadIconsName: bool, - ) -> *mut *mut ::std::os::raw::c_char; -} -pub type __builtin_va_list = [__va_list_tag; 1usize]; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __va_list_tag { - pub gp_offset: ::std::os::raw::c_uint, - pub fp_offset: ::std::os::raw::c_uint, - pub overflow_arg_area: *mut ::std::os::raw::c_void, - pub reg_save_area: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout___va_list_tag() { - assert_eq!( - ::std::mem::size_of::<__va_list_tag>(), - 24usize, - concat!("Size of: ", stringify!(__va_list_tag)) - ); - assert_eq!( - ::std::mem::align_of::<__va_list_tag>(), - 8usize, - concat!("Alignment of ", stringify!(__va_list_tag)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).gp_offset as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(gp_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).fp_offset as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(fp_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).overflow_arg_area as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(overflow_arg_area) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).reg_save_area as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(reg_save_area) - ) - ); -} diff --git a/raylib-sys/bindings_osx.rs b/raylib-sys/bindings_osx.rs deleted file mode 100644 index 29b712eb..00000000 --- a/raylib-sys/bindings_osx.rs +++ /dev/null @@ -1,18480 +0,0 @@ -/* automatically generated by rust-bindgen 0.59.1 */ - -#[repr(C)] -#[derive(Copy, Clone, Debug, Default, Eq, Hash, Ord, PartialEq, PartialOrd)] -pub struct __BindgenBitfieldUnit { - storage: Storage, -} -impl __BindgenBitfieldUnit { - #[inline] - pub const fn new(storage: Storage) -> Self { - Self { storage } - } -} -impl __BindgenBitfieldUnit -where - Storage: AsRef<[u8]> + AsMut<[u8]>, -{ - #[inline] - pub fn get_bit(&self, index: usize) -> bool { - debug_assert!(index / 8 < self.storage.as_ref().len()); - let byte_index = index / 8; - let byte = self.storage.as_ref()[byte_index]; - let bit_index = if cfg!(target_endian = "big") { - 7 - (index % 8) - } else { - index % 8 - }; - let mask = 1 << bit_index; - byte & mask == mask - } - #[inline] - pub fn set_bit(&mut self, index: usize, val: bool) { - debug_assert!(index / 8 < self.storage.as_ref().len()); - let byte_index = index / 8; - let byte = &mut self.storage.as_mut()[byte_index]; - let bit_index = if cfg!(target_endian = "big") { - 7 - (index % 8) - } else { - index % 8 - }; - let mask = 1 << bit_index; - if val { - *byte |= mask; - } else { - *byte &= !mask; - } - } - #[inline] - pub fn get(&self, bit_offset: usize, bit_width: u8) -> u64 { - debug_assert!(bit_width <= 64); - debug_assert!(bit_offset / 8 < self.storage.as_ref().len()); - debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len()); - let mut val = 0; - for i in 0..(bit_width as usize) { - if self.get_bit(i + bit_offset) { - let index = if cfg!(target_endian = "big") { - bit_width as usize - 1 - i - } else { - i - }; - val |= 1 << index; - } - } - val - } - #[inline] - pub fn set(&mut self, bit_offset: usize, bit_width: u8, val: u64) { - debug_assert!(bit_width <= 64); - debug_assert!(bit_offset / 8 < self.storage.as_ref().len()); - debug_assert!((bit_offset + (bit_width as usize)) / 8 <= self.storage.as_ref().len()); - for i in 0..(bit_width as usize) { - let mask = 1 << i; - let val_bit_is_set = val & mask == mask; - let index = if cfg!(target_endian = "big") { - bit_width as usize - 1 - i - } else { - i - }; - self.set_bit(index + bit_offset, val_bit_is_set); - } - } -} -pub const RAYGUI_VERSION: &'static [u8; 8usize] = b"2.6-dev\0"; -pub const __GNUC_VA_LIST: u32 = 1; -pub const PI: f64 = 3.141592653589793; -pub const DEG2RAD: f64 = 0.017453292519943295; -pub const RAD2DEG: f64 = 57.29577951308232; -pub const true_: u32 = 1; -pub const false_: u32 = 0; -pub const __bool_true_false_are_defined: u32 = 1; -pub const __API_TO_BE_DEPRECATED: u32 = 100000; -pub const __MAC_10_0: u32 = 1000; -pub const __MAC_10_1: u32 = 1010; -pub const __MAC_10_2: u32 = 1020; -pub const __MAC_10_3: u32 = 1030; -pub const __MAC_10_4: u32 = 1040; -pub const __MAC_10_5: u32 = 1050; -pub const __MAC_10_6: u32 = 1060; -pub const __MAC_10_7: u32 = 1070; -pub const __MAC_10_8: u32 = 1080; -pub const __MAC_10_9: u32 = 1090; -pub const __MAC_10_10: u32 = 101000; -pub const __MAC_10_10_2: u32 = 101002; -pub const __MAC_10_10_3: u32 = 101003; -pub const __MAC_10_11: u32 = 101100; -pub const __MAC_10_11_2: u32 = 101102; -pub const __MAC_10_11_3: u32 = 101103; -pub const __MAC_10_11_4: u32 = 101104; -pub const __MAC_10_12: u32 = 101200; -pub const __MAC_10_12_1: u32 = 101201; -pub const __MAC_10_12_2: u32 = 101202; -pub const __MAC_10_12_4: u32 = 101204; -pub const __MAC_10_13: u32 = 101300; -pub const __MAC_10_13_1: u32 = 101301; -pub const __MAC_10_13_2: u32 = 101302; -pub const __MAC_10_13_4: u32 = 101304; -pub const __MAC_10_14: u32 = 101400; -pub const __MAC_10_14_1: u32 = 101401; -pub const __MAC_10_14_4: u32 = 101404; -pub const __MAC_10_15: u32 = 101500; -pub const __MAC_10_15_1: u32 = 101501; -pub const __MAC_10_15_4: u32 = 101504; -pub const __IPHONE_2_0: u32 = 20000; -pub const __IPHONE_2_1: u32 = 20100; -pub const __IPHONE_2_2: u32 = 20200; -pub const __IPHONE_3_0: u32 = 30000; -pub const __IPHONE_3_1: u32 = 30100; -pub const __IPHONE_3_2: u32 = 30200; -pub const __IPHONE_4_0: u32 = 40000; -pub const __IPHONE_4_1: u32 = 40100; -pub const __IPHONE_4_2: u32 = 40200; -pub const __IPHONE_4_3: u32 = 40300; -pub const __IPHONE_5_0: u32 = 50000; -pub const __IPHONE_5_1: u32 = 50100; -pub const __IPHONE_6_0: u32 = 60000; -pub const __IPHONE_6_1: u32 = 60100; -pub const __IPHONE_7_0: u32 = 70000; -pub const __IPHONE_7_1: u32 = 70100; -pub const __IPHONE_8_0: u32 = 80000; -pub const __IPHONE_8_1: u32 = 80100; -pub const __IPHONE_8_2: u32 = 80200; -pub const __IPHONE_8_3: u32 = 80300; -pub const __IPHONE_8_4: u32 = 80400; -pub const __IPHONE_9_0: u32 = 90000; -pub const __IPHONE_9_1: u32 = 90100; -pub const __IPHONE_9_2: u32 = 90200; -pub const __IPHONE_9_3: u32 = 90300; -pub const __IPHONE_10_0: u32 = 100000; -pub const __IPHONE_10_1: u32 = 100100; -pub const __IPHONE_10_2: u32 = 100200; -pub const __IPHONE_10_3: u32 = 100300; -pub const __IPHONE_11_0: u32 = 110000; -pub const __IPHONE_11_1: u32 = 110100; -pub const __IPHONE_11_2: u32 = 110200; -pub const __IPHONE_11_3: u32 = 110300; -pub const __IPHONE_11_4: u32 = 110400; -pub const __IPHONE_12_0: u32 = 120000; -pub const __IPHONE_12_1: u32 = 120100; -pub const __IPHONE_12_2: u32 = 120200; -pub const __IPHONE_12_3: u32 = 120300; -pub const __IPHONE_13_0: u32 = 130000; -pub const __IPHONE_13_1: u32 = 130100; -pub const __IPHONE_13_2: u32 = 130200; -pub const __IPHONE_13_3: u32 = 130300; -pub const __IPHONE_13_4: u32 = 130400; -pub const __IPHONE_13_5: u32 = 130500; -pub const __IPHONE_13_6: u32 = 130600; -pub const __TVOS_9_0: u32 = 90000; -pub const __TVOS_9_1: u32 = 90100; -pub const __TVOS_9_2: u32 = 90200; -pub const __TVOS_10_0: u32 = 100000; -pub const __TVOS_10_0_1: u32 = 100001; -pub const __TVOS_10_1: u32 = 100100; -pub const __TVOS_10_2: u32 = 100200; -pub const __TVOS_11_0: u32 = 110000; -pub const __TVOS_11_1: u32 = 110100; -pub const __TVOS_11_2: u32 = 110200; -pub const __TVOS_11_3: u32 = 110300; -pub const __TVOS_11_4: u32 = 110400; -pub const __TVOS_12_0: u32 = 120000; -pub const __TVOS_12_1: u32 = 120100; -pub const __TVOS_12_2: u32 = 120200; -pub const __TVOS_12_3: u32 = 120300; -pub const __TVOS_13_0: u32 = 130000; -pub const __TVOS_13_2: u32 = 130200; -pub const __TVOS_13_3: u32 = 130300; -pub const __TVOS_13_4: u32 = 130400; -pub const __WATCHOS_1_0: u32 = 10000; -pub const __WATCHOS_2_0: u32 = 20000; -pub const __WATCHOS_2_1: u32 = 20100; -pub const __WATCHOS_2_2: u32 = 20200; -pub const __WATCHOS_3_0: u32 = 30000; -pub const __WATCHOS_3_1: u32 = 30100; -pub const __WATCHOS_3_1_1: u32 = 30101; -pub const __WATCHOS_3_2: u32 = 30200; -pub const __WATCHOS_4_0: u32 = 40000; -pub const __WATCHOS_4_1: u32 = 40100; -pub const __WATCHOS_4_2: u32 = 40200; -pub const __WATCHOS_4_3: u32 = 40300; -pub const __WATCHOS_5_0: u32 = 50000; -pub const __WATCHOS_5_1: u32 = 50100; -pub const __WATCHOS_5_2: u32 = 50200; -pub const __WATCHOS_6_0: u32 = 60000; -pub const __WATCHOS_6_1: u32 = 60100; -pub const __WATCHOS_6_2: u32 = 60200; -pub const __DRIVERKIT_19_0: u32 = 190000; -pub const __MAC_OS_X_VERSION_MAX_ALLOWED: u32 = 101500; -pub const __ENABLE_LEGACY_MAC_AVAILABILITY: u32 = 1; -pub const __DARWIN_ONLY_64_BIT_INO_T: u32 = 0; -pub const __DARWIN_ONLY_VERS_1050: u32 = 0; -pub const __DARWIN_ONLY_UNIX_CONFORMANCE: u32 = 1; -pub const __DARWIN_UNIX03: u32 = 1; -pub const __DARWIN_64_BIT_INO_T: u32 = 1; -pub const __DARWIN_VERS_1050: u32 = 1; -pub const __DARWIN_NON_CANCELABLE: u32 = 0; -pub const __DARWIN_SUF_64_BIT_INO_T: &'static [u8; 9usize] = b"$INODE64\0"; -pub const __DARWIN_SUF_1050: &'static [u8; 6usize] = b"$1050\0"; -pub const __DARWIN_SUF_EXTSN: &'static [u8; 14usize] = b"$DARWIN_EXTSN\0"; -pub const __DARWIN_C_ANSI: u32 = 4096; -pub const __DARWIN_C_FULL: u32 = 900000; -pub const __DARWIN_C_LEVEL: u32 = 900000; -pub const __DARWIN_NO_LONG_LONG: u32 = 0; -pub const _DARWIN_FEATURE_64_BIT_INODE: u32 = 1; -pub const _DARWIN_FEATURE_ONLY_UNIX_CONFORMANCE: u32 = 1; -pub const _DARWIN_FEATURE_UNIX_CONFORMANCE: u32 = 3; -pub const __PTHREAD_SIZE__: u32 = 8176; -pub const __PTHREAD_ATTR_SIZE__: u32 = 56; -pub const __PTHREAD_MUTEXATTR_SIZE__: u32 = 8; -pub const __PTHREAD_MUTEX_SIZE__: u32 = 56; -pub const __PTHREAD_CONDATTR_SIZE__: u32 = 8; -pub const __PTHREAD_COND_SIZE__: u32 = 40; -pub const __PTHREAD_ONCE_SIZE__: u32 = 8; -pub const __PTHREAD_RWLOCK_SIZE__: u32 = 192; -pub const __PTHREAD_RWLOCKATTR_SIZE__: u32 = 16; -pub const __DARWIN_WCHAR_MIN: i32 = -2147483648; -pub const _FORTIFY_SOURCE: u32 = 2; -pub const __DARWIN_NSIG: u32 = 32; -pub const NSIG: u32 = 32; -pub const _I386_SIGNAL_H_: u32 = 1; -pub const SIGHUP: u32 = 1; -pub const SIGINT: u32 = 2; -pub const SIGQUIT: u32 = 3; -pub const SIGILL: u32 = 4; -pub const SIGTRAP: u32 = 5; -pub const SIGABRT: u32 = 6; -pub const SIGIOT: u32 = 6; -pub const SIGEMT: u32 = 7; -pub const SIGFPE: u32 = 8; -pub const SIGKILL: u32 = 9; -pub const SIGBUS: u32 = 10; -pub const SIGSEGV: u32 = 11; -pub const SIGSYS: u32 = 12; -pub const SIGPIPE: u32 = 13; -pub const SIGALRM: u32 = 14; -pub const SIGTERM: u32 = 15; -pub const SIGURG: u32 = 16; -pub const SIGSTOP: u32 = 17; -pub const SIGTSTP: u32 = 18; -pub const SIGCONT: u32 = 19; -pub const SIGCHLD: u32 = 20; -pub const SIGTTIN: u32 = 21; -pub const SIGTTOU: u32 = 22; -pub const SIGIO: u32 = 23; -pub const SIGXCPU: u32 = 24; -pub const SIGXFSZ: u32 = 25; -pub const SIGVTALRM: u32 = 26; -pub const SIGPROF: u32 = 27; -pub const SIGWINCH: u32 = 28; -pub const SIGINFO: u32 = 29; -pub const SIGUSR1: u32 = 30; -pub const SIGUSR2: u32 = 31; -pub const FP_PREC_24B: u32 = 0; -pub const FP_PREC_53B: u32 = 2; -pub const FP_PREC_64B: u32 = 3; -pub const FP_RND_NEAR: u32 = 0; -pub const FP_RND_DOWN: u32 = 1; -pub const FP_RND_UP: u32 = 2; -pub const FP_CHOP: u32 = 3; -pub const FP_STATE_BYTES: u32 = 512; -pub const SIGEV_NONE: u32 = 0; -pub const SIGEV_SIGNAL: u32 = 1; -pub const SIGEV_THREAD: u32 = 3; -pub const ILL_NOOP: u32 = 0; -pub const ILL_ILLOPC: u32 = 1; -pub const ILL_ILLTRP: u32 = 2; -pub const ILL_PRVOPC: u32 = 3; -pub const ILL_ILLOPN: u32 = 4; -pub const ILL_ILLADR: u32 = 5; -pub const ILL_PRVREG: u32 = 6; -pub const ILL_COPROC: u32 = 7; -pub const ILL_BADSTK: u32 = 8; -pub const FPE_NOOP: u32 = 0; -pub const FPE_FLTDIV: u32 = 1; -pub const FPE_FLTOVF: u32 = 2; -pub const FPE_FLTUND: u32 = 3; -pub const FPE_FLTRES: u32 = 4; -pub const FPE_FLTINV: u32 = 5; -pub const FPE_FLTSUB: u32 = 6; -pub const FPE_INTDIV: u32 = 7; -pub const FPE_INTOVF: u32 = 8; -pub const SEGV_NOOP: u32 = 0; -pub const SEGV_MAPERR: u32 = 1; -pub const SEGV_ACCERR: u32 = 2; -pub const BUS_NOOP: u32 = 0; -pub const BUS_ADRALN: u32 = 1; -pub const BUS_ADRERR: u32 = 2; -pub const BUS_OBJERR: u32 = 3; -pub const TRAP_BRKPT: u32 = 1; -pub const TRAP_TRACE: u32 = 2; -pub const CLD_NOOP: u32 = 0; -pub const CLD_EXITED: u32 = 1; -pub const CLD_KILLED: u32 = 2; -pub const CLD_DUMPED: u32 = 3; -pub const CLD_TRAPPED: u32 = 4; -pub const CLD_STOPPED: u32 = 5; -pub const CLD_CONTINUED: u32 = 6; -pub const POLL_IN: u32 = 1; -pub const POLL_OUT: u32 = 2; -pub const POLL_MSG: u32 = 3; -pub const POLL_ERR: u32 = 4; -pub const POLL_PRI: u32 = 5; -pub const POLL_HUP: u32 = 6; -pub const SA_ONSTACK: u32 = 1; -pub const SA_RESTART: u32 = 2; -pub const SA_RESETHAND: u32 = 4; -pub const SA_NOCLDSTOP: u32 = 8; -pub const SA_NODEFER: u32 = 16; -pub const SA_NOCLDWAIT: u32 = 32; -pub const SA_SIGINFO: u32 = 64; -pub const SA_USERTRAMP: u32 = 256; -pub const SA_64REGSET: u32 = 512; -pub const SA_USERSPACE_MASK: u32 = 127; -pub const SIG_BLOCK: u32 = 1; -pub const SIG_UNBLOCK: u32 = 2; -pub const SIG_SETMASK: u32 = 3; -pub const SI_USER: u32 = 65537; -pub const SI_QUEUE: u32 = 65538; -pub const SI_TIMER: u32 = 65539; -pub const SI_ASYNCIO: u32 = 65540; -pub const SI_MESGQ: u32 = 65541; -pub const SS_ONSTACK: u32 = 1; -pub const SS_DISABLE: u32 = 4; -pub const MINSIGSTKSZ: u32 = 32768; -pub const SIGSTKSZ: u32 = 131072; -pub const SV_ONSTACK: u32 = 1; -pub const SV_INTERRUPT: u32 = 2; -pub const SV_RESETHAND: u32 = 4; -pub const SV_NODEFER: u32 = 16; -pub const SV_NOCLDSTOP: u32 = 8; -pub const SV_SIGINFO: u32 = 64; -pub const __WORDSIZE: u32 = 64; -pub const INT8_MAX: u32 = 127; -pub const INT16_MAX: u32 = 32767; -pub const INT32_MAX: u32 = 2147483647; -pub const INT64_MAX: u64 = 9223372036854775807; -pub const INT8_MIN: i32 = -128; -pub const INT16_MIN: i32 = -32768; -pub const INT32_MIN: i32 = -2147483648; -pub const INT64_MIN: i64 = -9223372036854775808; -pub const UINT8_MAX: u32 = 255; -pub const UINT16_MAX: u32 = 65535; -pub const UINT32_MAX: u32 = 4294967295; -pub const UINT64_MAX: i32 = -1; -pub const INT_LEAST8_MIN: i32 = -128; -pub const INT_LEAST16_MIN: i32 = -32768; -pub const INT_LEAST32_MIN: i32 = -2147483648; -pub const INT_LEAST64_MIN: i64 = -9223372036854775808; -pub const INT_LEAST8_MAX: u32 = 127; -pub const INT_LEAST16_MAX: u32 = 32767; -pub const INT_LEAST32_MAX: u32 = 2147483647; -pub const INT_LEAST64_MAX: u64 = 9223372036854775807; -pub const UINT_LEAST8_MAX: u32 = 255; -pub const UINT_LEAST16_MAX: u32 = 65535; -pub const UINT_LEAST32_MAX: u32 = 4294967295; -pub const UINT_LEAST64_MAX: i32 = -1; -pub const INT_FAST8_MIN: i32 = -128; -pub const INT_FAST16_MIN: i32 = -32768; -pub const INT_FAST32_MIN: i32 = -2147483648; -pub const INT_FAST64_MIN: i64 = -9223372036854775808; -pub const INT_FAST8_MAX: u32 = 127; -pub const INT_FAST16_MAX: u32 = 32767; -pub const INT_FAST32_MAX: u32 = 2147483647; -pub const INT_FAST64_MAX: u64 = 9223372036854775807; -pub const UINT_FAST8_MAX: u32 = 255; -pub const UINT_FAST16_MAX: u32 = 65535; -pub const UINT_FAST32_MAX: u32 = 4294967295; -pub const UINT_FAST64_MAX: i32 = -1; -pub const INTPTR_MAX: u64 = 9223372036854775807; -pub const INTPTR_MIN: i64 = -9223372036854775808; -pub const UINTPTR_MAX: i32 = -1; -pub const SIZE_MAX: i32 = -1; -pub const WINT_MIN: i32 = -2147483648; -pub const WINT_MAX: u32 = 2147483647; -pub const SIG_ATOMIC_MIN: i32 = -2147483648; -pub const SIG_ATOMIC_MAX: u32 = 2147483647; -pub const PRIO_PROCESS: u32 = 0; -pub const PRIO_PGRP: u32 = 1; -pub const PRIO_USER: u32 = 2; -pub const PRIO_DARWIN_THREAD: u32 = 3; -pub const PRIO_DARWIN_PROCESS: u32 = 4; -pub const PRIO_MIN: i32 = -20; -pub const PRIO_MAX: u32 = 20; -pub const PRIO_DARWIN_BG: u32 = 4096; -pub const PRIO_DARWIN_NONUI: u32 = 4097; -pub const RUSAGE_SELF: u32 = 0; -pub const RUSAGE_CHILDREN: i32 = -1; -pub const RUSAGE_INFO_V0: u32 = 0; -pub const RUSAGE_INFO_V1: u32 = 1; -pub const RUSAGE_INFO_V2: u32 = 2; -pub const RUSAGE_INFO_V3: u32 = 3; -pub const RUSAGE_INFO_V4: u32 = 4; -pub const RUSAGE_INFO_CURRENT: u32 = 4; -pub const RLIMIT_CPU: u32 = 0; -pub const RLIMIT_FSIZE: u32 = 1; -pub const RLIMIT_DATA: u32 = 2; -pub const RLIMIT_STACK: u32 = 3; -pub const RLIMIT_CORE: u32 = 4; -pub const RLIMIT_AS: u32 = 5; -pub const RLIMIT_RSS: u32 = 5; -pub const RLIMIT_MEMLOCK: u32 = 6; -pub const RLIMIT_NPROC: u32 = 7; -pub const RLIMIT_NOFILE: u32 = 8; -pub const RLIM_NLIMITS: u32 = 9; -pub const _RLIMIT_POSIX_FLAG: u32 = 4096; -pub const RLIMIT_WAKEUPS_MONITOR: u32 = 1; -pub const RLIMIT_CPU_USAGE_MONITOR: u32 = 2; -pub const RLIMIT_THREAD_CPULIMITS: u32 = 3; -pub const RLIMIT_FOOTPRINT_INTERVAL: u32 = 4; -pub const WAKEMON_ENABLE: u32 = 1; -pub const WAKEMON_DISABLE: u32 = 2; -pub const WAKEMON_GET_PARAMS: u32 = 4; -pub const WAKEMON_SET_DEFAULTS: u32 = 8; -pub const WAKEMON_MAKE_FATAL: u32 = 16; -pub const CPUMON_MAKE_FATAL: u32 = 4096; -pub const FOOTPRINT_INTERVAL_RESET: u32 = 1; -pub const IOPOL_TYPE_DISK: u32 = 0; -pub const IOPOL_TYPE_VFS_ATIME_UPDATES: u32 = 2; -pub const IOPOL_TYPE_VFS_MATERIALIZE_DATALESS_FILES: u32 = 3; -pub const IOPOL_TYPE_VFS_STATFS_NO_DATA_VOLUME: u32 = 4; -pub const IOPOL_SCOPE_PROCESS: u32 = 0; -pub const IOPOL_SCOPE_THREAD: u32 = 1; -pub const IOPOL_SCOPE_DARWIN_BG: u32 = 2; -pub const IOPOL_DEFAULT: u32 = 0; -pub const IOPOL_IMPORTANT: u32 = 1; -pub const IOPOL_PASSIVE: u32 = 2; -pub const IOPOL_THROTTLE: u32 = 3; -pub const IOPOL_UTILITY: u32 = 4; -pub const IOPOL_STANDARD: u32 = 5; -pub const IOPOL_APPLICATION: u32 = 5; -pub const IOPOL_NORMAL: u32 = 1; -pub const IOPOL_ATIME_UPDATES_DEFAULT: u32 = 0; -pub const IOPOL_ATIME_UPDATES_OFF: u32 = 1; -pub const IOPOL_MATERIALIZE_DATALESS_FILES_DEFAULT: u32 = 0; -pub const IOPOL_MATERIALIZE_DATALESS_FILES_OFF: u32 = 1; -pub const IOPOL_MATERIALIZE_DATALESS_FILES_ON: u32 = 2; -pub const IOPOL_VFS_STATFS_NO_DATA_VOLUME_DEFAULT: u32 = 0; -pub const IOPOL_VFS_STATFS_FORCE_NO_DATA_VOLUME: u32 = 1; -pub const WNOHANG: u32 = 1; -pub const WUNTRACED: u32 = 2; -pub const WCOREFLAG: u32 = 128; -pub const _WSTOPPED: u32 = 127; -pub const WEXITED: u32 = 4; -pub const WSTOPPED: u32 = 8; -pub const WCONTINUED: u32 = 16; -pub const WNOWAIT: u32 = 32; -pub const WAIT_ANY: i32 = -1; -pub const WAIT_MYPGRP: u32 = 0; -pub const _QUAD_HIGHWORD: u32 = 1; -pub const _QUAD_LOWWORD: u32 = 0; -pub const __DARWIN_LITTLE_ENDIAN: u32 = 1234; -pub const __DARWIN_BIG_ENDIAN: u32 = 4321; -pub const __DARWIN_PDP_ENDIAN: u32 = 3412; -pub const __DARWIN_BYTE_ORDER: u32 = 1234; -pub const LITTLE_ENDIAN: u32 = 1234; -pub const BIG_ENDIAN: u32 = 4321; -pub const PDP_ENDIAN: u32 = 3412; -pub const BYTE_ORDER: u32 = 1234; -pub const EXIT_FAILURE: u32 = 1; -pub const EXIT_SUCCESS: u32 = 0; -pub const RAND_MAX: u32 = 2147483647; -pub const NUM_CONTROLS: u32 = 16; -pub const NUM_PROPS_DEFAULT: u32 = 16; -pub const NUM_PROPS_EXTENDED: u32 = 8; -pub const TEXTEDIT_CURSOR_BLINK_FRAMES: u32 = 20; -pub const RICON_MAX_ICONS: u32 = 256; -pub const RICON_SIZE: u32 = 16; -pub const RICON_MAX_NAME_LENGTH: u32 = 32; -pub const RICON_DATA_ELEMENTS: u32 = 8; -pub const RENAME_SECLUDE: u32 = 1; -pub const RENAME_SWAP: u32 = 2; -pub const RENAME_EXCL: u32 = 4; -pub const __SLBF: u32 = 1; -pub const __SNBF: u32 = 2; -pub const __SRD: u32 = 4; -pub const __SWR: u32 = 8; -pub const __SRW: u32 = 16; -pub const __SEOF: u32 = 32; -pub const __SERR: u32 = 64; -pub const __SMBF: u32 = 128; -pub const __SAPP: u32 = 256; -pub const __SSTR: u32 = 512; -pub const __SOPT: u32 = 1024; -pub const __SNPT: u32 = 2048; -pub const __SOFF: u32 = 4096; -pub const __SMOD: u32 = 8192; -pub const __SALC: u32 = 16384; -pub const __SIGN: u32 = 32768; -pub const _IOFBF: u32 = 0; -pub const _IOLBF: u32 = 1; -pub const _IONBF: u32 = 2; -pub const BUFSIZ: u32 = 1024; -pub const EOF: i32 = -1; -pub const FOPEN_MAX: u32 = 20; -pub const FILENAME_MAX: u32 = 1024; -pub const P_tmpdir: &'static [u8; 10usize] = b"/var/tmp/\0"; -pub const L_tmpnam: u32 = 1024; -pub const TMP_MAX: u32 = 308915776; -pub const SEEK_SET: u32 = 0; -pub const SEEK_CUR: u32 = 1; -pub const SEEK_END: u32 = 2; -pub const L_ctermid: u32 = 1024; -pub const _USE_FORTIFY_LEVEL: u32 = 2; -pub const __HAS_FIXED_CHK_PROTOTYPES: u32 = 1; -pub const FP_NAN: u32 = 1; -pub const FP_INFINITE: u32 = 2; -pub const FP_ZERO: u32 = 3; -pub const FP_NORMAL: u32 = 4; -pub const FP_SUBNORMAL: u32 = 5; -pub const FP_SUPERNORMAL: u32 = 6; -pub const FP_ILOGB0: i32 = -2147483648; -pub const FP_ILOGBNAN: i32 = -2147483648; -pub const MATH_ERRNO: u32 = 1; -pub const MATH_ERREXCEPT: u32 = 2; -pub const M_E: f64 = 2.718281828459045; -pub const M_LOG2E: f64 = 1.4426950408889634; -pub const M_LOG10E: f64 = 0.4342944819032518; -pub const M_LN2: f64 = 0.6931471805599453; -pub const M_LN10: f64 = 2.302585092994046; -pub const M_PI: f64 = 3.141592653589793; -pub const M_PI_2: f64 = 1.5707963267948966; -pub const M_PI_4: f64 = 0.7853981633974483; -pub const M_1_PI: f64 = 0.3183098861837907; -pub const M_2_PI: f64 = 0.6366197723675814; -pub const M_2_SQRTPI: f64 = 1.1283791670955126; -pub const M_SQRT2: f64 = 1.4142135623730951; -pub const M_SQRT1_2: f64 = 0.7071067811865476; -pub const FP_SNAN: u32 = 1; -pub const FP_QNAN: u32 = 1; -pub const DOMAIN: u32 = 1; -pub const SING: u32 = 2; -pub const OVERFLOW: u32 = 3; -pub const UNDERFLOW: u32 = 4; -pub const TLOSS: u32 = 5; -pub const PLOSS: u32 = 6; -pub const WINDOW_STATUSBAR_HEIGHT: u32 = 22; -pub const GROUPBOX_LINE_THICK: u32 = 1; -pub const GROUPBOX_TEXT_PADDING: u32 = 10; -pub const LINE_TEXT_PADDING: u32 = 10; -pub const PANEL_BORDER_WIDTH: u32 = 1; -pub const TOGGLEGROUP_MAX_ELEMENTS: u32 = 32; -pub const VALUEBOX_MAX_CHARS: u32 = 32; -pub const COLORBARALPHA_CHECKED_SIZE: u32 = 10; -pub const MESSAGEBOX_BUTTON_HEIGHT: u32 = 24; -pub const MESSAGEBOX_BUTTON_PADDING: u32 = 10; -pub const TEXTINPUTBOX_BUTTON_HEIGHT: u32 = 24; -pub const TEXTINPUTBOX_BUTTON_PADDING: u32 = 10; -pub const TEXTINPUTBOX_HEIGHT: u32 = 30; -pub const TEXTINPUTBOX_MAX_TEXT_LENGTH: u32 = 256; -pub const GRID_COLOR_ALPHA: f64 = 0.15; -pub const ICON_TEXT_PADDING: u32 = 4; -pub const TEXTSPLIT_MAX_TEXT_LENGTH: u32 = 1024; -pub const TEXTSPLIT_MAX_TEXT_ELEMENTS: u32 = 128; -pub type va_list = __builtin_va_list; -pub type __gnuc_va_list = __builtin_va_list; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector2 { - pub x: f32, - pub y: f32, -} -#[test] -fn bindgen_test_layout_Vector2() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(Vector2)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector2), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector2), - "::", - stringify!(y) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector3 { - pub x: f32, - pub y: f32, - pub z: f32, -} -#[test] -fn bindgen_test_layout_Vector3() { - assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!("Size of: ", stringify!(Vector3)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector3)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).z as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(z) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector4 { - pub x: f32, - pub y: f32, - pub z: f32, - pub w: f32, -} -#[test] -fn bindgen_test_layout_Vector4() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Vector4)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector4)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).z as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(z) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).w as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(w) - ) - ); -} -pub type Quaternion = Vector4; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Matrix { - pub m0: f32, - pub m4: f32, - pub m8: f32, - pub m12: f32, - pub m1: f32, - pub m5: f32, - pub m9: f32, - pub m13: f32, - pub m2: f32, - pub m6: f32, - pub m10: f32, - pub m14: f32, - pub m3: f32, - pub m7: f32, - pub m11: f32, - pub m15: f32, -} -#[test] -fn bindgen_test_layout_Matrix() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(Matrix)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Matrix)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m0 as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m0) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m4 as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m4) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m8 as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m8) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m12 as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m12) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m1 as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m1) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m5 as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m5) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m9 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m9) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m13 as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m13) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m2 as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m6 as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m6) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m10 as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m10) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m14 as *const _ as usize }, - 44usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m14) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m3 as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m3) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m7 as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m7) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m11 as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m11) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m15 as *const _ as usize }, - 60usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m15) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Color { - pub r: ::std::os::raw::c_uchar, - pub g: ::std::os::raw::c_uchar, - pub b: ::std::os::raw::c_uchar, - pub a: ::std::os::raw::c_uchar, -} -#[test] -fn bindgen_test_layout_Color() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(Color)) - ); - assert_eq!( - ::std::mem::align_of::(), - 1usize, - concat!("Alignment of ", stringify!(Color)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).r as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(r)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).g as *const _ as usize }, - 1usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(g)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).b as *const _ as usize }, - 2usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(b)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).a as *const _ as usize }, - 3usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(a)) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Rectangle { - pub x: f32, - pub y: f32, - pub width: f32, - pub height: f32, -} -#[test] -fn bindgen_test_layout_Rectangle() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Rectangle)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Rectangle)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(height) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Image { - pub data: *mut ::std::os::raw::c_void, - pub width: ::std::os::raw::c_int, - pub height: ::std::os::raw::c_int, - pub mipmaps: ::std::os::raw::c_int, - pub format: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Image() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Image)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Image)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).data as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(data) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(height) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mipmaps as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(mipmaps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).format as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(format) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Texture { - pub id: ::std::os::raw::c_uint, - pub width: ::std::os::raw::c_int, - pub height: ::std::os::raw::c_int, - pub mipmaps: ::std::os::raw::c_int, - pub format: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Texture() { - assert_eq!( - ::std::mem::size_of::(), - 20usize, - concat!("Size of: ", stringify!(Texture)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Texture)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(height) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mipmaps as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(mipmaps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).format as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(format) - ) - ); -} -pub type Texture2D = Texture; -pub type TextureCubemap = Texture; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RenderTexture { - pub id: ::std::os::raw::c_uint, - pub texture: Texture, - pub depth: Texture, -} -#[test] -fn bindgen_test_layout_RenderTexture() { - assert_eq!( - ::std::mem::size_of::(), - 44usize, - concat!("Size of: ", stringify!(RenderTexture)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(RenderTexture)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).depth as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(depth) - ) - ); -} -pub type RenderTexture2D = RenderTexture; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct NPatchInfo { - pub source: Rectangle, - pub left: ::std::os::raw::c_int, - pub top: ::std::os::raw::c_int, - pub right: ::std::os::raw::c_int, - pub bottom: ::std::os::raw::c_int, - pub layout: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_NPatchInfo() { - assert_eq!( - ::std::mem::size_of::(), - 36usize, - concat!("Size of: ", stringify!(NPatchInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(NPatchInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).source as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(source) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).left as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(left) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).top as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(top) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).right as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(right) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bottom as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(bottom) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).layout as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(layout) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct CharInfo { - pub value: ::std::os::raw::c_int, - pub offsetX: ::std::os::raw::c_int, - pub offsetY: ::std::os::raw::c_int, - pub advanceX: ::std::os::raw::c_int, - pub image: Image, -} -#[test] -fn bindgen_test_layout_CharInfo() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(CharInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(CharInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).value as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(value) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offsetX as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(offsetX) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offsetY as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(offsetY) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).advanceX as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(advanceX) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).image as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(image) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Font { - pub baseSize: ::std::os::raw::c_int, - pub charsCount: ::std::os::raw::c_int, - pub charsPadding: ::std::os::raw::c_int, - pub texture: Texture2D, - pub recs: *mut Rectangle, - pub chars: *mut CharInfo, -} -#[test] -fn bindgen_test_layout_Font() { - assert_eq!( - ::std::mem::size_of::(), - 48usize, - concat!("Size of: ", stringify!(Font)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Font)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).baseSize as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(baseSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).charsCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(charsCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).charsPadding as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(charsPadding) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).recs as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(recs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).chars as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(chars) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Camera3D { - pub position: Vector3, - pub target: Vector3, - pub up: Vector3, - pub fovy: f32, - pub projection: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Camera3D() { - assert_eq!( - ::std::mem::size_of::(), - 44usize, - concat!("Size of: ", stringify!(Camera3D)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Camera3D)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).target as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).up as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(up) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).fovy as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(fovy) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).projection as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(projection) - ) - ); -} -pub type Camera = Camera3D; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Camera2D { - pub offset: Vector2, - pub target: Vector2, - pub rotation: f32, - pub zoom: f32, -} -#[test] -fn bindgen_test_layout_Camera2D() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Camera2D)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Camera2D)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offset as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).target as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rotation as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(rotation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).zoom as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(zoom) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Mesh { - pub vertexCount: ::std::os::raw::c_int, - pub triangleCount: ::std::os::raw::c_int, - pub vertices: *mut f32, - pub texcoords: *mut f32, - pub texcoords2: *mut f32, - pub normals: *mut f32, - pub tangents: *mut f32, - pub colors: *mut ::std::os::raw::c_uchar, - pub indices: *mut ::std::os::raw::c_ushort, - pub animVertices: *mut f32, - pub animNormals: *mut f32, - pub boneIds: *mut ::std::os::raw::c_int, - pub boneWeights: *mut f32, - pub vaoId: ::std::os::raw::c_uint, - pub vboId: *mut ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_Mesh() { - assert_eq!( - ::std::mem::size_of::(), - 112usize, - concat!("Size of: ", stringify!(Mesh)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Mesh)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vertexCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).triangleCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(triangleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertices as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(texcoords) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords2 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(texcoords2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).normals as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(normals) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).tangents as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(tangents) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).colors as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(colors) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).indices as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(indices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).animVertices as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(animVertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).animNormals as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(animNormals) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneIds as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(boneIds) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneWeights as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(boneWeights) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vaoId as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vaoId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vboId as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vboId) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Shader { - pub id: ::std::os::raw::c_uint, - pub locs: *mut ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Shader() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Shader)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Shader)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Shader), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).locs as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Shader), - "::", - stringify!(locs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct MaterialMap { - pub texture: Texture2D, - pub color: Color, - pub value: f32, -} -#[test] -fn bindgen_test_layout_MaterialMap() { - assert_eq!( - ::std::mem::size_of::(), - 28usize, - concat!("Size of: ", stringify!(MaterialMap)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(MaterialMap)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).color as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(color) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).value as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(value) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Material { - pub shader: Shader, - pub maps: *mut MaterialMap, - pub params: [f32; 4usize], -} -#[test] -fn bindgen_test_layout_Material() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(Material)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Material)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).shader as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(shader) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).maps as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(maps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).params as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(params) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Transform { - pub translation: Vector3, - pub rotation: Quaternion, - pub scale: Vector3, -} -#[test] -fn bindgen_test_layout_Transform() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(Transform)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Transform)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).translation as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(translation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rotation as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(rotation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scale as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(scale) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct BoneInfo { - pub name: [::std::os::raw::c_char; 32usize], - pub parent: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_BoneInfo() { - assert_eq!( - ::std::mem::size_of::(), - 36usize, - concat!("Size of: ", stringify!(BoneInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(BoneInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).name as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(BoneInfo), - "::", - stringify!(name) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).parent as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(BoneInfo), - "::", - stringify!(parent) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Model { - pub transform: Matrix, - pub meshCount: ::std::os::raw::c_int, - pub materialCount: ::std::os::raw::c_int, - pub meshes: *mut Mesh, - pub materials: *mut Material, - pub meshMaterial: *mut ::std::os::raw::c_int, - pub boneCount: ::std::os::raw::c_int, - pub bones: *mut BoneInfo, - pub bindPose: *mut Transform, -} -#[test] -fn bindgen_test_layout_Model() { - assert_eq!( - ::std::mem::size_of::(), - 120usize, - concat!("Size of: ", stringify!(Model)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Model)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).transform as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(transform) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshCount as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).materialCount as *const _ as usize }, - 68usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(materialCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshes as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshes) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).materials as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(materials) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshMaterial as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshMaterial) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneCount as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(boneCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bones as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(bones) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bindPose as *const _ as usize }, - 112usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(bindPose) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct ModelAnimation { - pub boneCount: ::std::os::raw::c_int, - pub frameCount: ::std::os::raw::c_int, - pub bones: *mut BoneInfo, - pub framePoses: *mut *mut Transform, -} -#[test] -fn bindgen_test_layout_ModelAnimation() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(ModelAnimation)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(ModelAnimation)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(boneCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).frameCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(frameCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bones as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(bones) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).framePoses as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(framePoses) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Ray { - pub position: Vector3, - pub direction: Vector3, -} -#[test] -fn bindgen_test_layout_Ray() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Ray)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Ray)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Ray), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).direction as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Ray), - "::", - stringify!(direction) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RayHitInfo { - pub hit: bool, - pub distance: f32, - pub position: Vector3, - pub normal: Vector3, -} -#[test] -fn bindgen_test_layout_RayHitInfo() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(RayHitInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(RayHitInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hit as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(hit) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).distance as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(distance) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).normal as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(normal) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct BoundingBox { - pub min: Vector3, - pub max: Vector3, -} -#[test] -fn bindgen_test_layout_BoundingBox() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(BoundingBox)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(BoundingBox)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).min as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(BoundingBox), - "::", - stringify!(min) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).max as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(BoundingBox), - "::", - stringify!(max) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Wave { - pub sampleCount: ::std::os::raw::c_uint, - pub sampleRate: ::std::os::raw::c_uint, - pub sampleSize: ::std::os::raw::c_uint, - pub channels: ::std::os::raw::c_uint, - pub data: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout_Wave() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Wave)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Wave)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleRate as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleRate) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleSize as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).channels as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(channels) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).data as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(data) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rAudioBuffer { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct AudioStream { - pub buffer: *mut rAudioBuffer, - pub sampleRate: ::std::os::raw::c_uint, - pub sampleSize: ::std::os::raw::c_uint, - pub channels: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_AudioStream() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(AudioStream)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(AudioStream)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).buffer as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(buffer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleRate as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(sampleRate) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleSize as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(sampleSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).channels as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(channels) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Sound { - pub stream: AudioStream, - pub sampleCount: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_Sound() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(Sound)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Sound)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stream as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Sound), - "::", - stringify!(stream) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Sound), - "::", - stringify!(sampleCount) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Music { - pub stream: AudioStream, - pub sampleCount: ::std::os::raw::c_uint, - pub looping: bool, - pub ctxType: ::std::os::raw::c_int, - pub ctxData: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout_Music() { - assert_eq!( - ::std::mem::size_of::(), - 48usize, - concat!("Size of: ", stringify!(Music)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Music)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stream as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(stream) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(sampleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).looping as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(looping) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ctxType as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(ctxType) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ctxData as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(ctxData) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VrDeviceInfo { - pub hResolution: ::std::os::raw::c_int, - pub vResolution: ::std::os::raw::c_int, - pub hScreenSize: f32, - pub vScreenSize: f32, - pub vScreenCenter: f32, - pub eyeToScreenDistance: f32, - pub lensSeparationDistance: f32, - pub interpupillaryDistance: f32, - pub lensDistortionValues: [f32; 4usize], - pub chromaAbCorrection: [f32; 4usize], -} -#[test] -fn bindgen_test_layout_VrDeviceInfo() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(VrDeviceInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(VrDeviceInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hResolution as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(hResolution) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vResolution as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vResolution) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hScreenSize as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(hScreenSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vScreenSize as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vScreenSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vScreenCenter as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vScreenCenter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).eyeToScreenDistance as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(eyeToScreenDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).lensSeparationDistance as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(lensSeparationDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).interpupillaryDistance as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(interpupillaryDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).lensDistortionValues as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(lensDistortionValues) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).chromaAbCorrection as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(chromaAbCorrection) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VrStereoConfig { - pub projection: [Matrix; 2usize], - pub viewOffset: [Matrix; 2usize], - pub leftLensCenter: [f32; 2usize], - pub rightLensCenter: [f32; 2usize], - pub leftScreenCenter: [f32; 2usize], - pub rightScreenCenter: [f32; 2usize], - pub scale: [f32; 2usize], - pub scaleIn: [f32; 2usize], -} -#[test] -fn bindgen_test_layout_VrStereoConfig() { - assert_eq!( - ::std::mem::size_of::(), - 304usize, - concat!("Size of: ", stringify!(VrStereoConfig)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(VrStereoConfig)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).projection as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(projection) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).viewOffset as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(viewOffset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).leftLensCenter as *const _ as usize }, - 256usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(leftLensCenter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rightLensCenter as *const _ as usize }, - 264usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(rightLensCenter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).leftScreenCenter as *const _ as usize }, - 272usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(leftScreenCenter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).rightScreenCenter as *const _ as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(rightScreenCenter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scale as *const _ as usize }, - 288usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(scale) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scaleIn as *const _ as usize }, - 296usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(scaleIn) - ) - ); -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum ConfigFlags { - FLAG_VSYNC_HINT = 64, - FLAG_FULLSCREEN_MODE = 2, - FLAG_WINDOW_RESIZABLE = 4, - FLAG_WINDOW_UNDECORATED = 8, - FLAG_WINDOW_HIDDEN = 128, - FLAG_WINDOW_MINIMIZED = 512, - FLAG_WINDOW_MAXIMIZED = 1024, - FLAG_WINDOW_UNFOCUSED = 2048, - FLAG_WINDOW_TOPMOST = 4096, - FLAG_WINDOW_ALWAYS_RUN = 256, - FLAG_WINDOW_TRANSPARENT = 16, - FLAG_WINDOW_HIGHDPI = 8192, - FLAG_MSAA_4X_HINT = 32, - FLAG_INTERLACED_HINT = 65536, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum TraceLogLevel { - LOG_ALL = 0, - LOG_TRACE = 1, - LOG_DEBUG = 2, - LOG_INFO = 3, - LOG_WARNING = 4, - LOG_ERROR = 5, - LOG_FATAL = 6, - LOG_NONE = 7, -} -impl KeyboardKey { - pub const KEY_MENU: KeyboardKey = KeyboardKey::KEY_R; -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum KeyboardKey { - KEY_NULL = 0, - KEY_APOSTROPHE = 39, - KEY_COMMA = 44, - KEY_MINUS = 45, - KEY_PERIOD = 46, - KEY_SLASH = 47, - KEY_ZERO = 48, - KEY_ONE = 49, - KEY_TWO = 50, - KEY_THREE = 51, - KEY_FOUR = 52, - KEY_FIVE = 53, - KEY_SIX = 54, - KEY_SEVEN = 55, - KEY_EIGHT = 56, - KEY_NINE = 57, - KEY_SEMICOLON = 59, - KEY_EQUAL = 61, - KEY_A = 65, - KEY_B = 66, - KEY_C = 67, - KEY_D = 68, - KEY_E = 69, - KEY_F = 70, - KEY_G = 71, - KEY_H = 72, - KEY_I = 73, - KEY_J = 74, - KEY_K = 75, - KEY_L = 76, - KEY_M = 77, - KEY_N = 78, - KEY_O = 79, - KEY_P = 80, - KEY_Q = 81, - KEY_R = 82, - KEY_S = 83, - KEY_T = 84, - KEY_U = 85, - KEY_V = 86, - KEY_W = 87, - KEY_X = 88, - KEY_Y = 89, - KEY_Z = 90, - KEY_SPACE = 32, - KEY_ESCAPE = 256, - KEY_ENTER = 257, - KEY_TAB = 258, - KEY_BACKSPACE = 259, - KEY_INSERT = 260, - KEY_DELETE = 261, - KEY_RIGHT = 262, - KEY_LEFT = 263, - KEY_DOWN = 264, - KEY_UP = 265, - KEY_PAGE_UP = 266, - KEY_PAGE_DOWN = 267, - KEY_HOME = 268, - KEY_END = 269, - KEY_CAPS_LOCK = 280, - KEY_SCROLL_LOCK = 281, - KEY_NUM_LOCK = 282, - KEY_PRINT_SCREEN = 283, - KEY_PAUSE = 284, - KEY_F1 = 290, - KEY_F2 = 291, - KEY_F3 = 292, - KEY_F4 = 293, - KEY_F5 = 294, - KEY_F6 = 295, - KEY_F7 = 296, - KEY_F8 = 297, - KEY_F9 = 298, - KEY_F10 = 299, - KEY_F11 = 300, - KEY_F12 = 301, - KEY_LEFT_SHIFT = 340, - KEY_LEFT_CONTROL = 341, - KEY_LEFT_ALT = 342, - KEY_LEFT_SUPER = 343, - KEY_RIGHT_SHIFT = 344, - KEY_RIGHT_CONTROL = 345, - KEY_RIGHT_ALT = 346, - KEY_RIGHT_SUPER = 347, - KEY_KB_MENU = 348, - KEY_LEFT_BRACKET = 91, - KEY_BACKSLASH = 92, - KEY_RIGHT_BRACKET = 93, - KEY_GRAVE = 96, - KEY_KP_0 = 320, - KEY_KP_1 = 321, - KEY_KP_2 = 322, - KEY_KP_3 = 323, - KEY_KP_4 = 324, - KEY_KP_5 = 325, - KEY_KP_6 = 326, - KEY_KP_7 = 327, - KEY_KP_8 = 328, - KEY_KP_9 = 329, - KEY_KP_DECIMAL = 330, - KEY_KP_DIVIDE = 331, - KEY_KP_MULTIPLY = 332, - KEY_KP_SUBTRACT = 333, - KEY_KP_ADD = 334, - KEY_KP_ENTER = 335, - KEY_KP_EQUAL = 336, - KEY_BACK = 4, - KEY_VOLUME_UP = 24, - KEY_VOLUME_DOWN = 25, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum MouseButton { - MOUSE_LEFT_BUTTON = 0, - MOUSE_RIGHT_BUTTON = 1, - MOUSE_MIDDLE_BUTTON = 2, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum MouseCursor { - MOUSE_CURSOR_DEFAULT = 0, - MOUSE_CURSOR_ARROW = 1, - MOUSE_CURSOR_IBEAM = 2, - MOUSE_CURSOR_CROSSHAIR = 3, - MOUSE_CURSOR_POINTING_HAND = 4, - MOUSE_CURSOR_RESIZE_EW = 5, - MOUSE_CURSOR_RESIZE_NS = 6, - MOUSE_CURSOR_RESIZE_NWSE = 7, - MOUSE_CURSOR_RESIZE_NESW = 8, - MOUSE_CURSOR_RESIZE_ALL = 9, - MOUSE_CURSOR_NOT_ALLOWED = 10, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GamepadButton { - GAMEPAD_BUTTON_UNKNOWN = 0, - GAMEPAD_BUTTON_LEFT_FACE_UP = 1, - GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2, - GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3, - GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4, - GAMEPAD_BUTTON_RIGHT_FACE_UP = 5, - GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6, - GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7, - GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8, - GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9, - GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10, - GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11, - GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12, - GAMEPAD_BUTTON_MIDDLE_LEFT = 13, - GAMEPAD_BUTTON_MIDDLE = 14, - GAMEPAD_BUTTON_MIDDLE_RIGHT = 15, - GAMEPAD_BUTTON_LEFT_THUMB = 16, - GAMEPAD_BUTTON_RIGHT_THUMB = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GamepadAxis { - GAMEPAD_AXIS_LEFT_X = 0, - GAMEPAD_AXIS_LEFT_Y = 1, - GAMEPAD_AXIS_RIGHT_X = 2, - GAMEPAD_AXIS_RIGHT_Y = 3, - GAMEPAD_AXIS_LEFT_TRIGGER = 4, - GAMEPAD_AXIS_RIGHT_TRIGGER = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum MaterialMapIndex { - MATERIAL_MAP_ALBEDO = 0, - MATERIAL_MAP_METALNESS = 1, - MATERIAL_MAP_NORMAL = 2, - MATERIAL_MAP_ROUGHNESS = 3, - MATERIAL_MAP_OCCLUSION = 4, - MATERIAL_MAP_EMISSION = 5, - MATERIAL_MAP_HEIGHT = 6, - MATERIAL_MAP_BRDG = 7, - MATERIAL_MAP_CUBEMAP = 8, - MATERIAL_MAP_IRRADIANCE = 9, - MATERIAL_MAP_PREFILTER = 10, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum ShaderLocationIndex { - SHADER_LOC_VERTEX_POSITION = 0, - SHADER_LOC_VERTEX_TEXCOORD01 = 1, - SHADER_LOC_VERTEX_TEXCOORD02 = 2, - SHADER_LOC_VERTEX_NORMAL = 3, - SHADER_LOC_VERTEX_TANGENT = 4, - SHADER_LOC_VERTEX_COLOR = 5, - SHADER_LOC_MATRIX_MVP = 6, - SHADER_LOC_MATRIX_VIEW = 7, - SHADER_LOC_MATRIX_PROJECTION = 8, - SHADER_LOC_MATRIX_MODEL = 9, - SHADER_LOC_MATRIX_NORMAL = 10, - SHADER_LOC_VECTOR_VIEW = 11, - SHADER_LOC_COLOR_DIFFUSE = 12, - SHADER_LOC_COLOR_SPECULAR = 13, - SHADER_LOC_COLOR_AMBIENT = 14, - SHADER_LOC_MAP_ALBEDO = 15, - SHADER_LOC_MAP_METALNESS = 16, - SHADER_LOC_MAP_NORMAL = 17, - SHADER_LOC_MAP_ROUGHNESS = 18, - SHADER_LOC_MAP_OCCLUSION = 19, - SHADER_LOC_MAP_EMISSION = 20, - SHADER_LOC_MAP_HEIGHT = 21, - SHADER_LOC_MAP_CUBEMAP = 22, - SHADER_LOC_MAP_IRRADIANCE = 23, - SHADER_LOC_MAP_PREFILTER = 24, - SHADER_LOC_MAP_BRDF = 25, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum ShaderUniformDataType { - SHADER_UNIFORM_FLOAT = 0, - SHADER_UNIFORM_VEC2 = 1, - SHADER_UNIFORM_VEC3 = 2, - SHADER_UNIFORM_VEC4 = 3, - SHADER_UNIFORM_INT = 4, - SHADER_UNIFORM_IVEC2 = 5, - SHADER_UNIFORM_IVEC3 = 6, - SHADER_UNIFORM_IVEC4 = 7, - SHADER_UNIFORM_SAMPLER2D = 8, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum PixelFormat { - PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, - PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2, - PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3, - PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4, - PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5, - PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6, - PIXELFORMAT_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7, - PIXELFORMAT_UNCOMPRESSED_R32 = 8, - PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9, - PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10, - PIXELFORMAT_COMPRESSED_DXT1_RGB = 11, - PIXELFORMAT_COMPRESSED_DXT1_RGBA = 12, - PIXELFORMAT_COMPRESSED_DXT3_RGBA = 13, - PIXELFORMAT_COMPRESSED_DXT5_RGBA = 14, - PIXELFORMAT_COMPRESSED_ETC1_RGB = 15, - PIXELFORMAT_COMPRESSED_ETC2_RGB = 16, - PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 17, - PIXELFORMAT_COMPRESSED_PVRT_RGB = 18, - PIXELFORMAT_COMPRESSED_PVRT_RGBA = 19, - PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 20, - PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 21, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum TextureFilter { - TEXTURE_FILTER_POINT = 0, - TEXTURE_FILTER_BILINEAR = 1, - TEXTURE_FILTER_TRILINEAR = 2, - TEXTURE_FILTER_ANISOTROPIC_4X = 3, - TEXTURE_FILTER_ANISOTROPIC_8X = 4, - TEXTURE_FILTER_ANISOTROPIC_16X = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum TextureWrap { - TEXTURE_WRAP_REPEAT = 0, - TEXTURE_WRAP_CLAMP = 1, - TEXTURE_WRAP_MIRROR_REPEAT = 2, - TEXTURE_WRAP_MIRROR_CLAMP = 3, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum CubemapLayout { - CUBEMAP_LAYOUT_AUTO_DETECT = 0, - CUBEMAP_LAYOUT_LINE_VERTICAL = 1, - CUBEMAP_LAYOUT_LINE_HORIZONTAL = 2, - CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR = 3, - CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE = 4, - CUBEMAP_LAYOUT_PANORAMA = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum FontType { - FONT_DEFAULT = 0, - FONT_BITMAP = 1, - FONT_SDF = 2, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum BlendMode { - BLEND_ALPHA = 0, - BLEND_ADDITIVE = 1, - BLEND_MULTIPLIED = 2, - BLEND_ADD_COLORS = 3, - BLEND_SUBTRACT_COLORS = 4, - BLEND_CUSTOM = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum Gestures { - GESTURE_NONE = 0, - GESTURE_TAP = 1, - GESTURE_DOUBLETAP = 2, - GESTURE_HOLD = 4, - GESTURE_DRAG = 8, - GESTURE_SWIPE_RIGHT = 16, - GESTURE_SWIPE_LEFT = 32, - GESTURE_SWIPE_UP = 64, - GESTURE_SWIPE_DOWN = 128, - GESTURE_PINCH_IN = 256, - GESTURE_PINCH_OUT = 512, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum CameraMode { - CAMERA_CUSTOM = 0, - CAMERA_FREE = 1, - CAMERA_ORBITAL = 2, - CAMERA_FIRST_PERSON = 3, - CAMERA_THIRD_PERSON = 4, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum CameraProjection { - CAMERA_PERSPECTIVE = 0, - CAMERA_ORTHOGRAPHIC = 1, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum NPatchLayout { - NPATCH_NINE_PATCH = 0, - NPATCH_THREE_PATCH_VERTICAL = 1, - NPATCH_THREE_PATCH_HORIZONTAL = 2, -} -pub type TraceLogCallback = ::std::option::Option< - unsafe extern "C" fn( - logLevel: ::std::os::raw::c_int, - text: *const ::std::os::raw::c_char, - args: *mut __va_list_tag, - ), ->; -pub type LoadFileDataCallback = ::std::option::Option< - unsafe extern "C" fn( - fileName: *const ::std::os::raw::c_char, - bytesRead: *mut ::std::os::raw::c_uint, - ) -> *mut ::std::os::raw::c_uchar, ->; -pub type SaveFileDataCallback = ::std::option::Option< - unsafe extern "C" fn( - fileName: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_void, - bytesToWrite: ::std::os::raw::c_uint, - ) -> bool, ->; -pub type LoadFileTextCallback = ::std::option::Option< - unsafe extern "C" fn(fileName: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char, ->; -pub type SaveFileTextCallback = ::std::option::Option< - unsafe extern "C" fn( - fileName: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> bool, ->; -extern "C" { - pub fn InitWindow( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - title: *const ::std::os::raw::c_char, - ); -} -extern "C" { - pub fn WindowShouldClose() -> bool; -} -extern "C" { - pub fn CloseWindow(); -} -extern "C" { - pub fn IsWindowReady() -> bool; -} -extern "C" { - pub fn IsWindowFullscreen() -> bool; -} -extern "C" { - pub fn IsWindowHidden() -> bool; -} -extern "C" { - pub fn IsWindowMinimized() -> bool; -} -extern "C" { - pub fn IsWindowMaximized() -> bool; -} -extern "C" { - pub fn IsWindowFocused() -> bool; -} -extern "C" { - pub fn IsWindowResized() -> bool; -} -extern "C" { - pub fn IsWindowState(flag: ::std::os::raw::c_uint) -> bool; -} -extern "C" { - pub fn SetWindowState(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn ClearWindowState(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn ToggleFullscreen(); -} -extern "C" { - pub fn MaximizeWindow(); -} -extern "C" { - pub fn MinimizeWindow(); -} -extern "C" { - pub fn RestoreWindow(); -} -extern "C" { - pub fn SetWindowIcon(image: Image); -} -extern "C" { - pub fn SetWindowTitle(title: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn SetWindowPosition(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowMonitor(monitor: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowMinSize(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowSize(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetWindowHandle() -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn GetScreenWidth() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetScreenHeight() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorCount() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCurrentMonitor() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPosition(monitor: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn GetMonitorWidth(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorHeight(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPhysicalWidth(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPhysicalHeight(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorRefreshRate(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetWindowPosition() -> Vector2; -} -extern "C" { - pub fn GetWindowScaleDPI() -> Vector2; -} -extern "C" { - pub fn GetMonitorName(monitor: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn SetClipboardText(text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GetClipboardText() -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn ShowCursor(); -} -extern "C" { - pub fn HideCursor(); -} -extern "C" { - pub fn IsCursorHidden() -> bool; -} -extern "C" { - pub fn EnableCursor(); -} -extern "C" { - pub fn DisableCursor(); -} -extern "C" { - pub fn IsCursorOnScreen() -> bool; -} -extern "C" { - pub fn ClearBackground(color: Color); -} -extern "C" { - pub fn BeginDrawing(); -} -extern "C" { - pub fn EndDrawing(); -} -extern "C" { - pub fn BeginMode2D(camera: Camera2D); -} -extern "C" { - pub fn EndMode2D(); -} -extern "C" { - pub fn BeginMode3D(camera: Camera3D); -} -extern "C" { - pub fn EndMode3D(); -} -extern "C" { - pub fn BeginTextureMode(target: RenderTexture2D); -} -extern "C" { - pub fn EndTextureMode(); -} -extern "C" { - pub fn BeginShaderMode(shader: Shader); -} -extern "C" { - pub fn EndShaderMode(); -} -extern "C" { - pub fn BeginBlendMode(mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn EndBlendMode(); -} -extern "C" { - pub fn BeginScissorMode( - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn EndScissorMode(); -} -extern "C" { - pub fn BeginVrStereoMode(config: VrStereoConfig); -} -extern "C" { - pub fn EndVrStereoMode(); -} -extern "C" { - pub fn LoadVrStereoConfig(device: VrDeviceInfo) -> VrStereoConfig; -} -extern "C" { - pub fn UnloadVrStereoConfig(config: VrStereoConfig); -} -extern "C" { - pub fn LoadShader( - vsFileName: *const ::std::os::raw::c_char, - fsFileName: *const ::std::os::raw::c_char, - ) -> Shader; -} -extern "C" { - pub fn LoadShaderFromMemory( - vsCode: *const ::std::os::raw::c_char, - fsCode: *const ::std::os::raw::c_char, - ) -> Shader; -} -extern "C" { - pub fn GetShaderLocation( - shader: Shader, - uniformName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetShaderLocationAttrib( - shader: Shader, - attribName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn SetShaderValue( - shader: Shader, - locIndex: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - uniformType: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShaderValueV( - shader: Shader, - locIndex: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - uniformType: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShaderValueMatrix(shader: Shader, locIndex: ::std::os::raw::c_int, mat: Matrix); -} -extern "C" { - pub fn SetShaderValueTexture( - shader: Shader, - locIndex: ::std::os::raw::c_int, - texture: Texture2D, - ); -} -extern "C" { - pub fn UnloadShader(shader: Shader); -} -extern "C" { - pub fn GetMouseRay(mousePosition: Vector2, camera: Camera) -> Ray; -} -extern "C" { - pub fn GetCameraMatrix(camera: Camera) -> Matrix; -} -extern "C" { - pub fn GetCameraMatrix2D(camera: Camera2D) -> Matrix; -} -extern "C" { - pub fn GetWorldToScreen(position: Vector3, camera: Camera) -> Vector2; -} -extern "C" { - pub fn GetWorldToScreenEx( - position: Vector3, - camera: Camera, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> Vector2; -} -extern "C" { - pub fn GetWorldToScreen2D(position: Vector2, camera: Camera2D) -> Vector2; -} -extern "C" { - pub fn GetScreenToWorld2D(position: Vector2, camera: Camera2D) -> Vector2; -} -extern "C" { - pub fn SetTargetFPS(fps: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetFPS() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetFrameTime() -> f32; -} -extern "C" { - pub fn GetTime() -> f64; -} -extern "C" { - pub fn GetRandomValue( - min: ::std::os::raw::c_int, - max: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TakeScreenshot(fileName: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn SetConfigFlags(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn TraceLog(logLevel: ::std::os::raw::c_int, text: *const ::std::os::raw::c_char, ...); -} -extern "C" { - pub fn SetTraceLogLevel(logLevel: ::std::os::raw::c_int); -} -extern "C" { - pub fn MemAlloc(size: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn MemRealloc( - ptr: *mut ::std::os::raw::c_void, - size: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn MemFree(ptr: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn SetTraceLogCallback(callback: TraceLogCallback); -} -extern "C" { - pub fn SetLoadFileDataCallback(callback: LoadFileDataCallback); -} -extern "C" { - pub fn SetSaveFileDataCallback(callback: SaveFileDataCallback); -} -extern "C" { - pub fn SetLoadFileTextCallback(callback: LoadFileTextCallback); -} -extern "C" { - pub fn SetSaveFileTextCallback(callback: SaveFileTextCallback); -} -extern "C" { - pub fn LoadFileData( - fileName: *const ::std::os::raw::c_char, - bytesRead: *mut ::std::os::raw::c_uint, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn UnloadFileData(data: *mut ::std::os::raw::c_uchar); -} -extern "C" { - pub fn SaveFileData( - fileName: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_void, - bytesToWrite: ::std::os::raw::c_uint, - ) -> bool; -} -extern "C" { - pub fn LoadFileText(fileName: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn UnloadFileText(text: *mut ::std::os::raw::c_uchar); -} -extern "C" { - pub fn SaveFileText( - fileName: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn FileExists(fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn DirectoryExists(dirPath: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn IsFileExtension( - fileName: *const ::std::os::raw::c_char, - ext: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn GetFileExtension( - fileName: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetFileName(filePath: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetFileNameWithoutExt( - filePath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetDirectoryPath( - filePath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetPrevDirectoryPath( - dirPath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetWorkingDirectory() -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetDirectoryFiles( - dirPath: *const ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ClearDirectoryFiles(); -} -extern "C" { - pub fn ChangeDirectory(dir: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn IsFileDropped() -> bool; -} -extern "C" { - pub fn GetDroppedFiles(count: *mut ::std::os::raw::c_int) -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ClearDroppedFiles(); -} -extern "C" { - pub fn GetFileModTime(fileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn CompressData( - data: *mut ::std::os::raw::c_uchar, - dataLength: ::std::os::raw::c_int, - compDataLength: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn DecompressData( - compData: *mut ::std::os::raw::c_uchar, - compDataLength: ::std::os::raw::c_int, - dataLength: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn SaveStorageValue(position: ::std::os::raw::c_uint, value: ::std::os::raw::c_int) - -> bool; -} -extern "C" { - pub fn LoadStorageValue(position: ::std::os::raw::c_uint) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn OpenURL(url: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn IsKeyPressed(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyDown(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyReleased(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyUp(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn SetExitKey(key: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetKeyPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCharPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsGamepadAvailable(gamepad: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsGamepadName( - gamepad: ::std::os::raw::c_int, - name: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn GetGamepadName(gamepad: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn IsGamepadButtonPressed( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonDown( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonReleased( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonUp(gamepad: ::std::os::raw::c_int, button: ::std::os::raw::c_int) - -> bool; -} -extern "C" { - pub fn GetGamepadButtonPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGamepadAxisCount(gamepad: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGamepadAxisMovement( - gamepad: ::std::os::raw::c_int, - axis: ::std::os::raw::c_int, - ) -> f32; -} -extern "C" { - pub fn SetGamepadMappings(mappings: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsMouseButtonPressed(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonDown(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonReleased(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonUp(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn GetMouseX() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMouseY() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMousePosition() -> Vector2; -} -extern "C" { - pub fn SetMousePosition(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetMouseOffset(offsetX: ::std::os::raw::c_int, offsetY: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetMouseScale(scaleX: f32, scaleY: f32); -} -extern "C" { - pub fn GetMouseWheelMove() -> f32; -} -extern "C" { - pub fn SetMouseCursor(cursor: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetTouchX() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchY() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchPosition(index: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn SetGesturesEnabled(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn IsGestureDetected(gesture: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn GetGestureDetected() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchPointsCount() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGestureHoldDuration() -> f32; -} -extern "C" { - pub fn GetGestureDragVector() -> Vector2; -} -extern "C" { - pub fn GetGestureDragAngle() -> f32; -} -extern "C" { - pub fn GetGesturePinchVector() -> Vector2; -} -extern "C" { - pub fn GetGesturePinchAngle() -> f32; -} -extern "C" { - pub fn SetCameraMode(camera: Camera, mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn UpdateCamera(camera: *mut Camera); -} -extern "C" { - pub fn SetCameraPanControl(keyPan: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraAltControl(keyAlt: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraSmoothZoomControl(keySmoothZoom: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraMoveControls( - keyFront: ::std::os::raw::c_int, - keyBack: ::std::os::raw::c_int, - keyRight: ::std::os::raw::c_int, - keyLeft: ::std::os::raw::c_int, - keyUp: ::std::os::raw::c_int, - keyDown: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShapesTexture(texture: Texture2D, source: Rectangle); -} -extern "C" { - pub fn DrawPixel(posX: ::std::os::raw::c_int, posY: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawPixelV(position: Vector2, color: Color); -} -extern "C" { - pub fn DrawLine( - startPosX: ::std::os::raw::c_int, - startPosY: ::std::os::raw::c_int, - endPosX: ::std::os::raw::c_int, - endPosY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawLineV(startPos: Vector2, endPos: Vector2, color: Color); -} -extern "C" { - pub fn DrawLineEx(startPos: Vector2, endPos: Vector2, thick: f32, color: Color); -} -extern "C" { - pub fn DrawLineBezier(startPos: Vector2, endPos: Vector2, thick: f32, color: Color); -} -extern "C" { - pub fn DrawLineBezierQuad( - startPos: Vector2, - endPos: Vector2, - controlPos: Vector2, - thick: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawLineStrip(points: *mut Vector2, pointsCount: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawCircle( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleSector( - center: Vector2, - radius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleSectorLines( - center: Vector2, - radius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleGradient( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawCircleV(center: Vector2, radius: f32, color: Color); -} -extern "C" { - pub fn DrawCircleLines( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawEllipse( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radiusH: f32, - radiusV: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawEllipseLines( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radiusH: f32, - radiusV: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawRing( - center: Vector2, - innerRadius: f32, - outerRadius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRingLines( - center: Vector2, - innerRadius: f32, - outerRadius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangle( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleV(position: Vector2, size: Vector2, color: Color); -} -extern "C" { - pub fn DrawRectangleRec(rec: Rectangle, color: Color); -} -extern "C" { - pub fn DrawRectanglePro(rec: Rectangle, origin: Vector2, rotation: f32, color: Color); -} -extern "C" { - pub fn DrawRectangleGradientV( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawRectangleGradientH( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawRectangleGradientEx( - rec: Rectangle, - col1: Color, - col2: Color, - col3: Color, - col4: Color, - ); -} -extern "C" { - pub fn DrawRectangleLines( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleLinesEx(rec: Rectangle, lineThick: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawRectangleRounded( - rec: Rectangle, - roundness: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleRoundedLines( - rec: Rectangle, - roundness: f32, - segments: ::std::os::raw::c_int, - lineThick: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawTriangle(v1: Vector2, v2: Vector2, v3: Vector2, color: Color); -} -extern "C" { - pub fn DrawTriangleLines(v1: Vector2, v2: Vector2, v3: Vector2, color: Color); -} -extern "C" { - pub fn DrawTriangleFan(points: *mut Vector2, pointsCount: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawTriangleStrip( - points: *mut Vector2, - pointsCount: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawPoly( - center: Vector2, - sides: ::std::os::raw::c_int, - radius: f32, - rotation: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawPolyLines( - center: Vector2, - sides: ::std::os::raw::c_int, - radius: f32, - rotation: f32, - color: Color, - ); -} -extern "C" { - pub fn CheckCollisionRecs(rec1: Rectangle, rec2: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionCircles( - center1: Vector2, - radius1: f32, - center2: Vector2, - radius2: f32, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionCircleRec(center: Vector2, radius: f32, rec: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionPointRec(point: Vector2, rec: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionPointCircle(point: Vector2, center: Vector2, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionPointTriangle( - point: Vector2, - p1: Vector2, - p2: Vector2, - p3: Vector2, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionLines( - startPos1: Vector2, - endPos1: Vector2, - startPos2: Vector2, - endPos2: Vector2, - collisionPoint: *mut Vector2, - ) -> bool; -} -extern "C" { - pub fn GetCollisionRec(rec1: Rectangle, rec2: Rectangle) -> Rectangle; -} -extern "C" { - pub fn LoadImage(fileName: *const ::std::os::raw::c_char) -> Image; -} -extern "C" { - pub fn LoadImageRaw( - fileName: *const ::std::os::raw::c_char, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - headerSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn LoadImageAnim( - fileName: *const ::std::os::raw::c_char, - frames: *mut ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn LoadImageFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn UnloadImage(image: Image); -} -extern "C" { - pub fn ExportImage(image: Image, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn ExportImageAsCode(image: Image, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GenImageColor( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientV( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - top: Color, - bottom: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientH( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - left: Color, - right: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientRadial( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - density: f32, - inner: Color, - outer: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageChecked( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - checksX: ::std::os::raw::c_int, - checksY: ::std::os::raw::c_int, - col1: Color, - col2: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageWhiteNoise( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - factor: f32, - ) -> Image; -} -extern "C" { - pub fn GenImagePerlinNoise( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - scale: f32, - ) -> Image; -} -extern "C" { - pub fn GenImageCellular( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - tileSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn ImageCopy(image: Image) -> Image; -} -extern "C" { - pub fn ImageFromImage(image: Image, rec: Rectangle) -> Image; -} -extern "C" { - pub fn ImageText( - text: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - color: Color, - ) -> Image; -} -extern "C" { - pub fn ImageTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - fontSize: f32, - spacing: f32, - tint: Color, - ) -> Image; -} -extern "C" { - pub fn ImageFormat(image: *mut Image, newFormat: ::std::os::raw::c_int); -} -extern "C" { - pub fn ImageToPOT(image: *mut Image, fill: Color); -} -extern "C" { - pub fn ImageCrop(image: *mut Image, crop: Rectangle); -} -extern "C" { - pub fn ImageAlphaCrop(image: *mut Image, threshold: f32); -} -extern "C" { - pub fn ImageAlphaClear(image: *mut Image, color: Color, threshold: f32); -} -extern "C" { - pub fn ImageAlphaMask(image: *mut Image, alphaMask: Image); -} -extern "C" { - pub fn ImageAlphaPremultiply(image: *mut Image); -} -extern "C" { - pub fn ImageResize( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageResizeNN( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageResizeCanvas( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - fill: Color, - ); -} -extern "C" { - pub fn ImageMipmaps(image: *mut Image); -} -extern "C" { - pub fn ImageDither( - image: *mut Image, - rBpp: ::std::os::raw::c_int, - gBpp: ::std::os::raw::c_int, - bBpp: ::std::os::raw::c_int, - aBpp: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageFlipVertical(image: *mut Image); -} -extern "C" { - pub fn ImageFlipHorizontal(image: *mut Image); -} -extern "C" { - pub fn ImageRotateCW(image: *mut Image); -} -extern "C" { - pub fn ImageRotateCCW(image: *mut Image); -} -extern "C" { - pub fn ImageColorTint(image: *mut Image, color: Color); -} -extern "C" { - pub fn ImageColorInvert(image: *mut Image); -} -extern "C" { - pub fn ImageColorGrayscale(image: *mut Image); -} -extern "C" { - pub fn ImageColorContrast(image: *mut Image, contrast: f32); -} -extern "C" { - pub fn ImageColorBrightness(image: *mut Image, brightness: ::std::os::raw::c_int); -} -extern "C" { - pub fn ImageColorReplace(image: *mut Image, color: Color, replace: Color); -} -extern "C" { - pub fn LoadImageColors(image: Image) -> *mut Color; -} -extern "C" { - pub fn LoadImagePalette( - image: Image, - maxPaletteSize: ::std::os::raw::c_int, - colorsCount: *mut ::std::os::raw::c_int, - ) -> *mut Color; -} -extern "C" { - pub fn UnloadImageColors(colors: *mut Color); -} -extern "C" { - pub fn UnloadImagePalette(colors: *mut Color); -} -extern "C" { - pub fn GetImageAlphaBorder(image: Image, threshold: f32) -> Rectangle; -} -extern "C" { - pub fn ImageClearBackground(dst: *mut Image, color: Color); -} -extern "C" { - pub fn ImageDrawPixel( - dst: *mut Image, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawPixelV(dst: *mut Image, position: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawLine( - dst: *mut Image, - startPosX: ::std::os::raw::c_int, - startPosY: ::std::os::raw::c_int, - endPosX: ::std::os::raw::c_int, - endPosY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawLineV(dst: *mut Image, start: Vector2, end: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawCircle( - dst: *mut Image, - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawCircleV( - dst: *mut Image, - center: Vector2, - radius: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawRectangle( - dst: *mut Image, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawRectangleV(dst: *mut Image, position: Vector2, size: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawRectangleRec(dst: *mut Image, rec: Rectangle, color: Color); -} -extern "C" { - pub fn ImageDrawRectangleLines( - dst: *mut Image, - rec: Rectangle, - thick: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDraw( - dst: *mut Image, - src: Image, - srcRec: Rectangle, - dstRec: Rectangle, - tint: Color, - ); -} -extern "C" { - pub fn ImageDrawText( - dst: *mut Image, - text: *const ::std::os::raw::c_char, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawTextEx( - dst: *mut Image, - font: Font, - text: *const ::std::os::raw::c_char, - position: Vector2, - fontSize: f32, - spacing: f32, - tint: Color, - ); -} -extern "C" { - pub fn LoadTexture(fileName: *const ::std::os::raw::c_char) -> Texture2D; -} -extern "C" { - pub fn LoadTextureFromImage(image: Image) -> Texture2D; -} -extern "C" { - pub fn LoadTextureCubemap(image: Image, layout: ::std::os::raw::c_int) -> TextureCubemap; -} -extern "C" { - pub fn LoadRenderTexture( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> RenderTexture2D; -} -extern "C" { - pub fn UnloadTexture(texture: Texture2D); -} -extern "C" { - pub fn UnloadRenderTexture(target: RenderTexture2D); -} -extern "C" { - pub fn UpdateTexture(texture: Texture2D, pixels: *const ::std::os::raw::c_void); -} -extern "C" { - pub fn UpdateTextureRec( - texture: Texture2D, - rec: Rectangle, - pixels: *const ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn GetTextureData(texture: Texture2D) -> Image; -} -extern "C" { - pub fn GetScreenData() -> Image; -} -extern "C" { - pub fn GenTextureMipmaps(texture: *mut Texture2D); -} -extern "C" { - pub fn SetTextureFilter(texture: Texture2D, filter: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetTextureWrap(texture: Texture2D, wrap: ::std::os::raw::c_int); -} -extern "C" { - pub fn DrawTexture( - texture: Texture2D, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureV(texture: Texture2D, position: Vector2, tint: Color); -} -extern "C" { - pub fn DrawTextureEx( - texture: Texture2D, - position: Vector2, - rotation: f32, - scale: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureRec(texture: Texture2D, source: Rectangle, position: Vector2, tint: Color); -} -extern "C" { - pub fn DrawTextureQuad( - texture: Texture2D, - tiling: Vector2, - offset: Vector2, - quad: Rectangle, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureTiled( - texture: Texture2D, - source: Rectangle, - dest: Rectangle, - origin: Vector2, - rotation: f32, - scale: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTexturePro( - texture: Texture2D, - source: Rectangle, - dest: Rectangle, - origin: Vector2, - rotation: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureNPatch( - texture: Texture2D, - nPatchInfo: NPatchInfo, - dest: Rectangle, - origin: Vector2, - rotation: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTexturePoly( - texture: Texture2D, - center: Vector2, - points: *mut Vector2, - texcoords: *mut Vector2, - pointsCount: ::std::os::raw::c_int, - tint: Color, - ); -} -extern "C" { - pub fn Fade(color: Color, alpha: f32) -> Color; -} -extern "C" { - pub fn ColorToInt(color: Color) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ColorNormalize(color: Color) -> Vector4; -} -extern "C" { - pub fn ColorFromNormalized(normalized: Vector4) -> Color; -} -extern "C" { - pub fn ColorToHSV(color: Color) -> Vector3; -} -extern "C" { - pub fn ColorFromHSV(hue: f32, saturation: f32, value: f32) -> Color; -} -extern "C" { - pub fn ColorAlpha(color: Color, alpha: f32) -> Color; -} -extern "C" { - pub fn ColorAlphaBlend(dst: Color, src: Color, tint: Color) -> Color; -} -extern "C" { - pub fn GetColor(hexValue: ::std::os::raw::c_int) -> Color; -} -extern "C" { - pub fn GetPixelColor( - srcPtr: *mut ::std::os::raw::c_void, - format: ::std::os::raw::c_int, - ) -> Color; -} -extern "C" { - pub fn SetPixelColor( - dstPtr: *mut ::std::os::raw::c_void, - color: Color, - format: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GetPixelDataSize( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetFontDefault() -> Font; -} -extern "C" { - pub fn LoadFont(fileName: *const ::std::os::raw::c_char) -> Font; -} -extern "C" { - pub fn LoadFontEx( - fileName: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - ) -> Font; -} -extern "C" { - pub fn LoadFontFromImage(image: Image, key: Color, firstChar: ::std::os::raw::c_int) -> Font; -} -extern "C" { - pub fn LoadFontFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - ) -> Font; -} -extern "C" { - pub fn LoadFontData( - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - type_: ::std::os::raw::c_int, - ) -> *mut CharInfo; -} -extern "C" { - pub fn GenImageFontAtlas( - chars: *const CharInfo, - recs: *mut *mut Rectangle, - charsCount: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - padding: ::std::os::raw::c_int, - packMethod: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn UnloadFontData(chars: *mut CharInfo, charsCount: ::std::os::raw::c_int); -} -extern "C" { - pub fn UnloadFont(font: Font); -} -extern "C" { - pub fn DrawFPS(posX: ::std::os::raw::c_int, posY: ::std::os::raw::c_int); -} -extern "C" { - pub fn DrawText( - text: *const ::std::os::raw::c_char, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - position: Vector2, - fontSize: f32, - spacing: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextRec( - font: Font, - text: *const ::std::os::raw::c_char, - rec: Rectangle, - fontSize: f32, - spacing: f32, - wordWrap: bool, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextRecEx( - font: Font, - text: *const ::std::os::raw::c_char, - rec: Rectangle, - fontSize: f32, - spacing: f32, - wordWrap: bool, - tint: Color, - selectStart: ::std::os::raw::c_int, - selectLength: ::std::os::raw::c_int, - selectTint: Color, - selectBackTint: Color, - ); -} -extern "C" { - pub fn DrawTextCodepoint( - font: Font, - codepoint: ::std::os::raw::c_int, - position: Vector2, - fontSize: f32, - tint: Color, - ); -} -extern "C" { - pub fn MeasureText( - text: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn MeasureTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - fontSize: f32, - spacing: f32, - ) -> Vector2; -} -extern "C" { - pub fn GetGlyphIndex(font: Font, codepoint: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextCopy( - dst: *mut ::std::os::raw::c_char, - src: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextIsEqual( - text1: *const ::std::os::raw::c_char, - text2: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn TextLength(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn TextFormat(text: *const ::std::os::raw::c_char, ...) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextSubtext( - text: *const ::std::os::raw::c_char, - position: ::std::os::raw::c_int, - length: ::std::os::raw::c_int, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextReplace( - text: *mut ::std::os::raw::c_char, - replace: *const ::std::os::raw::c_char, - by: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn TextInsert( - text: *const ::std::os::raw::c_char, - insert: *const ::std::os::raw::c_char, - position: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn TextJoin( - textList: *mut *const ::std::os::raw::c_char, - count: ::std::os::raw::c_int, - delimiter: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextSplit( - text: *const ::std::os::raw::c_char, - delimiter: ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextAppend( - text: *mut ::std::os::raw::c_char, - append: *const ::std::os::raw::c_char, - position: *mut ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn TextFindIndex( - text: *const ::std::os::raw::c_char, - find: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextToUpper(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToLower(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToPascal(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToInteger(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextToUtf8( - codepoints: *mut ::std::os::raw::c_int, - length: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn GetCodepoints( - text: *const ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCodepointsCount(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetNextCodepoint( - text: *const ::std::os::raw::c_char, - bytesProcessed: *mut ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn CodepointToUtf8( - codepoint: ::std::os::raw::c_int, - byteLength: *mut ::std::os::raw::c_int, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn DrawLine3D(startPos: Vector3, endPos: Vector3, color: Color); -} -extern "C" { - pub fn DrawPoint3D(position: Vector3, color: Color); -} -extern "C" { - pub fn DrawCircle3D( - center: Vector3, - radius: f32, - rotationAxis: Vector3, - rotationAngle: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawTriangle3D(v1: Vector3, v2: Vector3, v3: Vector3, color: Color); -} -extern "C" { - pub fn DrawTriangleStrip3D( - points: *mut Vector3, - pointsCount: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCube(position: Vector3, width: f32, height: f32, length: f32, color: Color); -} -extern "C" { - pub fn DrawCubeV(position: Vector3, size: Vector3, color: Color); -} -extern "C" { - pub fn DrawCubeWires(position: Vector3, width: f32, height: f32, length: f32, color: Color); -} -extern "C" { - pub fn DrawCubeWiresV(position: Vector3, size: Vector3, color: Color); -} -extern "C" { - pub fn DrawCubeTexture( - texture: Texture2D, - position: Vector3, - width: f32, - height: f32, - length: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawSphere(centerPos: Vector3, radius: f32, color: Color); -} -extern "C" { - pub fn DrawSphereEx( - centerPos: Vector3, - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawSphereWires( - centerPos: Vector3, - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCylinder( - position: Vector3, - radiusTop: f32, - radiusBottom: f32, - height: f32, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCylinderWires( - position: Vector3, - radiusTop: f32, - radiusBottom: f32, - height: f32, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawPlane(centerPos: Vector3, size: Vector2, color: Color); -} -extern "C" { - pub fn DrawRay(ray: Ray, color: Color); -} -extern "C" { - pub fn DrawGrid(slices: ::std::os::raw::c_int, spacing: f32); -} -extern "C" { - pub fn LoadModel(fileName: *const ::std::os::raw::c_char) -> Model; -} -extern "C" { - pub fn LoadModelFromMesh(mesh: Mesh) -> Model; -} -extern "C" { - pub fn UnloadModel(model: Model); -} -extern "C" { - pub fn UnloadModelKeepMeshes(model: Model); -} -extern "C" { - pub fn UploadMesh(mesh: *mut Mesh, dynamic: bool); -} -extern "C" { - pub fn UpdateMeshBuffer( - mesh: Mesh, - index: ::std::os::raw::c_int, - data: *mut ::std::os::raw::c_void, - dataSize: ::std::os::raw::c_int, - offset: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn DrawMesh(mesh: Mesh, material: Material, transform: Matrix); -} -extern "C" { - pub fn DrawMeshInstanced( - mesh: Mesh, - material: Material, - transforms: *mut Matrix, - instances: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn UnloadMesh(mesh: Mesh); -} -extern "C" { - pub fn ExportMesh(mesh: Mesh, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn LoadMaterials( - fileName: *const ::std::os::raw::c_char, - materialCount: *mut ::std::os::raw::c_int, - ) -> *mut Material; -} -extern "C" { - pub fn LoadMaterialDefault() -> Material; -} -extern "C" { - pub fn UnloadMaterial(material: Material); -} -extern "C" { - pub fn SetMaterialTexture( - material: *mut Material, - mapType: ::std::os::raw::c_int, - texture: Texture2D, - ); -} -extern "C" { - pub fn SetModelMeshMaterial( - model: *mut Model, - meshId: ::std::os::raw::c_int, - materialId: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn LoadModelAnimations( - fileName: *const ::std::os::raw::c_char, - animsCount: *mut ::std::os::raw::c_int, - ) -> *mut ModelAnimation; -} -extern "C" { - pub fn UpdateModelAnimation(model: Model, anim: ModelAnimation, frame: ::std::os::raw::c_int); -} -extern "C" { - pub fn UnloadModelAnimation(anim: ModelAnimation); -} -extern "C" { - pub fn UnloadModelAnimations(animations: *mut ModelAnimation, count: ::std::os::raw::c_uint); -} -extern "C" { - pub fn IsModelAnimationValid(model: Model, anim: ModelAnimation) -> bool; -} -extern "C" { - pub fn GenMeshPoly(sides: ::std::os::raw::c_int, radius: f32) -> Mesh; -} -extern "C" { - pub fn GenMeshPlane( - width: f32, - length: f32, - resX: ::std::os::raw::c_int, - resZ: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshCube(width: f32, height: f32, length: f32) -> Mesh; -} -extern "C" { - pub fn GenMeshSphere( - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshHemiSphere( - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshCylinder(radius: f32, height: f32, slices: ::std::os::raw::c_int) -> Mesh; -} -extern "C" { - pub fn GenMeshTorus( - radius: f32, - size: f32, - radSeg: ::std::os::raw::c_int, - sides: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshKnot( - radius: f32, - size: f32, - radSeg: ::std::os::raw::c_int, - sides: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshHeightmap(heightmap: Image, size: Vector3) -> Mesh; -} -extern "C" { - pub fn GenMeshCubicmap(cubicmap: Image, cubeSize: Vector3) -> Mesh; -} -extern "C" { - pub fn MeshBoundingBox(mesh: Mesh) -> BoundingBox; -} -extern "C" { - pub fn MeshTangents(mesh: *mut Mesh); -} -extern "C" { - pub fn MeshBinormals(mesh: *mut Mesh); -} -extern "C" { - pub fn DrawModel(model: Model, position: Vector3, scale: f32, tint: Color); -} -extern "C" { - pub fn DrawModelEx( - model: Model, - position: Vector3, - rotationAxis: Vector3, - rotationAngle: f32, - scale: Vector3, - tint: Color, - ); -} -extern "C" { - pub fn DrawModelWires(model: Model, position: Vector3, scale: f32, tint: Color); -} -extern "C" { - pub fn DrawModelWiresEx( - model: Model, - position: Vector3, - rotationAxis: Vector3, - rotationAngle: f32, - scale: Vector3, - tint: Color, - ); -} -extern "C" { - pub fn DrawBoundingBox(box_: BoundingBox, color: Color); -} -extern "C" { - pub fn DrawBillboard( - camera: Camera, - texture: Texture2D, - center: Vector3, - size: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawBillboardRec( - camera: Camera, - texture: Texture2D, - source: Rectangle, - center: Vector3, - size: f32, - tint: Color, - ); -} -extern "C" { - pub fn CheckCollisionSpheres( - center1: Vector3, - radius1: f32, - center2: Vector3, - radius2: f32, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionBoxes(box1: BoundingBox, box2: BoundingBox) -> bool; -} -extern "C" { - pub fn CheckCollisionBoxSphere(box_: BoundingBox, center: Vector3, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionRaySphere(ray: Ray, center: Vector3, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionRaySphereEx( - ray: Ray, - center: Vector3, - radius: f32, - collisionPoint: *mut Vector3, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionRayBox(ray: Ray, box_: BoundingBox) -> bool; -} -extern "C" { - pub fn GetCollisionRayMesh(ray: Ray, mesh: Mesh, transform: Matrix) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayModel(ray: Ray, model: Model) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayTriangle(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayGround(ray: Ray, groundHeight: f32) -> RayHitInfo; -} -extern "C" { - pub fn InitAudioDevice(); -} -extern "C" { - pub fn CloseAudioDevice(); -} -extern "C" { - pub fn IsAudioDeviceReady() -> bool; -} -extern "C" { - pub fn SetMasterVolume(volume: f32); -} -extern "C" { - pub fn LoadWave(fileName: *const ::std::os::raw::c_char) -> Wave; -} -extern "C" { - pub fn LoadWaveFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Wave; -} -extern "C" { - pub fn LoadSound(fileName: *const ::std::os::raw::c_char) -> Sound; -} -extern "C" { - pub fn LoadSoundFromWave(wave: Wave) -> Sound; -} -extern "C" { - pub fn UpdateSound( - sound: Sound, - data: *const ::std::os::raw::c_void, - samplesCount: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn UnloadWave(wave: Wave); -} -extern "C" { - pub fn UnloadSound(sound: Sound); -} -extern "C" { - pub fn ExportWave(wave: Wave, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn ExportWaveAsCode(wave: Wave, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn PlaySound(sound: Sound); -} -extern "C" { - pub fn StopSound(sound: Sound); -} -extern "C" { - pub fn PauseSound(sound: Sound); -} -extern "C" { - pub fn ResumeSound(sound: Sound); -} -extern "C" { - pub fn PlaySoundMulti(sound: Sound); -} -extern "C" { - pub fn StopSoundMulti(); -} -extern "C" { - pub fn GetSoundsPlaying() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsSoundPlaying(sound: Sound) -> bool; -} -extern "C" { - pub fn SetSoundVolume(sound: Sound, volume: f32); -} -extern "C" { - pub fn SetSoundPitch(sound: Sound, pitch: f32); -} -extern "C" { - pub fn WaveFormat( - wave: *mut Wave, - sampleRate: ::std::os::raw::c_int, - sampleSize: ::std::os::raw::c_int, - channels: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn WaveCopy(wave: Wave) -> Wave; -} -extern "C" { - pub fn WaveCrop( - wave: *mut Wave, - initSample: ::std::os::raw::c_int, - finalSample: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn LoadWaveSamples(wave: Wave) -> *mut f32; -} -extern "C" { - pub fn UnloadWaveSamples(samples: *mut f32); -} -extern "C" { - pub fn LoadMusicStream(fileName: *const ::std::os::raw::c_char) -> Music; -} -extern "C" { - pub fn LoadMusicStreamFromMemory( - fileType: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Music; -} -extern "C" { - pub fn UnloadMusicStream(music: Music); -} -extern "C" { - pub fn PlayMusicStream(music: Music); -} -extern "C" { - pub fn IsMusicPlaying(music: Music) -> bool; -} -extern "C" { - pub fn UpdateMusicStream(music: Music); -} -extern "C" { - pub fn StopMusicStream(music: Music); -} -extern "C" { - pub fn PauseMusicStream(music: Music); -} -extern "C" { - pub fn ResumeMusicStream(music: Music); -} -extern "C" { - pub fn SetMusicVolume(music: Music, volume: f32); -} -extern "C" { - pub fn SetMusicPitch(music: Music, pitch: f32); -} -extern "C" { - pub fn GetMusicTimeLength(music: Music) -> f32; -} -extern "C" { - pub fn GetMusicTimePlayed(music: Music) -> f32; -} -extern "C" { - pub fn InitAudioStream( - sampleRate: ::std::os::raw::c_uint, - sampleSize: ::std::os::raw::c_uint, - channels: ::std::os::raw::c_uint, - ) -> AudioStream; -} -extern "C" { - pub fn UpdateAudioStream( - stream: AudioStream, - data: *const ::std::os::raw::c_void, - samplesCount: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn CloseAudioStream(stream: AudioStream); -} -extern "C" { - pub fn IsAudioStreamProcessed(stream: AudioStream) -> bool; -} -extern "C" { - pub fn PlayAudioStream(stream: AudioStream); -} -extern "C" { - pub fn PauseAudioStream(stream: AudioStream); -} -extern "C" { - pub fn ResumeAudioStream(stream: AudioStream); -} -extern "C" { - pub fn IsAudioStreamPlaying(stream: AudioStream) -> bool; -} -extern "C" { - pub fn StopAudioStream(stream: AudioStream); -} -extern "C" { - pub fn SetAudioStreamVolume(stream: AudioStream, volume: f32); -} -extern "C" { - pub fn SetAudioStreamPitch(stream: AudioStream, pitch: f32); -} -extern "C" { - pub fn SetAudioStreamBufferSizeDefault(size: ::std::os::raw::c_int); -} -pub type __int8_t = ::std::os::raw::c_schar; -pub type __uint8_t = ::std::os::raw::c_uchar; -pub type __int16_t = ::std::os::raw::c_short; -pub type __uint16_t = ::std::os::raw::c_ushort; -pub type __int32_t = ::std::os::raw::c_int; -pub type __uint32_t = ::std::os::raw::c_uint; -pub type __int64_t = ::std::os::raw::c_longlong; -pub type __uint64_t = ::std::os::raw::c_ulonglong; -pub type __darwin_intptr_t = ::std::os::raw::c_long; -pub type __darwin_natural_t = ::std::os::raw::c_uint; -pub type __darwin_ct_rune_t = ::std::os::raw::c_int; -#[repr(C)] -#[derive(Copy, Clone)] -pub union __mbstate_t { - pub __mbstate8: [::std::os::raw::c_char; 128usize], - pub _mbstateL: ::std::os::raw::c_longlong, -} -#[test] -fn bindgen_test_layout___mbstate_t() { - assert_eq!( - ::std::mem::size_of::<__mbstate_t>(), - 128usize, - concat!("Size of: ", stringify!(__mbstate_t)) - ); - assert_eq!( - ::std::mem::align_of::<__mbstate_t>(), - 8usize, - concat!("Alignment of ", stringify!(__mbstate_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__mbstate_t>())).__mbstate8 as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t), - "::", - stringify!(__mbstate8) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__mbstate_t>()))._mbstateL as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t), - "::", - stringify!(_mbstateL) - ) - ); -} -pub type __darwin_mbstate_t = __mbstate_t; -pub type __darwin_ptrdiff_t = ::std::os::raw::c_long; -pub type __darwin_size_t = ::std::os::raw::c_ulong; -pub type __darwin_va_list = __builtin_va_list; -pub type __darwin_wchar_t = ::std::os::raw::c_int; -pub type __darwin_rune_t = __darwin_wchar_t; -pub type __darwin_wint_t = ::std::os::raw::c_int; -pub type __darwin_clock_t = ::std::os::raw::c_ulong; -pub type __darwin_socklen_t = __uint32_t; -pub type __darwin_ssize_t = ::std::os::raw::c_long; -pub type __darwin_time_t = ::std::os::raw::c_long; -pub type __darwin_blkcnt_t = __int64_t; -pub type __darwin_blksize_t = __int32_t; -pub type __darwin_dev_t = __int32_t; -pub type __darwin_fsblkcnt_t = ::std::os::raw::c_uint; -pub type __darwin_fsfilcnt_t = ::std::os::raw::c_uint; -pub type __darwin_gid_t = __uint32_t; -pub type __darwin_id_t = __uint32_t; -pub type __darwin_ino64_t = __uint64_t; -pub type __darwin_ino_t = __darwin_ino64_t; -pub type __darwin_mach_port_name_t = __darwin_natural_t; -pub type __darwin_mach_port_t = __darwin_mach_port_name_t; -pub type __darwin_mode_t = __uint16_t; -pub type __darwin_off_t = __int64_t; -pub type __darwin_pid_t = __int32_t; -pub type __darwin_sigset_t = __uint32_t; -pub type __darwin_suseconds_t = __int32_t; -pub type __darwin_uid_t = __uint32_t; -pub type __darwin_useconds_t = __uint32_t; -pub type __darwin_uuid_t = [::std::os::raw::c_uchar; 16usize]; -pub type __darwin_uuid_string_t = [::std::os::raw::c_char; 37usize]; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_pthread_handler_rec { - pub __routine: ::std::option::Option, - pub __arg: *mut ::std::os::raw::c_void, - pub __next: *mut __darwin_pthread_handler_rec, -} -#[test] -fn bindgen_test_layout___darwin_pthread_handler_rec() { - assert_eq!( - ::std::mem::size_of::<__darwin_pthread_handler_rec>(), - 24usize, - concat!("Size of: ", stringify!(__darwin_pthread_handler_rec)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_pthread_handler_rec>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_pthread_handler_rec)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_pthread_handler_rec>())).__routine as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_pthread_handler_rec), - "::", - stringify!(__routine) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_pthread_handler_rec>())).__arg as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_pthread_handler_rec), - "::", - stringify!(__arg) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_pthread_handler_rec>())).__next as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_pthread_handler_rec), - "::", - stringify!(__next) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _opaque_pthread_attr_t { - pub __sig: ::std::os::raw::c_long, - pub __opaque: [::std::os::raw::c_char; 56usize], -} -#[test] -fn bindgen_test_layout__opaque_pthread_attr_t() { - assert_eq!( - ::std::mem::size_of::<_opaque_pthread_attr_t>(), - 64usize, - concat!("Size of: ", stringify!(_opaque_pthread_attr_t)) - ); - assert_eq!( - ::std::mem::align_of::<_opaque_pthread_attr_t>(), - 8usize, - concat!("Alignment of ", stringify!(_opaque_pthread_attr_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_attr_t>())).__sig as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_attr_t), - "::", - stringify!(__sig) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_attr_t>())).__opaque as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_attr_t), - "::", - stringify!(__opaque) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _opaque_pthread_cond_t { - pub __sig: ::std::os::raw::c_long, - pub __opaque: [::std::os::raw::c_char; 40usize], -} -#[test] -fn bindgen_test_layout__opaque_pthread_cond_t() { - assert_eq!( - ::std::mem::size_of::<_opaque_pthread_cond_t>(), - 48usize, - concat!("Size of: ", stringify!(_opaque_pthread_cond_t)) - ); - assert_eq!( - ::std::mem::align_of::<_opaque_pthread_cond_t>(), - 8usize, - concat!("Alignment of ", stringify!(_opaque_pthread_cond_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_cond_t>())).__sig as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_cond_t), - "::", - stringify!(__sig) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_cond_t>())).__opaque as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_cond_t), - "::", - stringify!(__opaque) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _opaque_pthread_condattr_t { - pub __sig: ::std::os::raw::c_long, - pub __opaque: [::std::os::raw::c_char; 8usize], -} -#[test] -fn bindgen_test_layout__opaque_pthread_condattr_t() { - assert_eq!( - ::std::mem::size_of::<_opaque_pthread_condattr_t>(), - 16usize, - concat!("Size of: ", stringify!(_opaque_pthread_condattr_t)) - ); - assert_eq!( - ::std::mem::align_of::<_opaque_pthread_condattr_t>(), - 8usize, - concat!("Alignment of ", stringify!(_opaque_pthread_condattr_t)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_opaque_pthread_condattr_t>())).__sig as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_condattr_t), - "::", - stringify!(__sig) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_opaque_pthread_condattr_t>())).__opaque as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_condattr_t), - "::", - stringify!(__opaque) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _opaque_pthread_mutex_t { - pub __sig: ::std::os::raw::c_long, - pub __opaque: [::std::os::raw::c_char; 56usize], -} -#[test] -fn bindgen_test_layout__opaque_pthread_mutex_t() { - assert_eq!( - ::std::mem::size_of::<_opaque_pthread_mutex_t>(), - 64usize, - concat!("Size of: ", stringify!(_opaque_pthread_mutex_t)) - ); - assert_eq!( - ::std::mem::align_of::<_opaque_pthread_mutex_t>(), - 8usize, - concat!("Alignment of ", stringify!(_opaque_pthread_mutex_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_mutex_t>())).__sig as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_mutex_t), - "::", - stringify!(__sig) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_opaque_pthread_mutex_t>())).__opaque as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_mutex_t), - "::", - stringify!(__opaque) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _opaque_pthread_mutexattr_t { - pub __sig: ::std::os::raw::c_long, - pub __opaque: [::std::os::raw::c_char; 8usize], -} -#[test] -fn bindgen_test_layout__opaque_pthread_mutexattr_t() { - assert_eq!( - ::std::mem::size_of::<_opaque_pthread_mutexattr_t>(), - 16usize, - concat!("Size of: ", stringify!(_opaque_pthread_mutexattr_t)) - ); - assert_eq!( - ::std::mem::align_of::<_opaque_pthread_mutexattr_t>(), - 8usize, - concat!("Alignment of ", stringify!(_opaque_pthread_mutexattr_t)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_opaque_pthread_mutexattr_t>())).__sig as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_mutexattr_t), - "::", - stringify!(__sig) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_opaque_pthread_mutexattr_t>())).__opaque as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_mutexattr_t), - "::", - stringify!(__opaque) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _opaque_pthread_once_t { - pub __sig: ::std::os::raw::c_long, - pub __opaque: [::std::os::raw::c_char; 8usize], -} -#[test] -fn bindgen_test_layout__opaque_pthread_once_t() { - assert_eq!( - ::std::mem::size_of::<_opaque_pthread_once_t>(), - 16usize, - concat!("Size of: ", stringify!(_opaque_pthread_once_t)) - ); - assert_eq!( - ::std::mem::align_of::<_opaque_pthread_once_t>(), - 8usize, - concat!("Alignment of ", stringify!(_opaque_pthread_once_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_once_t>())).__sig as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_once_t), - "::", - stringify!(__sig) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_once_t>())).__opaque as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_once_t), - "::", - stringify!(__opaque) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _opaque_pthread_rwlock_t { - pub __sig: ::std::os::raw::c_long, - pub __opaque: [::std::os::raw::c_char; 192usize], -} -#[test] -fn bindgen_test_layout__opaque_pthread_rwlock_t() { - assert_eq!( - ::std::mem::size_of::<_opaque_pthread_rwlock_t>(), - 200usize, - concat!("Size of: ", stringify!(_opaque_pthread_rwlock_t)) - ); - assert_eq!( - ::std::mem::align_of::<_opaque_pthread_rwlock_t>(), - 8usize, - concat!("Alignment of ", stringify!(_opaque_pthread_rwlock_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_rwlock_t>())).__sig as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_rwlock_t), - "::", - stringify!(__sig) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_opaque_pthread_rwlock_t>())).__opaque as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_rwlock_t), - "::", - stringify!(__opaque) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _opaque_pthread_rwlockattr_t { - pub __sig: ::std::os::raw::c_long, - pub __opaque: [::std::os::raw::c_char; 16usize], -} -#[test] -fn bindgen_test_layout__opaque_pthread_rwlockattr_t() { - assert_eq!( - ::std::mem::size_of::<_opaque_pthread_rwlockattr_t>(), - 24usize, - concat!("Size of: ", stringify!(_opaque_pthread_rwlockattr_t)) - ); - assert_eq!( - ::std::mem::align_of::<_opaque_pthread_rwlockattr_t>(), - 8usize, - concat!("Alignment of ", stringify!(_opaque_pthread_rwlockattr_t)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_opaque_pthread_rwlockattr_t>())).__sig as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_rwlockattr_t), - "::", - stringify!(__sig) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_opaque_pthread_rwlockattr_t>())).__opaque as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_rwlockattr_t), - "::", - stringify!(__opaque) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _opaque_pthread_t { - pub __sig: ::std::os::raw::c_long, - pub __cleanup_stack: *mut __darwin_pthread_handler_rec, - pub __opaque: [::std::os::raw::c_char; 8176usize], -} -#[test] -fn bindgen_test_layout__opaque_pthread_t() { - assert_eq!( - ::std::mem::size_of::<_opaque_pthread_t>(), - 8192usize, - concat!("Size of: ", stringify!(_opaque_pthread_t)) - ); - assert_eq!( - ::std::mem::align_of::<_opaque_pthread_t>(), - 8usize, - concat!("Alignment of ", stringify!(_opaque_pthread_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_t>())).__sig as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_t), - "::", - stringify!(__sig) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<_opaque_pthread_t>())).__cleanup_stack as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_t), - "::", - stringify!(__cleanup_stack) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_opaque_pthread_t>())).__opaque as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(_opaque_pthread_t), - "::", - stringify!(__opaque) - ) - ); -} -pub type __darwin_pthread_attr_t = _opaque_pthread_attr_t; -pub type __darwin_pthread_cond_t = _opaque_pthread_cond_t; -pub type __darwin_pthread_condattr_t = _opaque_pthread_condattr_t; -pub type __darwin_pthread_key_t = ::std::os::raw::c_ulong; -pub type __darwin_pthread_mutex_t = _opaque_pthread_mutex_t; -pub type __darwin_pthread_mutexattr_t = _opaque_pthread_mutexattr_t; -pub type __darwin_pthread_once_t = _opaque_pthread_once_t; -pub type __darwin_pthread_rwlock_t = _opaque_pthread_rwlock_t; -pub type __darwin_pthread_rwlockattr_t = _opaque_pthread_rwlockattr_t; -pub type __darwin_pthread_t = *mut _opaque_pthread_t; -pub type __darwin_nl_item = ::std::os::raw::c_int; -pub type __darwin_wctrans_t = ::std::os::raw::c_int; -pub type __darwin_wctype_t = __uint32_t; -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum idtype_t { - P_ALL = 0, - P_PID = 1, - P_PGID = 2, -} -pub type pid_t = __darwin_pid_t; -pub type id_t = __darwin_id_t; -pub type sig_atomic_t = ::std::os::raw::c_int; -pub type u_int8_t = ::std::os::raw::c_uchar; -pub type u_int16_t = ::std::os::raw::c_ushort; -pub type u_int32_t = ::std::os::raw::c_uint; -pub type u_int64_t = ::std::os::raw::c_ulonglong; -pub type register_t = i64; -pub type user_addr_t = u_int64_t; -pub type user_size_t = u_int64_t; -pub type user_ssize_t = i64; -pub type user_long_t = i64; -pub type user_ulong_t = u_int64_t; -pub type user_time_t = i64; -pub type user_off_t = i64; -pub type syscall_arg_t = u_int64_t; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_i386_thread_state { - pub __eax: ::std::os::raw::c_uint, - pub __ebx: ::std::os::raw::c_uint, - pub __ecx: ::std::os::raw::c_uint, - pub __edx: ::std::os::raw::c_uint, - pub __edi: ::std::os::raw::c_uint, - pub __esi: ::std::os::raw::c_uint, - pub __ebp: ::std::os::raw::c_uint, - pub __esp: ::std::os::raw::c_uint, - pub __ss: ::std::os::raw::c_uint, - pub __eflags: ::std::os::raw::c_uint, - pub __eip: ::std::os::raw::c_uint, - pub __cs: ::std::os::raw::c_uint, - pub __ds: ::std::os::raw::c_uint, - pub __es: ::std::os::raw::c_uint, - pub __fs: ::std::os::raw::c_uint, - pub __gs: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout___darwin_i386_thread_state() { - assert_eq!( - ::std::mem::size_of::<__darwin_i386_thread_state>(), - 64usize, - concat!("Size of: ", stringify!(__darwin_i386_thread_state)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_i386_thread_state>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_i386_thread_state)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__eax as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__eax) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__ebx as *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__ebx) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__ecx as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__ecx) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__edx as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__edx) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__edi as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__edi) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__esi as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__esi) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__ebp as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__ebp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__esp as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__esp) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__ss as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__eflags as *const _ as usize - }, - 36usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__eflags) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__eip as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__eip) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__cs as *const _ as usize }, - 44usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__cs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__ds as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__ds) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__es as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__fs as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__fs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_i386_thread_state>())).__gs as *const _ as usize }, - 60usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_thread_state), - "::", - stringify!(__gs) - ) - ); -} -#[repr(C)] -#[repr(align(2))] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_fp_control { - pub _bitfield_align_1: [u8; 0], - pub _bitfield_1: __BindgenBitfieldUnit<[u8; 2usize]>, -} -#[test] -fn bindgen_test_layout___darwin_fp_control() { - assert_eq!( - ::std::mem::size_of::<__darwin_fp_control>(), - 2usize, - concat!("Size of: ", stringify!(__darwin_fp_control)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_fp_control>(), - 2usize, - concat!("Alignment of ", stringify!(__darwin_fp_control)) - ); -} -impl __darwin_fp_control { - #[inline] - pub fn __invalid(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u16) } - } - #[inline] - pub fn set___invalid(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(0usize, 1u8, val as u64) - } - } - #[inline] - pub fn __denorm(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u16) } - } - #[inline] - pub fn set___denorm(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(1usize, 1u8, val as u64) - } - } - #[inline] - pub fn __zdiv(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u16) } - } - #[inline] - pub fn set___zdiv(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(2usize, 1u8, val as u64) - } - } - #[inline] - pub fn __ovrfl(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u16) } - } - #[inline] - pub fn set___ovrfl(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(3usize, 1u8, val as u64) - } - } - #[inline] - pub fn __undfl(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(4usize, 1u8) as u16) } - } - #[inline] - pub fn set___undfl(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(4usize, 1u8, val as u64) - } - } - #[inline] - pub fn __precis(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(5usize, 1u8) as u16) } - } - #[inline] - pub fn set___precis(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(5usize, 1u8, val as u64) - } - } - #[inline] - pub fn __pc(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(8usize, 2u8) as u16) } - } - #[inline] - pub fn set___pc(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(8usize, 2u8, val as u64) - } - } - #[inline] - pub fn __rc(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(10usize, 2u8) as u16) } - } - #[inline] - pub fn set___rc(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(10usize, 2u8, val as u64) - } - } - #[inline] - pub fn new_bitfield_1( - __invalid: ::std::os::raw::c_ushort, - __denorm: ::std::os::raw::c_ushort, - __zdiv: ::std::os::raw::c_ushort, - __ovrfl: ::std::os::raw::c_ushort, - __undfl: ::std::os::raw::c_ushort, - __precis: ::std::os::raw::c_ushort, - __pc: ::std::os::raw::c_ushort, - __rc: ::std::os::raw::c_ushort, - ) -> __BindgenBitfieldUnit<[u8; 2usize]> { - let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 2usize]> = Default::default(); - __bindgen_bitfield_unit.set(0usize, 1u8, { - let __invalid: u16 = unsafe { ::std::mem::transmute(__invalid) }; - __invalid as u64 - }); - __bindgen_bitfield_unit.set(1usize, 1u8, { - let __denorm: u16 = unsafe { ::std::mem::transmute(__denorm) }; - __denorm as u64 - }); - __bindgen_bitfield_unit.set(2usize, 1u8, { - let __zdiv: u16 = unsafe { ::std::mem::transmute(__zdiv) }; - __zdiv as u64 - }); - __bindgen_bitfield_unit.set(3usize, 1u8, { - let __ovrfl: u16 = unsafe { ::std::mem::transmute(__ovrfl) }; - __ovrfl as u64 - }); - __bindgen_bitfield_unit.set(4usize, 1u8, { - let __undfl: u16 = unsafe { ::std::mem::transmute(__undfl) }; - __undfl as u64 - }); - __bindgen_bitfield_unit.set(5usize, 1u8, { - let __precis: u16 = unsafe { ::std::mem::transmute(__precis) }; - __precis as u64 - }); - __bindgen_bitfield_unit.set(8usize, 2u8, { - let __pc: u16 = unsafe { ::std::mem::transmute(__pc) }; - __pc as u64 - }); - __bindgen_bitfield_unit.set(10usize, 2u8, { - let __rc: u16 = unsafe { ::std::mem::transmute(__rc) }; - __rc as u64 - }); - __bindgen_bitfield_unit - } -} -pub type __darwin_fp_control_t = __darwin_fp_control; -#[repr(C)] -#[repr(align(2))] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_fp_status { - pub _bitfield_align_1: [u8; 0], - pub _bitfield_1: __BindgenBitfieldUnit<[u8; 2usize]>, -} -#[test] -fn bindgen_test_layout___darwin_fp_status() { - assert_eq!( - ::std::mem::size_of::<__darwin_fp_status>(), - 2usize, - concat!("Size of: ", stringify!(__darwin_fp_status)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_fp_status>(), - 2usize, - concat!("Alignment of ", stringify!(__darwin_fp_status)) - ); -} -impl __darwin_fp_status { - #[inline] - pub fn __invalid(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 1u8) as u16) } - } - #[inline] - pub fn set___invalid(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(0usize, 1u8, val as u64) - } - } - #[inline] - pub fn __denorm(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(1usize, 1u8) as u16) } - } - #[inline] - pub fn set___denorm(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(1usize, 1u8, val as u64) - } - } - #[inline] - pub fn __zdiv(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(2usize, 1u8) as u16) } - } - #[inline] - pub fn set___zdiv(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(2usize, 1u8, val as u64) - } - } - #[inline] - pub fn __ovrfl(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(3usize, 1u8) as u16) } - } - #[inline] - pub fn set___ovrfl(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(3usize, 1u8, val as u64) - } - } - #[inline] - pub fn __undfl(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(4usize, 1u8) as u16) } - } - #[inline] - pub fn set___undfl(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(4usize, 1u8, val as u64) - } - } - #[inline] - pub fn __precis(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(5usize, 1u8) as u16) } - } - #[inline] - pub fn set___precis(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(5usize, 1u8, val as u64) - } - } - #[inline] - pub fn __stkflt(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(6usize, 1u8) as u16) } - } - #[inline] - pub fn set___stkflt(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(6usize, 1u8, val as u64) - } - } - #[inline] - pub fn __errsumm(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(7usize, 1u8) as u16) } - } - #[inline] - pub fn set___errsumm(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(7usize, 1u8, val as u64) - } - } - #[inline] - pub fn __c0(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(8usize, 1u8) as u16) } - } - #[inline] - pub fn set___c0(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(8usize, 1u8, val as u64) - } - } - #[inline] - pub fn __c1(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(9usize, 1u8) as u16) } - } - #[inline] - pub fn set___c1(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(9usize, 1u8, val as u64) - } - } - #[inline] - pub fn __c2(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(10usize, 1u8) as u16) } - } - #[inline] - pub fn set___c2(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(10usize, 1u8, val as u64) - } - } - #[inline] - pub fn __tos(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(11usize, 3u8) as u16) } - } - #[inline] - pub fn set___tos(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(11usize, 3u8, val as u64) - } - } - #[inline] - pub fn __c3(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(14usize, 1u8) as u16) } - } - #[inline] - pub fn set___c3(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(14usize, 1u8, val as u64) - } - } - #[inline] - pub fn __busy(&self) -> ::std::os::raw::c_ushort { - unsafe { ::std::mem::transmute(self._bitfield_1.get(15usize, 1u8) as u16) } - } - #[inline] - pub fn set___busy(&mut self, val: ::std::os::raw::c_ushort) { - unsafe { - let val: u16 = ::std::mem::transmute(val); - self._bitfield_1.set(15usize, 1u8, val as u64) - } - } - #[inline] - pub fn new_bitfield_1( - __invalid: ::std::os::raw::c_ushort, - __denorm: ::std::os::raw::c_ushort, - __zdiv: ::std::os::raw::c_ushort, - __ovrfl: ::std::os::raw::c_ushort, - __undfl: ::std::os::raw::c_ushort, - __precis: ::std::os::raw::c_ushort, - __stkflt: ::std::os::raw::c_ushort, - __errsumm: ::std::os::raw::c_ushort, - __c0: ::std::os::raw::c_ushort, - __c1: ::std::os::raw::c_ushort, - __c2: ::std::os::raw::c_ushort, - __tos: ::std::os::raw::c_ushort, - __c3: ::std::os::raw::c_ushort, - __busy: ::std::os::raw::c_ushort, - ) -> __BindgenBitfieldUnit<[u8; 2usize]> { - let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 2usize]> = Default::default(); - __bindgen_bitfield_unit.set(0usize, 1u8, { - let __invalid: u16 = unsafe { ::std::mem::transmute(__invalid) }; - __invalid as u64 - }); - __bindgen_bitfield_unit.set(1usize, 1u8, { - let __denorm: u16 = unsafe { ::std::mem::transmute(__denorm) }; - __denorm as u64 - }); - __bindgen_bitfield_unit.set(2usize, 1u8, { - let __zdiv: u16 = unsafe { ::std::mem::transmute(__zdiv) }; - __zdiv as u64 - }); - __bindgen_bitfield_unit.set(3usize, 1u8, { - let __ovrfl: u16 = unsafe { ::std::mem::transmute(__ovrfl) }; - __ovrfl as u64 - }); - __bindgen_bitfield_unit.set(4usize, 1u8, { - let __undfl: u16 = unsafe { ::std::mem::transmute(__undfl) }; - __undfl as u64 - }); - __bindgen_bitfield_unit.set(5usize, 1u8, { - let __precis: u16 = unsafe { ::std::mem::transmute(__precis) }; - __precis as u64 - }); - __bindgen_bitfield_unit.set(6usize, 1u8, { - let __stkflt: u16 = unsafe { ::std::mem::transmute(__stkflt) }; - __stkflt as u64 - }); - __bindgen_bitfield_unit.set(7usize, 1u8, { - let __errsumm: u16 = unsafe { ::std::mem::transmute(__errsumm) }; - __errsumm as u64 - }); - __bindgen_bitfield_unit.set(8usize, 1u8, { - let __c0: u16 = unsafe { ::std::mem::transmute(__c0) }; - __c0 as u64 - }); - __bindgen_bitfield_unit.set(9usize, 1u8, { - let __c1: u16 = unsafe { ::std::mem::transmute(__c1) }; - __c1 as u64 - }); - __bindgen_bitfield_unit.set(10usize, 1u8, { - let __c2: u16 = unsafe { ::std::mem::transmute(__c2) }; - __c2 as u64 - }); - __bindgen_bitfield_unit.set(11usize, 3u8, { - let __tos: u16 = unsafe { ::std::mem::transmute(__tos) }; - __tos as u64 - }); - __bindgen_bitfield_unit.set(14usize, 1u8, { - let __c3: u16 = unsafe { ::std::mem::transmute(__c3) }; - __c3 as u64 - }); - __bindgen_bitfield_unit.set(15usize, 1u8, { - let __busy: u16 = unsafe { ::std::mem::transmute(__busy) }; - __busy as u64 - }); - __bindgen_bitfield_unit - } -} -pub type __darwin_fp_status_t = __darwin_fp_status; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mmst_reg { - pub __mmst_reg: [::std::os::raw::c_char; 10usize], - pub __mmst_rsrv: [::std::os::raw::c_char; 6usize], -} -#[test] -fn bindgen_test_layout___darwin_mmst_reg() { - assert_eq!( - ::std::mem::size_of::<__darwin_mmst_reg>(), - 16usize, - concat!("Size of: ", stringify!(__darwin_mmst_reg)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mmst_reg>(), - 1usize, - concat!("Alignment of ", stringify!(__darwin_mmst_reg)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mmst_reg>())).__mmst_reg as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mmst_reg), - "::", - stringify!(__mmst_reg) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mmst_reg>())).__mmst_rsrv as *const _ as usize }, - 10usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mmst_reg), - "::", - stringify!(__mmst_rsrv) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_xmm_reg { - pub __xmm_reg: [::std::os::raw::c_char; 16usize], -} -#[test] -fn bindgen_test_layout___darwin_xmm_reg() { - assert_eq!( - ::std::mem::size_of::<__darwin_xmm_reg>(), - 16usize, - concat!("Size of: ", stringify!(__darwin_xmm_reg)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_xmm_reg>(), - 1usize, - concat!("Alignment of ", stringify!(__darwin_xmm_reg)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_xmm_reg>())).__xmm_reg as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_xmm_reg), - "::", - stringify!(__xmm_reg) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_ymm_reg { - pub __ymm_reg: [::std::os::raw::c_char; 32usize], -} -#[test] -fn bindgen_test_layout___darwin_ymm_reg() { - assert_eq!( - ::std::mem::size_of::<__darwin_ymm_reg>(), - 32usize, - concat!("Size of: ", stringify!(__darwin_ymm_reg)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_ymm_reg>(), - 1usize, - concat!("Alignment of ", stringify!(__darwin_ymm_reg)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_ymm_reg>())).__ymm_reg as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_ymm_reg), - "::", - stringify!(__ymm_reg) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_zmm_reg { - pub __zmm_reg: [::std::os::raw::c_char; 64usize], -} -#[test] -fn bindgen_test_layout___darwin_zmm_reg() { - assert_eq!( - ::std::mem::size_of::<__darwin_zmm_reg>(), - 64usize, - concat!("Size of: ", stringify!(__darwin_zmm_reg)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_zmm_reg>(), - 1usize, - concat!("Alignment of ", stringify!(__darwin_zmm_reg)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_zmm_reg>())).__zmm_reg as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_zmm_reg), - "::", - stringify!(__zmm_reg) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_opmask_reg { - pub __opmask_reg: [::std::os::raw::c_char; 8usize], -} -#[test] -fn bindgen_test_layout___darwin_opmask_reg() { - assert_eq!( - ::std::mem::size_of::<__darwin_opmask_reg>(), - 8usize, - concat!("Size of: ", stringify!(__darwin_opmask_reg)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_opmask_reg>(), - 1usize, - concat!("Alignment of ", stringify!(__darwin_opmask_reg)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_opmask_reg>())).__opmask_reg as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_opmask_reg), - "::", - stringify!(__opmask_reg) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_i386_float_state { - pub __fpu_reserved: [::std::os::raw::c_int; 2usize], - pub __fpu_fcw: __darwin_fp_control, - pub __fpu_fsw: __darwin_fp_status, - pub __fpu_ftw: __uint8_t, - pub __fpu_rsrv1: __uint8_t, - pub __fpu_fop: __uint16_t, - pub __fpu_ip: __uint32_t, - pub __fpu_cs: __uint16_t, - pub __fpu_rsrv2: __uint16_t, - pub __fpu_dp: __uint32_t, - pub __fpu_ds: __uint16_t, - pub __fpu_rsrv3: __uint16_t, - pub __fpu_mxcsr: __uint32_t, - pub __fpu_mxcsrmask: __uint32_t, - pub __fpu_stmm0: __darwin_mmst_reg, - pub __fpu_stmm1: __darwin_mmst_reg, - pub __fpu_stmm2: __darwin_mmst_reg, - pub __fpu_stmm3: __darwin_mmst_reg, - pub __fpu_stmm4: __darwin_mmst_reg, - pub __fpu_stmm5: __darwin_mmst_reg, - pub __fpu_stmm6: __darwin_mmst_reg, - pub __fpu_stmm7: __darwin_mmst_reg, - pub __fpu_xmm0: __darwin_xmm_reg, - pub __fpu_xmm1: __darwin_xmm_reg, - pub __fpu_xmm2: __darwin_xmm_reg, - pub __fpu_xmm3: __darwin_xmm_reg, - pub __fpu_xmm4: __darwin_xmm_reg, - pub __fpu_xmm5: __darwin_xmm_reg, - pub __fpu_xmm6: __darwin_xmm_reg, - pub __fpu_xmm7: __darwin_xmm_reg, - pub __fpu_rsrv4: [::std::os::raw::c_char; 224usize], - pub __fpu_reserved1: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout___darwin_i386_float_state() { - assert_eq!( - ::std::mem::size_of::<__darwin_i386_float_state>(), - 524usize, - concat!("Size of: ", stringify!(__darwin_i386_float_state)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_i386_float_state>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_i386_float_state)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_reserved as *const _ - as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_reserved) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_fcw as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_fcw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_fsw as *const _ as usize - }, - 10usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_fsw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_ftw as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_ftw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_rsrv1 as *const _ as usize - }, - 13usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_rsrv1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_fop as *const _ as usize - }, - 14usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_fop) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_ip as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_ip) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_cs as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_cs) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_rsrv2 as *const _ as usize - }, - 22usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_rsrv2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_dp as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_dp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_ds as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_ds) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_rsrv3 as *const _ as usize - }, - 30usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_rsrv3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_mxcsr as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_mxcsr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_mxcsrmask as *const _ - as usize - }, - 36usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_mxcsrmask) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_stmm0 as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_stmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_stmm1 as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_stmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_stmm2 as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_stmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_stmm3 as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_stmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_stmm4 as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_stmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_stmm5 as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_stmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_stmm6 as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_stmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_stmm7 as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_stmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_xmm0 as *const _ as usize - }, - 168usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_xmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_xmm1 as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_xmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_xmm2 as *const _ as usize - }, - 200usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_xmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_xmm3 as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_xmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_xmm4 as *const _ as usize - }, - 232usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_xmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_xmm5 as *const _ as usize - }, - 248usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_xmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_xmm6 as *const _ as usize - }, - 264usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_xmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_xmm7 as *const _ as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_xmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_rsrv4 as *const _ as usize - }, - 296usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_rsrv4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_float_state>())).__fpu_reserved1 as *const _ - as usize - }, - 520usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_float_state), - "::", - stringify!(__fpu_reserved1) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_i386_avx_state { - pub __fpu_reserved: [::std::os::raw::c_int; 2usize], - pub __fpu_fcw: __darwin_fp_control, - pub __fpu_fsw: __darwin_fp_status, - pub __fpu_ftw: __uint8_t, - pub __fpu_rsrv1: __uint8_t, - pub __fpu_fop: __uint16_t, - pub __fpu_ip: __uint32_t, - pub __fpu_cs: __uint16_t, - pub __fpu_rsrv2: __uint16_t, - pub __fpu_dp: __uint32_t, - pub __fpu_ds: __uint16_t, - pub __fpu_rsrv3: __uint16_t, - pub __fpu_mxcsr: __uint32_t, - pub __fpu_mxcsrmask: __uint32_t, - pub __fpu_stmm0: __darwin_mmst_reg, - pub __fpu_stmm1: __darwin_mmst_reg, - pub __fpu_stmm2: __darwin_mmst_reg, - pub __fpu_stmm3: __darwin_mmst_reg, - pub __fpu_stmm4: __darwin_mmst_reg, - pub __fpu_stmm5: __darwin_mmst_reg, - pub __fpu_stmm6: __darwin_mmst_reg, - pub __fpu_stmm7: __darwin_mmst_reg, - pub __fpu_xmm0: __darwin_xmm_reg, - pub __fpu_xmm1: __darwin_xmm_reg, - pub __fpu_xmm2: __darwin_xmm_reg, - pub __fpu_xmm3: __darwin_xmm_reg, - pub __fpu_xmm4: __darwin_xmm_reg, - pub __fpu_xmm5: __darwin_xmm_reg, - pub __fpu_xmm6: __darwin_xmm_reg, - pub __fpu_xmm7: __darwin_xmm_reg, - pub __fpu_rsrv4: [::std::os::raw::c_char; 224usize], - pub __fpu_reserved1: ::std::os::raw::c_int, - pub __avx_reserved1: [::std::os::raw::c_char; 64usize], - pub __fpu_ymmh0: __darwin_xmm_reg, - pub __fpu_ymmh1: __darwin_xmm_reg, - pub __fpu_ymmh2: __darwin_xmm_reg, - pub __fpu_ymmh3: __darwin_xmm_reg, - pub __fpu_ymmh4: __darwin_xmm_reg, - pub __fpu_ymmh5: __darwin_xmm_reg, - pub __fpu_ymmh6: __darwin_xmm_reg, - pub __fpu_ymmh7: __darwin_xmm_reg, -} -#[test] -fn bindgen_test_layout___darwin_i386_avx_state() { - assert_eq!( - ::std::mem::size_of::<__darwin_i386_avx_state>(), - 716usize, - concat!("Size of: ", stringify!(__darwin_i386_avx_state)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_i386_avx_state>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_i386_avx_state)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_reserved as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_reserved) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_fcw as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_fcw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_fsw as *const _ as usize - }, - 10usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_fsw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ftw as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ftw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_rsrv1 as *const _ as usize - }, - 13usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_rsrv1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_fop as *const _ as usize - }, - 14usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_fop) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ip as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ip) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_cs as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_cs) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_rsrv2 as *const _ as usize - }, - 22usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_rsrv2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_dp as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_dp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ds as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ds) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_rsrv3 as *const _ as usize - }, - 30usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_rsrv3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_mxcsr as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_mxcsr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_mxcsrmask as *const _ as usize - }, - 36usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_mxcsrmask) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_stmm0 as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_stmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_stmm1 as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_stmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_stmm2 as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_stmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_stmm3 as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_stmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_stmm4 as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_stmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_stmm5 as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_stmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_stmm6 as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_stmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_stmm7 as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_stmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_xmm0 as *const _ as usize - }, - 168usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_xmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_xmm1 as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_xmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_xmm2 as *const _ as usize - }, - 200usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_xmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_xmm3 as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_xmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_xmm4 as *const _ as usize - }, - 232usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_xmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_xmm5 as *const _ as usize - }, - 248usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_xmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_xmm6 as *const _ as usize - }, - 264usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_xmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_xmm7 as *const _ as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_xmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_rsrv4 as *const _ as usize - }, - 296usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_rsrv4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_reserved1 as *const _ as usize - }, - 520usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_reserved1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__avx_reserved1 as *const _ as usize - }, - 524usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__avx_reserved1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ymmh0 as *const _ as usize - }, - 588usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ymmh0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ymmh1 as *const _ as usize - }, - 604usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ymmh1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ymmh2 as *const _ as usize - }, - 620usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ymmh2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ymmh3 as *const _ as usize - }, - 636usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ymmh3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ymmh4 as *const _ as usize - }, - 652usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ymmh4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ymmh5 as *const _ as usize - }, - 668usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ymmh5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ymmh6 as *const _ as usize - }, - 684usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ymmh6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx_state>())).__fpu_ymmh7 as *const _ as usize - }, - 700usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx_state), - "::", - stringify!(__fpu_ymmh7) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_i386_avx512_state { - pub __fpu_reserved: [::std::os::raw::c_int; 2usize], - pub __fpu_fcw: __darwin_fp_control, - pub __fpu_fsw: __darwin_fp_status, - pub __fpu_ftw: __uint8_t, - pub __fpu_rsrv1: __uint8_t, - pub __fpu_fop: __uint16_t, - pub __fpu_ip: __uint32_t, - pub __fpu_cs: __uint16_t, - pub __fpu_rsrv2: __uint16_t, - pub __fpu_dp: __uint32_t, - pub __fpu_ds: __uint16_t, - pub __fpu_rsrv3: __uint16_t, - pub __fpu_mxcsr: __uint32_t, - pub __fpu_mxcsrmask: __uint32_t, - pub __fpu_stmm0: __darwin_mmst_reg, - pub __fpu_stmm1: __darwin_mmst_reg, - pub __fpu_stmm2: __darwin_mmst_reg, - pub __fpu_stmm3: __darwin_mmst_reg, - pub __fpu_stmm4: __darwin_mmst_reg, - pub __fpu_stmm5: __darwin_mmst_reg, - pub __fpu_stmm6: __darwin_mmst_reg, - pub __fpu_stmm7: __darwin_mmst_reg, - pub __fpu_xmm0: __darwin_xmm_reg, - pub __fpu_xmm1: __darwin_xmm_reg, - pub __fpu_xmm2: __darwin_xmm_reg, - pub __fpu_xmm3: __darwin_xmm_reg, - pub __fpu_xmm4: __darwin_xmm_reg, - pub __fpu_xmm5: __darwin_xmm_reg, - pub __fpu_xmm6: __darwin_xmm_reg, - pub __fpu_xmm7: __darwin_xmm_reg, - pub __fpu_rsrv4: [::std::os::raw::c_char; 224usize], - pub __fpu_reserved1: ::std::os::raw::c_int, - pub __avx_reserved1: [::std::os::raw::c_char; 64usize], - pub __fpu_ymmh0: __darwin_xmm_reg, - pub __fpu_ymmh1: __darwin_xmm_reg, - pub __fpu_ymmh2: __darwin_xmm_reg, - pub __fpu_ymmh3: __darwin_xmm_reg, - pub __fpu_ymmh4: __darwin_xmm_reg, - pub __fpu_ymmh5: __darwin_xmm_reg, - pub __fpu_ymmh6: __darwin_xmm_reg, - pub __fpu_ymmh7: __darwin_xmm_reg, - pub __fpu_k0: __darwin_opmask_reg, - pub __fpu_k1: __darwin_opmask_reg, - pub __fpu_k2: __darwin_opmask_reg, - pub __fpu_k3: __darwin_opmask_reg, - pub __fpu_k4: __darwin_opmask_reg, - pub __fpu_k5: __darwin_opmask_reg, - pub __fpu_k6: __darwin_opmask_reg, - pub __fpu_k7: __darwin_opmask_reg, - pub __fpu_zmmh0: __darwin_ymm_reg, - pub __fpu_zmmh1: __darwin_ymm_reg, - pub __fpu_zmmh2: __darwin_ymm_reg, - pub __fpu_zmmh3: __darwin_ymm_reg, - pub __fpu_zmmh4: __darwin_ymm_reg, - pub __fpu_zmmh5: __darwin_ymm_reg, - pub __fpu_zmmh6: __darwin_ymm_reg, - pub __fpu_zmmh7: __darwin_ymm_reg, -} -#[test] -fn bindgen_test_layout___darwin_i386_avx512_state() { - assert_eq!( - ::std::mem::size_of::<__darwin_i386_avx512_state>(), - 1036usize, - concat!("Size of: ", stringify!(__darwin_i386_avx512_state)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_i386_avx512_state>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_i386_avx512_state)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_reserved as *const _ - as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_reserved) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_fcw as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_fcw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_fsw as *const _ as usize - }, - 10usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_fsw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ftw as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ftw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_rsrv1 as *const _ as usize - }, - 13usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_rsrv1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_fop as *const _ as usize - }, - 14usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_fop) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ip as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ip) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_cs as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_cs) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_rsrv2 as *const _ as usize - }, - 22usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_rsrv2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_dp as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_dp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ds as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ds) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_rsrv3 as *const _ as usize - }, - 30usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_rsrv3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_mxcsr as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_mxcsr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_mxcsrmask as *const _ - as usize - }, - 36usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_mxcsrmask) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_stmm0 as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_stmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_stmm1 as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_stmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_stmm2 as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_stmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_stmm3 as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_stmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_stmm4 as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_stmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_stmm5 as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_stmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_stmm6 as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_stmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_stmm7 as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_stmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_xmm0 as *const _ as usize - }, - 168usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_xmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_xmm1 as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_xmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_xmm2 as *const _ as usize - }, - 200usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_xmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_xmm3 as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_xmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_xmm4 as *const _ as usize - }, - 232usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_xmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_xmm5 as *const _ as usize - }, - 248usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_xmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_xmm6 as *const _ as usize - }, - 264usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_xmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_xmm7 as *const _ as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_xmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_rsrv4 as *const _ as usize - }, - 296usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_rsrv4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_reserved1 as *const _ - as usize - }, - 520usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_reserved1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__avx_reserved1 as *const _ - as usize - }, - 524usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__avx_reserved1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ymmh0 as *const _ as usize - }, - 588usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ymmh0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ymmh1 as *const _ as usize - }, - 604usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ymmh1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ymmh2 as *const _ as usize - }, - 620usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ymmh2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ymmh3 as *const _ as usize - }, - 636usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ymmh3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ymmh4 as *const _ as usize - }, - 652usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ymmh4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ymmh5 as *const _ as usize - }, - 668usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ymmh5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ymmh6 as *const _ as usize - }, - 684usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ymmh6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_ymmh7 as *const _ as usize - }, - 700usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_ymmh7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_k0 as *const _ as usize - }, - 716usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_k0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_k1 as *const _ as usize - }, - 724usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_k1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_k2 as *const _ as usize - }, - 732usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_k2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_k3 as *const _ as usize - }, - 740usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_k3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_k4 as *const _ as usize - }, - 748usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_k4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_k5 as *const _ as usize - }, - 756usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_k5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_k6 as *const _ as usize - }, - 764usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_k6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_k7 as *const _ as usize - }, - 772usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_k7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_zmmh0 as *const _ as usize - }, - 780usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_zmmh0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_zmmh1 as *const _ as usize - }, - 812usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_zmmh1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_zmmh2 as *const _ as usize - }, - 844usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_zmmh2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_zmmh3 as *const _ as usize - }, - 876usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_zmmh3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_zmmh4 as *const _ as usize - }, - 908usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_zmmh4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_zmmh5 as *const _ as usize - }, - 940usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_zmmh5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_zmmh6 as *const _ as usize - }, - 972usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_zmmh6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_avx512_state>())).__fpu_zmmh7 as *const _ as usize - }, - 1004usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_avx512_state), - "::", - stringify!(__fpu_zmmh7) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_i386_exception_state { - pub __trapno: __uint16_t, - pub __cpu: __uint16_t, - pub __err: __uint32_t, - pub __faultvaddr: __uint32_t, -} -#[test] -fn bindgen_test_layout___darwin_i386_exception_state() { - assert_eq!( - ::std::mem::size_of::<__darwin_i386_exception_state>(), - 12usize, - concat!("Size of: ", stringify!(__darwin_i386_exception_state)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_i386_exception_state>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_i386_exception_state)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_exception_state>())).__trapno as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_exception_state), - "::", - stringify!(__trapno) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_exception_state>())).__cpu as *const _ as usize - }, - 2usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_exception_state), - "::", - stringify!(__cpu) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_exception_state>())).__err as *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_exception_state), - "::", - stringify!(__err) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_i386_exception_state>())).__faultvaddr as *const _ - as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_i386_exception_state), - "::", - stringify!(__faultvaddr) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_x86_debug_state32 { - pub __dr0: ::std::os::raw::c_uint, - pub __dr1: ::std::os::raw::c_uint, - pub __dr2: ::std::os::raw::c_uint, - pub __dr3: ::std::os::raw::c_uint, - pub __dr4: ::std::os::raw::c_uint, - pub __dr5: ::std::os::raw::c_uint, - pub __dr6: ::std::os::raw::c_uint, - pub __dr7: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout___darwin_x86_debug_state32() { - assert_eq!( - ::std::mem::size_of::<__darwin_x86_debug_state32>(), - 32usize, - concat!("Size of: ", stringify!(__darwin_x86_debug_state32)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_x86_debug_state32>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_x86_debug_state32)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state32>())).__dr0 as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state32), - "::", - stringify!(__dr0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state32>())).__dr1 as *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state32), - "::", - stringify!(__dr1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state32>())).__dr2 as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state32), - "::", - stringify!(__dr2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state32>())).__dr3 as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state32), - "::", - stringify!(__dr3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state32>())).__dr4 as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state32), - "::", - stringify!(__dr4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state32>())).__dr5 as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state32), - "::", - stringify!(__dr5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state32>())).__dr6 as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state32), - "::", - stringify!(__dr6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state32>())).__dr7 as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state32), - "::", - stringify!(__dr7) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __x86_pagein_state { - pub __pagein_error: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout___x86_pagein_state() { - assert_eq!( - ::std::mem::size_of::<__x86_pagein_state>(), - 4usize, - concat!("Size of: ", stringify!(__x86_pagein_state)) - ); - assert_eq!( - ::std::mem::align_of::<__x86_pagein_state>(), - 4usize, - concat!("Alignment of ", stringify!(__x86_pagein_state)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__x86_pagein_state>())).__pagein_error as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__x86_pagein_state), - "::", - stringify!(__pagein_error) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_x86_thread_state64 { - pub __rax: __uint64_t, - pub __rbx: __uint64_t, - pub __rcx: __uint64_t, - pub __rdx: __uint64_t, - pub __rdi: __uint64_t, - pub __rsi: __uint64_t, - pub __rbp: __uint64_t, - pub __rsp: __uint64_t, - pub __r8: __uint64_t, - pub __r9: __uint64_t, - pub __r10: __uint64_t, - pub __r11: __uint64_t, - pub __r12: __uint64_t, - pub __r13: __uint64_t, - pub __r14: __uint64_t, - pub __r15: __uint64_t, - pub __rip: __uint64_t, - pub __rflags: __uint64_t, - pub __cs: __uint64_t, - pub __fs: __uint64_t, - pub __gs: __uint64_t, -} -#[test] -fn bindgen_test_layout___darwin_x86_thread_state64() { - assert_eq!( - ::std::mem::size_of::<__darwin_x86_thread_state64>(), - 168usize, - concat!("Size of: ", stringify!(__darwin_x86_thread_state64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_x86_thread_state64>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_x86_thread_state64)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rax as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rax) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rbx as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rbx) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rcx as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rcx) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rdx as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rdx) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rdi as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rdi) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rsi as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rsi) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rbp as *const _ as usize - }, - 48usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rbp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rsp as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rsp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__r8 as *const _ as usize - }, - 64usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__r8) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__r9 as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__r9) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__r10 as *const _ as usize - }, - 80usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__r10) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__r11 as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__r11) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__r12 as *const _ as usize - }, - 96usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__r12) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__r13 as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__r13) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__r14 as *const _ as usize - }, - 112usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__r14) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__r15 as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__r15) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rip as *const _ as usize - }, - 128usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rip) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__rflags as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__rflags) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__cs as *const _ as usize - }, - 144usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__cs) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__fs as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__fs) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_state64>())).__gs as *const _ as usize - }, - 160usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_state64), - "::", - stringify!(__gs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_x86_thread_full_state64 { - pub __ss64: __darwin_x86_thread_state64, - pub __ds: __uint64_t, - pub __es: __uint64_t, - pub __ss: __uint64_t, - pub __gsbase: __uint64_t, -} -#[test] -fn bindgen_test_layout___darwin_x86_thread_full_state64() { - assert_eq!( - ::std::mem::size_of::<__darwin_x86_thread_full_state64>(), - 200usize, - concat!("Size of: ", stringify!(__darwin_x86_thread_full_state64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_x86_thread_full_state64>(), - 8usize, - concat!( - "Alignment of ", - stringify!(__darwin_x86_thread_full_state64) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_full_state64>())).__ss64 as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_full_state64), - "::", - stringify!(__ss64) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_full_state64>())).__ds as *const _ as usize - }, - 168usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_full_state64), - "::", - stringify!(__ds) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_full_state64>())).__es as *const _ as usize - }, - 176usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_full_state64), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_full_state64>())).__ss as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_full_state64), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_thread_full_state64>())).__gsbase as *const _ - as usize - }, - 192usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_thread_full_state64), - "::", - stringify!(__gsbase) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_x86_float_state64 { - pub __fpu_reserved: [::std::os::raw::c_int; 2usize], - pub __fpu_fcw: __darwin_fp_control, - pub __fpu_fsw: __darwin_fp_status, - pub __fpu_ftw: __uint8_t, - pub __fpu_rsrv1: __uint8_t, - pub __fpu_fop: __uint16_t, - pub __fpu_ip: __uint32_t, - pub __fpu_cs: __uint16_t, - pub __fpu_rsrv2: __uint16_t, - pub __fpu_dp: __uint32_t, - pub __fpu_ds: __uint16_t, - pub __fpu_rsrv3: __uint16_t, - pub __fpu_mxcsr: __uint32_t, - pub __fpu_mxcsrmask: __uint32_t, - pub __fpu_stmm0: __darwin_mmst_reg, - pub __fpu_stmm1: __darwin_mmst_reg, - pub __fpu_stmm2: __darwin_mmst_reg, - pub __fpu_stmm3: __darwin_mmst_reg, - pub __fpu_stmm4: __darwin_mmst_reg, - pub __fpu_stmm5: __darwin_mmst_reg, - pub __fpu_stmm6: __darwin_mmst_reg, - pub __fpu_stmm7: __darwin_mmst_reg, - pub __fpu_xmm0: __darwin_xmm_reg, - pub __fpu_xmm1: __darwin_xmm_reg, - pub __fpu_xmm2: __darwin_xmm_reg, - pub __fpu_xmm3: __darwin_xmm_reg, - pub __fpu_xmm4: __darwin_xmm_reg, - pub __fpu_xmm5: __darwin_xmm_reg, - pub __fpu_xmm6: __darwin_xmm_reg, - pub __fpu_xmm7: __darwin_xmm_reg, - pub __fpu_xmm8: __darwin_xmm_reg, - pub __fpu_xmm9: __darwin_xmm_reg, - pub __fpu_xmm10: __darwin_xmm_reg, - pub __fpu_xmm11: __darwin_xmm_reg, - pub __fpu_xmm12: __darwin_xmm_reg, - pub __fpu_xmm13: __darwin_xmm_reg, - pub __fpu_xmm14: __darwin_xmm_reg, - pub __fpu_xmm15: __darwin_xmm_reg, - pub __fpu_rsrv4: [::std::os::raw::c_char; 96usize], - pub __fpu_reserved1: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout___darwin_x86_float_state64() { - assert_eq!( - ::std::mem::size_of::<__darwin_x86_float_state64>(), - 524usize, - concat!("Size of: ", stringify!(__darwin_x86_float_state64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_x86_float_state64>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_x86_float_state64)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_reserved as *const _ - as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_reserved) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_fcw as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_fcw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_fsw as *const _ as usize - }, - 10usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_fsw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_ftw as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_ftw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_rsrv1 as *const _ as usize - }, - 13usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_rsrv1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_fop as *const _ as usize - }, - 14usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_fop) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_ip as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_ip) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_cs as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_cs) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_rsrv2 as *const _ as usize - }, - 22usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_rsrv2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_dp as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_dp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_ds as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_ds) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_rsrv3 as *const _ as usize - }, - 30usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_rsrv3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_mxcsr as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_mxcsr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_mxcsrmask as *const _ - as usize - }, - 36usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_mxcsrmask) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_stmm0 as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_stmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_stmm1 as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_stmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_stmm2 as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_stmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_stmm3 as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_stmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_stmm4 as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_stmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_stmm5 as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_stmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_stmm6 as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_stmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_stmm7 as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_stmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm0 as *const _ as usize - }, - 168usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm1 as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm2 as *const _ as usize - }, - 200usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm3 as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm4 as *const _ as usize - }, - 232usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm5 as *const _ as usize - }, - 248usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm6 as *const _ as usize - }, - 264usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm7 as *const _ as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm8 as *const _ as usize - }, - 296usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm8) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm9 as *const _ as usize - }, - 312usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm9) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm10 as *const _ as usize - }, - 328usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm10) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm11 as *const _ as usize - }, - 344usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm11) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm12 as *const _ as usize - }, - 360usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm12) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm13 as *const _ as usize - }, - 376usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm13) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm14 as *const _ as usize - }, - 392usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm14) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_xmm15 as *const _ as usize - }, - 408usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_xmm15) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_rsrv4 as *const _ as usize - }, - 424usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_rsrv4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_float_state64>())).__fpu_reserved1 as *const _ - as usize - }, - 520usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_float_state64), - "::", - stringify!(__fpu_reserved1) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_x86_avx_state64 { - pub __fpu_reserved: [::std::os::raw::c_int; 2usize], - pub __fpu_fcw: __darwin_fp_control, - pub __fpu_fsw: __darwin_fp_status, - pub __fpu_ftw: __uint8_t, - pub __fpu_rsrv1: __uint8_t, - pub __fpu_fop: __uint16_t, - pub __fpu_ip: __uint32_t, - pub __fpu_cs: __uint16_t, - pub __fpu_rsrv2: __uint16_t, - pub __fpu_dp: __uint32_t, - pub __fpu_ds: __uint16_t, - pub __fpu_rsrv3: __uint16_t, - pub __fpu_mxcsr: __uint32_t, - pub __fpu_mxcsrmask: __uint32_t, - pub __fpu_stmm0: __darwin_mmst_reg, - pub __fpu_stmm1: __darwin_mmst_reg, - pub __fpu_stmm2: __darwin_mmst_reg, - pub __fpu_stmm3: __darwin_mmst_reg, - pub __fpu_stmm4: __darwin_mmst_reg, - pub __fpu_stmm5: __darwin_mmst_reg, - pub __fpu_stmm6: __darwin_mmst_reg, - pub __fpu_stmm7: __darwin_mmst_reg, - pub __fpu_xmm0: __darwin_xmm_reg, - pub __fpu_xmm1: __darwin_xmm_reg, - pub __fpu_xmm2: __darwin_xmm_reg, - pub __fpu_xmm3: __darwin_xmm_reg, - pub __fpu_xmm4: __darwin_xmm_reg, - pub __fpu_xmm5: __darwin_xmm_reg, - pub __fpu_xmm6: __darwin_xmm_reg, - pub __fpu_xmm7: __darwin_xmm_reg, - pub __fpu_xmm8: __darwin_xmm_reg, - pub __fpu_xmm9: __darwin_xmm_reg, - pub __fpu_xmm10: __darwin_xmm_reg, - pub __fpu_xmm11: __darwin_xmm_reg, - pub __fpu_xmm12: __darwin_xmm_reg, - pub __fpu_xmm13: __darwin_xmm_reg, - pub __fpu_xmm14: __darwin_xmm_reg, - pub __fpu_xmm15: __darwin_xmm_reg, - pub __fpu_rsrv4: [::std::os::raw::c_char; 96usize], - pub __fpu_reserved1: ::std::os::raw::c_int, - pub __avx_reserved1: [::std::os::raw::c_char; 64usize], - pub __fpu_ymmh0: __darwin_xmm_reg, - pub __fpu_ymmh1: __darwin_xmm_reg, - pub __fpu_ymmh2: __darwin_xmm_reg, - pub __fpu_ymmh3: __darwin_xmm_reg, - pub __fpu_ymmh4: __darwin_xmm_reg, - pub __fpu_ymmh5: __darwin_xmm_reg, - pub __fpu_ymmh6: __darwin_xmm_reg, - pub __fpu_ymmh7: __darwin_xmm_reg, - pub __fpu_ymmh8: __darwin_xmm_reg, - pub __fpu_ymmh9: __darwin_xmm_reg, - pub __fpu_ymmh10: __darwin_xmm_reg, - pub __fpu_ymmh11: __darwin_xmm_reg, - pub __fpu_ymmh12: __darwin_xmm_reg, - pub __fpu_ymmh13: __darwin_xmm_reg, - pub __fpu_ymmh14: __darwin_xmm_reg, - pub __fpu_ymmh15: __darwin_xmm_reg, -} -#[test] -fn bindgen_test_layout___darwin_x86_avx_state64() { - assert_eq!( - ::std::mem::size_of::<__darwin_x86_avx_state64>(), - 844usize, - concat!("Size of: ", stringify!(__darwin_x86_avx_state64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_x86_avx_state64>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_x86_avx_state64)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_reserved as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_reserved) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_fcw as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_fcw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_fsw as *const _ as usize - }, - 10usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_fsw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ftw as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ftw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_rsrv1 as *const _ as usize - }, - 13usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_rsrv1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_fop as *const _ as usize - }, - 14usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_fop) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ip as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ip) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_cs as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_cs) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_rsrv2 as *const _ as usize - }, - 22usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_rsrv2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_dp as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_dp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ds as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ds) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_rsrv3 as *const _ as usize - }, - 30usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_rsrv3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_mxcsr as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_mxcsr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_mxcsrmask as *const _ - as usize - }, - 36usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_mxcsrmask) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_stmm0 as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_stmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_stmm1 as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_stmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_stmm2 as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_stmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_stmm3 as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_stmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_stmm4 as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_stmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_stmm5 as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_stmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_stmm6 as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_stmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_stmm7 as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_stmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm0 as *const _ as usize - }, - 168usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm1 as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm2 as *const _ as usize - }, - 200usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm3 as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm4 as *const _ as usize - }, - 232usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm5 as *const _ as usize - }, - 248usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm6 as *const _ as usize - }, - 264usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm7 as *const _ as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm8 as *const _ as usize - }, - 296usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm8) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm9 as *const _ as usize - }, - 312usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm9) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm10 as *const _ as usize - }, - 328usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm10) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm11 as *const _ as usize - }, - 344usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm11) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm12 as *const _ as usize - }, - 360usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm12) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm13 as *const _ as usize - }, - 376usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm13) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm14 as *const _ as usize - }, - 392usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm14) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_xmm15 as *const _ as usize - }, - 408usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_xmm15) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_rsrv4 as *const _ as usize - }, - 424usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_rsrv4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_reserved1 as *const _ - as usize - }, - 520usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_reserved1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__avx_reserved1 as *const _ - as usize - }, - 524usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__avx_reserved1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh0 as *const _ as usize - }, - 588usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh1 as *const _ as usize - }, - 604usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh2 as *const _ as usize - }, - 620usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh3 as *const _ as usize - }, - 636usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh4 as *const _ as usize - }, - 652usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh5 as *const _ as usize - }, - 668usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh6 as *const _ as usize - }, - 684usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh7 as *const _ as usize - }, - 700usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh8 as *const _ as usize - }, - 716usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh8) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh9 as *const _ as usize - }, - 732usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh9) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh10 as *const _ as usize - }, - 748usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh10) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh11 as *const _ as usize - }, - 764usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh11) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh12 as *const _ as usize - }, - 780usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh12) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh13 as *const _ as usize - }, - 796usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh13) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh14 as *const _ as usize - }, - 812usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh14) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx_state64>())).__fpu_ymmh15 as *const _ as usize - }, - 828usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx_state64), - "::", - stringify!(__fpu_ymmh15) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_x86_avx512_state64 { - pub __fpu_reserved: [::std::os::raw::c_int; 2usize], - pub __fpu_fcw: __darwin_fp_control, - pub __fpu_fsw: __darwin_fp_status, - pub __fpu_ftw: __uint8_t, - pub __fpu_rsrv1: __uint8_t, - pub __fpu_fop: __uint16_t, - pub __fpu_ip: __uint32_t, - pub __fpu_cs: __uint16_t, - pub __fpu_rsrv2: __uint16_t, - pub __fpu_dp: __uint32_t, - pub __fpu_ds: __uint16_t, - pub __fpu_rsrv3: __uint16_t, - pub __fpu_mxcsr: __uint32_t, - pub __fpu_mxcsrmask: __uint32_t, - pub __fpu_stmm0: __darwin_mmst_reg, - pub __fpu_stmm1: __darwin_mmst_reg, - pub __fpu_stmm2: __darwin_mmst_reg, - pub __fpu_stmm3: __darwin_mmst_reg, - pub __fpu_stmm4: __darwin_mmst_reg, - pub __fpu_stmm5: __darwin_mmst_reg, - pub __fpu_stmm6: __darwin_mmst_reg, - pub __fpu_stmm7: __darwin_mmst_reg, - pub __fpu_xmm0: __darwin_xmm_reg, - pub __fpu_xmm1: __darwin_xmm_reg, - pub __fpu_xmm2: __darwin_xmm_reg, - pub __fpu_xmm3: __darwin_xmm_reg, - pub __fpu_xmm4: __darwin_xmm_reg, - pub __fpu_xmm5: __darwin_xmm_reg, - pub __fpu_xmm6: __darwin_xmm_reg, - pub __fpu_xmm7: __darwin_xmm_reg, - pub __fpu_xmm8: __darwin_xmm_reg, - pub __fpu_xmm9: __darwin_xmm_reg, - pub __fpu_xmm10: __darwin_xmm_reg, - pub __fpu_xmm11: __darwin_xmm_reg, - pub __fpu_xmm12: __darwin_xmm_reg, - pub __fpu_xmm13: __darwin_xmm_reg, - pub __fpu_xmm14: __darwin_xmm_reg, - pub __fpu_xmm15: __darwin_xmm_reg, - pub __fpu_rsrv4: [::std::os::raw::c_char; 96usize], - pub __fpu_reserved1: ::std::os::raw::c_int, - pub __avx_reserved1: [::std::os::raw::c_char; 64usize], - pub __fpu_ymmh0: __darwin_xmm_reg, - pub __fpu_ymmh1: __darwin_xmm_reg, - pub __fpu_ymmh2: __darwin_xmm_reg, - pub __fpu_ymmh3: __darwin_xmm_reg, - pub __fpu_ymmh4: __darwin_xmm_reg, - pub __fpu_ymmh5: __darwin_xmm_reg, - pub __fpu_ymmh6: __darwin_xmm_reg, - pub __fpu_ymmh7: __darwin_xmm_reg, - pub __fpu_ymmh8: __darwin_xmm_reg, - pub __fpu_ymmh9: __darwin_xmm_reg, - pub __fpu_ymmh10: __darwin_xmm_reg, - pub __fpu_ymmh11: __darwin_xmm_reg, - pub __fpu_ymmh12: __darwin_xmm_reg, - pub __fpu_ymmh13: __darwin_xmm_reg, - pub __fpu_ymmh14: __darwin_xmm_reg, - pub __fpu_ymmh15: __darwin_xmm_reg, - pub __fpu_k0: __darwin_opmask_reg, - pub __fpu_k1: __darwin_opmask_reg, - pub __fpu_k2: __darwin_opmask_reg, - pub __fpu_k3: __darwin_opmask_reg, - pub __fpu_k4: __darwin_opmask_reg, - pub __fpu_k5: __darwin_opmask_reg, - pub __fpu_k6: __darwin_opmask_reg, - pub __fpu_k7: __darwin_opmask_reg, - pub __fpu_zmmh0: __darwin_ymm_reg, - pub __fpu_zmmh1: __darwin_ymm_reg, - pub __fpu_zmmh2: __darwin_ymm_reg, - pub __fpu_zmmh3: __darwin_ymm_reg, - pub __fpu_zmmh4: __darwin_ymm_reg, - pub __fpu_zmmh5: __darwin_ymm_reg, - pub __fpu_zmmh6: __darwin_ymm_reg, - pub __fpu_zmmh7: __darwin_ymm_reg, - pub __fpu_zmmh8: __darwin_ymm_reg, - pub __fpu_zmmh9: __darwin_ymm_reg, - pub __fpu_zmmh10: __darwin_ymm_reg, - pub __fpu_zmmh11: __darwin_ymm_reg, - pub __fpu_zmmh12: __darwin_ymm_reg, - pub __fpu_zmmh13: __darwin_ymm_reg, - pub __fpu_zmmh14: __darwin_ymm_reg, - pub __fpu_zmmh15: __darwin_ymm_reg, - pub __fpu_zmm16: __darwin_zmm_reg, - pub __fpu_zmm17: __darwin_zmm_reg, - pub __fpu_zmm18: __darwin_zmm_reg, - pub __fpu_zmm19: __darwin_zmm_reg, - pub __fpu_zmm20: __darwin_zmm_reg, - pub __fpu_zmm21: __darwin_zmm_reg, - pub __fpu_zmm22: __darwin_zmm_reg, - pub __fpu_zmm23: __darwin_zmm_reg, - pub __fpu_zmm24: __darwin_zmm_reg, - pub __fpu_zmm25: __darwin_zmm_reg, - pub __fpu_zmm26: __darwin_zmm_reg, - pub __fpu_zmm27: __darwin_zmm_reg, - pub __fpu_zmm28: __darwin_zmm_reg, - pub __fpu_zmm29: __darwin_zmm_reg, - pub __fpu_zmm30: __darwin_zmm_reg, - pub __fpu_zmm31: __darwin_zmm_reg, -} -#[test] -fn bindgen_test_layout___darwin_x86_avx512_state64() { - assert_eq!( - ::std::mem::size_of::<__darwin_x86_avx512_state64>(), - 2444usize, - concat!("Size of: ", stringify!(__darwin_x86_avx512_state64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_x86_avx512_state64>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_x86_avx512_state64)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_reserved as *const _ - as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_reserved) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_fcw as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_fcw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_fsw as *const _ as usize - }, - 10usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_fsw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ftw as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ftw) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_rsrv1 as *const _ as usize - }, - 13usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_rsrv1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_fop as *const _ as usize - }, - 14usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_fop) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ip as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ip) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_cs as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_cs) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_rsrv2 as *const _ as usize - }, - 22usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_rsrv2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_dp as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_dp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ds as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ds) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_rsrv3 as *const _ as usize - }, - 30usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_rsrv3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_mxcsr as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_mxcsr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_mxcsrmask as *const _ - as usize - }, - 36usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_mxcsrmask) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_stmm0 as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_stmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_stmm1 as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_stmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_stmm2 as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_stmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_stmm3 as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_stmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_stmm4 as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_stmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_stmm5 as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_stmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_stmm6 as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_stmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_stmm7 as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_stmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm0 as *const _ as usize - }, - 168usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm1 as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm2 as *const _ as usize - }, - 200usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm3 as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm4 as *const _ as usize - }, - 232usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm5 as *const _ as usize - }, - 248usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm6 as *const _ as usize - }, - 264usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm7 as *const _ as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm8 as *const _ as usize - }, - 296usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm8) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm9 as *const _ as usize - }, - 312usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm9) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm10 as *const _ as usize - }, - 328usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm10) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm11 as *const _ as usize - }, - 344usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm11) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm12 as *const _ as usize - }, - 360usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm12) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm13 as *const _ as usize - }, - 376usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm13) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm14 as *const _ as usize - }, - 392usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm14) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_xmm15 as *const _ as usize - }, - 408usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_xmm15) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_rsrv4 as *const _ as usize - }, - 424usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_rsrv4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_reserved1 as *const _ - as usize - }, - 520usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_reserved1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__avx_reserved1 as *const _ - as usize - }, - 524usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__avx_reserved1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh0 as *const _ as usize - }, - 588usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh1 as *const _ as usize - }, - 604usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh2 as *const _ as usize - }, - 620usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh3 as *const _ as usize - }, - 636usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh4 as *const _ as usize - }, - 652usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh5 as *const _ as usize - }, - 668usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh6 as *const _ as usize - }, - 684usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh7 as *const _ as usize - }, - 700usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh8 as *const _ as usize - }, - 716usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh8) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh9 as *const _ as usize - }, - 732usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh9) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh10 as *const _ - as usize - }, - 748usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh10) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh11 as *const _ - as usize - }, - 764usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh11) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh12 as *const _ - as usize - }, - 780usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh12) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh13 as *const _ - as usize - }, - 796usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh13) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh14 as *const _ - as usize - }, - 812usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh14) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_ymmh15 as *const _ - as usize - }, - 828usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_ymmh15) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_k0 as *const _ as usize - }, - 844usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_k0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_k1 as *const _ as usize - }, - 852usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_k1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_k2 as *const _ as usize - }, - 860usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_k2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_k3 as *const _ as usize - }, - 868usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_k3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_k4 as *const _ as usize - }, - 876usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_k4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_k5 as *const _ as usize - }, - 884usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_k5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_k6 as *const _ as usize - }, - 892usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_k6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_k7 as *const _ as usize - }, - 900usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_k7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh0 as *const _ as usize - }, - 908usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh1 as *const _ as usize - }, - 940usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh2 as *const _ as usize - }, - 972usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh3 as *const _ as usize - }, - 1004usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh4 as *const _ as usize - }, - 1036usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh5 as *const _ as usize - }, - 1068usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh6 as *const _ as usize - }, - 1100usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh7 as *const _ as usize - }, - 1132usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh7) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh8 as *const _ as usize - }, - 1164usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh8) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh9 as *const _ as usize - }, - 1196usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh9) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh10 as *const _ - as usize - }, - 1228usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh10) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh11 as *const _ - as usize - }, - 1260usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh11) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh12 as *const _ - as usize - }, - 1292usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh12) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh13 as *const _ - as usize - }, - 1324usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh13) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh14 as *const _ - as usize - }, - 1356usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh14) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmmh15 as *const _ - as usize - }, - 1388usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmmh15) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm16 as *const _ as usize - }, - 1420usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm16) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm17 as *const _ as usize - }, - 1484usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm17) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm18 as *const _ as usize - }, - 1548usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm18) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm19 as *const _ as usize - }, - 1612usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm19) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm20 as *const _ as usize - }, - 1676usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm20) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm21 as *const _ as usize - }, - 1740usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm21) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm22 as *const _ as usize - }, - 1804usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm22) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm23 as *const _ as usize - }, - 1868usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm23) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm24 as *const _ as usize - }, - 1932usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm24) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm25 as *const _ as usize - }, - 1996usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm25) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm26 as *const _ as usize - }, - 2060usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm26) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm27 as *const _ as usize - }, - 2124usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm27) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm28 as *const _ as usize - }, - 2188usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm28) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm29 as *const _ as usize - }, - 2252usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm29) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm30 as *const _ as usize - }, - 2316usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm30) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_avx512_state64>())).__fpu_zmm31 as *const _ as usize - }, - 2380usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_avx512_state64), - "::", - stringify!(__fpu_zmm31) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_x86_exception_state64 { - pub __trapno: __uint16_t, - pub __cpu: __uint16_t, - pub __err: __uint32_t, - pub __faultvaddr: __uint64_t, -} -#[test] -fn bindgen_test_layout___darwin_x86_exception_state64() { - assert_eq!( - ::std::mem::size_of::<__darwin_x86_exception_state64>(), - 16usize, - concat!("Size of: ", stringify!(__darwin_x86_exception_state64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_x86_exception_state64>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_x86_exception_state64)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_exception_state64>())).__trapno as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_exception_state64), - "::", - stringify!(__trapno) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_exception_state64>())).__cpu as *const _ as usize - }, - 2usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_exception_state64), - "::", - stringify!(__cpu) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_exception_state64>())).__err as *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_exception_state64), - "::", - stringify!(__err) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_exception_state64>())).__faultvaddr as *const _ - as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_exception_state64), - "::", - stringify!(__faultvaddr) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_x86_debug_state64 { - pub __dr0: __uint64_t, - pub __dr1: __uint64_t, - pub __dr2: __uint64_t, - pub __dr3: __uint64_t, - pub __dr4: __uint64_t, - pub __dr5: __uint64_t, - pub __dr6: __uint64_t, - pub __dr7: __uint64_t, -} -#[test] -fn bindgen_test_layout___darwin_x86_debug_state64() { - assert_eq!( - ::std::mem::size_of::<__darwin_x86_debug_state64>(), - 64usize, - concat!("Size of: ", stringify!(__darwin_x86_debug_state64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_x86_debug_state64>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_x86_debug_state64)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state64>())).__dr0 as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state64), - "::", - stringify!(__dr0) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state64>())).__dr1 as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state64), - "::", - stringify!(__dr1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state64>())).__dr2 as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state64), - "::", - stringify!(__dr2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state64>())).__dr3 as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state64), - "::", - stringify!(__dr3) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state64>())).__dr4 as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state64), - "::", - stringify!(__dr4) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state64>())).__dr5 as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state64), - "::", - stringify!(__dr5) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state64>())).__dr6 as *const _ as usize - }, - 48usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state64), - "::", - stringify!(__dr6) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_debug_state64>())).__dr7 as *const _ as usize - }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_debug_state64), - "::", - stringify!(__dr7) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_x86_cpmu_state64 { - pub __ctrs: [__uint64_t; 16usize], -} -#[test] -fn bindgen_test_layout___darwin_x86_cpmu_state64() { - assert_eq!( - ::std::mem::size_of::<__darwin_x86_cpmu_state64>(), - 128usize, - concat!("Size of: ", stringify!(__darwin_x86_cpmu_state64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_x86_cpmu_state64>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_x86_cpmu_state64)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_x86_cpmu_state64>())).__ctrs as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_x86_cpmu_state64), - "::", - stringify!(__ctrs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mcontext32 { - pub __es: __darwin_i386_exception_state, - pub __ss: __darwin_i386_thread_state, - pub __fs: __darwin_i386_float_state, -} -#[test] -fn bindgen_test_layout___darwin_mcontext32() { - assert_eq!( - ::std::mem::size_of::<__darwin_mcontext32>(), - 600usize, - concat!("Size of: ", stringify!(__darwin_mcontext32)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mcontext32>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_mcontext32)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext32>())).__es as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext32), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext32>())).__ss as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext32), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext32>())).__fs as *const _ as usize }, - 76usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext32), - "::", - stringify!(__fs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mcontext_avx32 { - pub __es: __darwin_i386_exception_state, - pub __ss: __darwin_i386_thread_state, - pub __fs: __darwin_i386_avx_state, -} -#[test] -fn bindgen_test_layout___darwin_mcontext_avx32() { - assert_eq!( - ::std::mem::size_of::<__darwin_mcontext_avx32>(), - 792usize, - concat!("Size of: ", stringify!(__darwin_mcontext_avx32)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mcontext_avx32>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_mcontext_avx32)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext_avx32>())).__es as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx32), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext_avx32>())).__ss as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx32), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext_avx32>())).__fs as *const _ as usize }, - 76usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx32), - "::", - stringify!(__fs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mcontext_avx512_32 { - pub __es: __darwin_i386_exception_state, - pub __ss: __darwin_i386_thread_state, - pub __fs: __darwin_i386_avx512_state, -} -#[test] -fn bindgen_test_layout___darwin_mcontext_avx512_32() { - assert_eq!( - ::std::mem::size_of::<__darwin_mcontext_avx512_32>(), - 1112usize, - concat!("Size of: ", stringify!(__darwin_mcontext_avx512_32)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mcontext_avx512_32>(), - 4usize, - concat!("Alignment of ", stringify!(__darwin_mcontext_avx512_32)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx512_32>())).__es as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx512_32), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx512_32>())).__ss as *const _ as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx512_32), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx512_32>())).__fs as *const _ as usize - }, - 76usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx512_32), - "::", - stringify!(__fs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mcontext64 { - pub __es: __darwin_x86_exception_state64, - pub __ss: __darwin_x86_thread_state64, - pub __fs: __darwin_x86_float_state64, -} -#[test] -fn bindgen_test_layout___darwin_mcontext64() { - assert_eq!( - ::std::mem::size_of::<__darwin_mcontext64>(), - 712usize, - concat!("Size of: ", stringify!(__darwin_mcontext64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mcontext64>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_mcontext64)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext64>())).__es as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext64), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext64>())).__ss as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext64), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext64>())).__fs as *const _ as usize }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext64), - "::", - stringify!(__fs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mcontext64_full { - pub __es: __darwin_x86_exception_state64, - pub __ss: __darwin_x86_thread_full_state64, - pub __fs: __darwin_x86_float_state64, -} -#[test] -fn bindgen_test_layout___darwin_mcontext64_full() { - assert_eq!( - ::std::mem::size_of::<__darwin_mcontext64_full>(), - 744usize, - concat!("Size of: ", stringify!(__darwin_mcontext64_full)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mcontext64_full>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_mcontext64_full)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext64_full>())).__es as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext64_full), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext64_full>())).__ss as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext64_full), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext64_full>())).__fs as *const _ as usize }, - 216usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext64_full), - "::", - stringify!(__fs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mcontext_avx64 { - pub __es: __darwin_x86_exception_state64, - pub __ss: __darwin_x86_thread_state64, - pub __fs: __darwin_x86_avx_state64, -} -#[test] -fn bindgen_test_layout___darwin_mcontext_avx64() { - assert_eq!( - ::std::mem::size_of::<__darwin_mcontext_avx64>(), - 1032usize, - concat!("Size of: ", stringify!(__darwin_mcontext_avx64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mcontext_avx64>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_mcontext_avx64)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext_avx64>())).__es as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx64), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext_avx64>())).__ss as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx64), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_mcontext_avx64>())).__fs as *const _ as usize }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx64), - "::", - stringify!(__fs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mcontext_avx64_full { - pub __es: __darwin_x86_exception_state64, - pub __ss: __darwin_x86_thread_full_state64, - pub __fs: __darwin_x86_avx_state64, -} -#[test] -fn bindgen_test_layout___darwin_mcontext_avx64_full() { - assert_eq!( - ::std::mem::size_of::<__darwin_mcontext_avx64_full>(), - 1064usize, - concat!("Size of: ", stringify!(__darwin_mcontext_avx64_full)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mcontext_avx64_full>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_mcontext_avx64_full)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx64_full>())).__es as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx64_full), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx64_full>())).__ss as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx64_full), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx64_full>())).__fs as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx64_full), - "::", - stringify!(__fs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mcontext_avx512_64 { - pub __es: __darwin_x86_exception_state64, - pub __ss: __darwin_x86_thread_state64, - pub __fs: __darwin_x86_avx512_state64, -} -#[test] -fn bindgen_test_layout___darwin_mcontext_avx512_64() { - assert_eq!( - ::std::mem::size_of::<__darwin_mcontext_avx512_64>(), - 2632usize, - concat!("Size of: ", stringify!(__darwin_mcontext_avx512_64)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mcontext_avx512_64>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_mcontext_avx512_64)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx512_64>())).__es as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx512_64), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx512_64>())).__ss as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx512_64), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx512_64>())).__fs as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx512_64), - "::", - stringify!(__fs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_mcontext_avx512_64_full { - pub __es: __darwin_x86_exception_state64, - pub __ss: __darwin_x86_thread_full_state64, - pub __fs: __darwin_x86_avx512_state64, -} -#[test] -fn bindgen_test_layout___darwin_mcontext_avx512_64_full() { - assert_eq!( - ::std::mem::size_of::<__darwin_mcontext_avx512_64_full>(), - 2664usize, - concat!("Size of: ", stringify!(__darwin_mcontext_avx512_64_full)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_mcontext_avx512_64_full>(), - 8usize, - concat!( - "Alignment of ", - stringify!(__darwin_mcontext_avx512_64_full) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx512_64_full>())).__es as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx512_64_full), - "::", - stringify!(__es) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx512_64_full>())).__ss as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx512_64_full), - "::", - stringify!(__ss) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__darwin_mcontext_avx512_64_full>())).__fs as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(__darwin_mcontext_avx512_64_full), - "::", - stringify!(__fs) - ) - ); -} -pub type mcontext_t = *mut __darwin_mcontext64; -pub type pthread_attr_t = __darwin_pthread_attr_t; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_sigaltstack { - pub ss_sp: *mut ::std::os::raw::c_void, - pub ss_size: __darwin_size_t, - pub ss_flags: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout___darwin_sigaltstack() { - assert_eq!( - ::std::mem::size_of::<__darwin_sigaltstack>(), - 24usize, - concat!("Size of: ", stringify!(__darwin_sigaltstack)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_sigaltstack>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_sigaltstack)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_sigaltstack>())).ss_sp as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_sigaltstack), - "::", - stringify!(ss_sp) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_sigaltstack>())).ss_size as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_sigaltstack), - "::", - stringify!(ss_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_sigaltstack>())).ss_flags as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__darwin_sigaltstack), - "::", - stringify!(ss_flags) - ) - ); -} -pub type stack_t = __darwin_sigaltstack; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __darwin_ucontext { - pub uc_onstack: ::std::os::raw::c_int, - pub uc_sigmask: __darwin_sigset_t, - pub uc_stack: __darwin_sigaltstack, - pub uc_link: *mut __darwin_ucontext, - pub uc_mcsize: __darwin_size_t, - pub uc_mcontext: *mut __darwin_mcontext64, -} -#[test] -fn bindgen_test_layout___darwin_ucontext() { - assert_eq!( - ::std::mem::size_of::<__darwin_ucontext>(), - 56usize, - concat!("Size of: ", stringify!(__darwin_ucontext)) - ); - assert_eq!( - ::std::mem::align_of::<__darwin_ucontext>(), - 8usize, - concat!("Alignment of ", stringify!(__darwin_ucontext)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_ucontext>())).uc_onstack as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__darwin_ucontext), - "::", - stringify!(uc_onstack) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_ucontext>())).uc_sigmask as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__darwin_ucontext), - "::", - stringify!(uc_sigmask) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_ucontext>())).uc_stack as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__darwin_ucontext), - "::", - stringify!(uc_stack) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_ucontext>())).uc_link as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__darwin_ucontext), - "::", - stringify!(uc_link) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_ucontext>())).uc_mcsize as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__darwin_ucontext), - "::", - stringify!(uc_mcsize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__darwin_ucontext>())).uc_mcontext as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(__darwin_ucontext), - "::", - stringify!(uc_mcontext) - ) - ); -} -pub type ucontext_t = __darwin_ucontext; -pub type sigset_t = __darwin_sigset_t; -pub type size_t = __darwin_size_t; -pub type uid_t = __darwin_uid_t; -#[repr(C)] -#[derive(Copy, Clone)] -pub union sigval { - pub sival_int: ::std::os::raw::c_int, - pub sival_ptr: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout_sigval() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(sigval)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(sigval)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sival_int as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(sigval), - "::", - stringify!(sival_int) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sival_ptr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(sigval), - "::", - stringify!(sival_ptr) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct sigevent { - pub sigev_notify: ::std::os::raw::c_int, - pub sigev_signo: ::std::os::raw::c_int, - pub sigev_value: sigval, - pub sigev_notify_function: ::std::option::Option, - pub sigev_notify_attributes: *mut pthread_attr_t, -} -#[test] -fn bindgen_test_layout_sigevent() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(sigevent)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(sigevent)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sigev_notify as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(sigevent), - "::", - stringify!(sigev_notify) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sigev_signo as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(sigevent), - "::", - stringify!(sigev_signo) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sigev_value as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(sigevent), - "::", - stringify!(sigev_value) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sigev_notify_function as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(sigevent), - "::", - stringify!(sigev_notify_function) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).sigev_notify_attributes as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(sigevent), - "::", - stringify!(sigev_notify_attributes) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct __siginfo { - pub si_signo: ::std::os::raw::c_int, - pub si_errno: ::std::os::raw::c_int, - pub si_code: ::std::os::raw::c_int, - pub si_pid: pid_t, - pub si_uid: uid_t, - pub si_status: ::std::os::raw::c_int, - pub si_addr: *mut ::std::os::raw::c_void, - pub si_value: sigval, - pub si_band: ::std::os::raw::c_long, - pub __pad: [::std::os::raw::c_ulong; 7usize], -} -#[test] -fn bindgen_test_layout___siginfo() { - assert_eq!( - ::std::mem::size_of::<__siginfo>(), - 104usize, - concat!("Size of: ", stringify!(__siginfo)) - ); - assert_eq!( - ::std::mem::align_of::<__siginfo>(), - 8usize, - concat!("Alignment of ", stringify!(__siginfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).si_signo as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(si_signo) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).si_errno as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(si_errno) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).si_code as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(si_code) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).si_pid as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(si_pid) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).si_uid as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(si_uid) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).si_status as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(si_status) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).si_addr as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(si_addr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).si_value as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(si_value) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).si_band as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(si_band) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__siginfo>())).__pad as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(__siginfo), - "::", - stringify!(__pad) - ) - ); -} -pub type siginfo_t = __siginfo; -#[repr(C)] -#[derive(Copy, Clone)] -pub union __sigaction_u { - pub __sa_handler: ::std::option::Option, - pub __sa_sigaction: ::std::option::Option< - unsafe extern "C" fn( - arg1: ::std::os::raw::c_int, - arg2: *mut __siginfo, - arg3: *mut ::std::os::raw::c_void, - ), - >, -} -#[test] -fn bindgen_test_layout___sigaction_u() { - assert_eq!( - ::std::mem::size_of::<__sigaction_u>(), - 8usize, - concat!("Size of: ", stringify!(__sigaction_u)) - ); - assert_eq!( - ::std::mem::align_of::<__sigaction_u>(), - 8usize, - concat!("Alignment of ", stringify!(__sigaction_u)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sigaction_u>())).__sa_handler as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__sigaction_u), - "::", - stringify!(__sa_handler) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sigaction_u>())).__sa_sigaction as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__sigaction_u), - "::", - stringify!(__sa_sigaction) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct __sigaction { - pub __sigaction_u: __sigaction_u, - pub sa_tramp: ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: ::std::os::raw::c_int, - arg3: ::std::os::raw::c_int, - arg4: *mut siginfo_t, - arg5: *mut ::std::os::raw::c_void, - ), - >, - pub sa_mask: sigset_t, - pub sa_flags: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout___sigaction() { - assert_eq!( - ::std::mem::size_of::<__sigaction>(), - 24usize, - concat!("Size of: ", stringify!(__sigaction)) - ); - assert_eq!( - ::std::mem::align_of::<__sigaction>(), - 8usize, - concat!("Alignment of ", stringify!(__sigaction)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sigaction>())).__sigaction_u as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__sigaction), - "::", - stringify!(__sigaction_u) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sigaction>())).sa_tramp as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__sigaction), - "::", - stringify!(sa_tramp) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sigaction>())).sa_mask as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__sigaction), - "::", - stringify!(sa_mask) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sigaction>())).sa_flags as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(__sigaction), - "::", - stringify!(sa_flags) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct sigaction { - pub __sigaction_u: __sigaction_u, - pub sa_mask: sigset_t, - pub sa_flags: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_sigaction() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(sigaction)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(sigaction)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).__sigaction_u as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(sigaction), - "::", - stringify!(__sigaction_u) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sa_mask as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(sigaction), - "::", - stringify!(sa_mask) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sa_flags as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(sigaction), - "::", - stringify!(sa_flags) - ) - ); -} -pub type sig_t = ::std::option::Option; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct sigvec { - pub sv_handler: ::std::option::Option, - pub sv_mask: ::std::os::raw::c_int, - pub sv_flags: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_sigvec() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(sigvec)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(sigvec)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sv_handler as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(sigvec), - "::", - stringify!(sv_handler) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sv_mask as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(sigvec), - "::", - stringify!(sv_mask) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sv_flags as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(sigvec), - "::", - stringify!(sv_flags) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct sigstack { - pub ss_sp: *mut ::std::os::raw::c_char, - pub ss_onstack: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_sigstack() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(sigstack)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(sigstack)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ss_sp as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(sigstack), - "::", - stringify!(ss_sp) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ss_onstack as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(sigstack), - "::", - stringify!(ss_onstack) - ) - ); -} -extern "C" { - pub fn signal( - arg1: ::std::os::raw::c_int, - arg2: ::std::option::Option, - ) -> ::std::option::Option< - unsafe extern "C" fn( - arg1: ::std::os::raw::c_int, - arg2: ::std::option::Option, - ), - >; -} -pub type int_least8_t = i8; -pub type int_least16_t = i16; -pub type int_least32_t = i32; -pub type int_least64_t = i64; -pub type uint_least8_t = u8; -pub type uint_least16_t = u16; -pub type uint_least32_t = u32; -pub type uint_least64_t = u64; -pub type int_fast8_t = i8; -pub type int_fast16_t = i16; -pub type int_fast32_t = i32; -pub type int_fast64_t = i64; -pub type uint_fast8_t = u8; -pub type uint_fast16_t = u16; -pub type uint_fast32_t = u32; -pub type uint_fast64_t = u64; -pub type intmax_t = ::std::os::raw::c_long; -pub type uintmax_t = ::std::os::raw::c_ulong; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct timeval { - pub tv_sec: __darwin_time_t, - pub tv_usec: __darwin_suseconds_t, -} -#[test] -fn bindgen_test_layout_timeval() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(timeval)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(timeval)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).tv_sec as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(timeval), - "::", - stringify!(tv_sec) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).tv_usec as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(timeval), - "::", - stringify!(tv_usec) - ) - ); -} -pub type rlim_t = __uint64_t; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rusage { - pub ru_utime: timeval, - pub ru_stime: timeval, - pub ru_maxrss: ::std::os::raw::c_long, - pub ru_ixrss: ::std::os::raw::c_long, - pub ru_idrss: ::std::os::raw::c_long, - pub ru_isrss: ::std::os::raw::c_long, - pub ru_minflt: ::std::os::raw::c_long, - pub ru_majflt: ::std::os::raw::c_long, - pub ru_nswap: ::std::os::raw::c_long, - pub ru_inblock: ::std::os::raw::c_long, - pub ru_oublock: ::std::os::raw::c_long, - pub ru_msgsnd: ::std::os::raw::c_long, - pub ru_msgrcv: ::std::os::raw::c_long, - pub ru_nsignals: ::std::os::raw::c_long, - pub ru_nvcsw: ::std::os::raw::c_long, - pub ru_nivcsw: ::std::os::raw::c_long, -} -#[test] -fn bindgen_test_layout_rusage() { - assert_eq!( - ::std::mem::size_of::(), - 144usize, - concat!("Size of: ", stringify!(rusage)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rusage)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_utime as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_utime) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_stime as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_stime) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_maxrss as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_maxrss) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_ixrss as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_ixrss) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_idrss as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_idrss) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_isrss as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_isrss) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_minflt as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_minflt) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_majflt as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_majflt) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_nswap as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_nswap) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_inblock as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_inblock) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_oublock as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_oublock) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_msgsnd as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_msgsnd) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_msgrcv as *const _ as usize }, - 112usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_msgrcv) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_nsignals as *const _ as usize }, - 120usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_nsignals) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_nvcsw as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_nvcsw) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ru_nivcsw as *const _ as usize }, - 136usize, - concat!( - "Offset of field: ", - stringify!(rusage), - "::", - stringify!(ru_nivcsw) - ) - ); -} -pub type rusage_info_t = *mut ::std::os::raw::c_void; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rusage_info_v0 { - pub ri_uuid: [u8; 16usize], - pub ri_user_time: u64, - pub ri_system_time: u64, - pub ri_pkg_idle_wkups: u64, - pub ri_interrupt_wkups: u64, - pub ri_pageins: u64, - pub ri_wired_size: u64, - pub ri_resident_size: u64, - pub ri_phys_footprint: u64, - pub ri_proc_start_abstime: u64, - pub ri_proc_exit_abstime: u64, -} -#[test] -fn bindgen_test_layout_rusage_info_v0() { - assert_eq!( - ::std::mem::size_of::(), - 96usize, - concat!("Size of: ", stringify!(rusage_info_v0)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rusage_info_v0)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_uuid as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_uuid) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_user_time as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_user_time) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_system_time as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_pkg_idle_wkups as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_pkg_idle_wkups) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_interrupt_wkups as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_interrupt_wkups) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_pageins as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_pageins) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_wired_size as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_wired_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_resident_size as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_resident_size) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_phys_footprint as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_phys_footprint) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_start_abstime as *const _ as usize - }, - 80usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_proc_start_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_exit_abstime as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v0), - "::", - stringify!(ri_proc_exit_abstime) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rusage_info_v1 { - pub ri_uuid: [u8; 16usize], - pub ri_user_time: u64, - pub ri_system_time: u64, - pub ri_pkg_idle_wkups: u64, - pub ri_interrupt_wkups: u64, - pub ri_pageins: u64, - pub ri_wired_size: u64, - pub ri_resident_size: u64, - pub ri_phys_footprint: u64, - pub ri_proc_start_abstime: u64, - pub ri_proc_exit_abstime: u64, - pub ri_child_user_time: u64, - pub ri_child_system_time: u64, - pub ri_child_pkg_idle_wkups: u64, - pub ri_child_interrupt_wkups: u64, - pub ri_child_pageins: u64, - pub ri_child_elapsed_abstime: u64, -} -#[test] -fn bindgen_test_layout_rusage_info_v1() { - assert_eq!( - ::std::mem::size_of::(), - 144usize, - concat!("Size of: ", stringify!(rusage_info_v1)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rusage_info_v1)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_uuid as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_uuid) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_user_time as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_user_time) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_system_time as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_pkg_idle_wkups as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_pkg_idle_wkups) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_interrupt_wkups as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_interrupt_wkups) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_pageins as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_pageins) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_wired_size as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_wired_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_resident_size as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_resident_size) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_phys_footprint as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_phys_footprint) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_start_abstime as *const _ as usize - }, - 80usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_proc_start_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_exit_abstime as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_proc_exit_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_user_time as *const _ as usize - }, - 96usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_child_user_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_system_time as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_child_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_pkg_idle_wkups as *const _ as usize - }, - 112usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_child_pkg_idle_wkups) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_interrupt_wkups as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_child_interrupt_wkups) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_child_pageins as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_child_pageins) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_elapsed_abstime as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v1), - "::", - stringify!(ri_child_elapsed_abstime) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rusage_info_v2 { - pub ri_uuid: [u8; 16usize], - pub ri_user_time: u64, - pub ri_system_time: u64, - pub ri_pkg_idle_wkups: u64, - pub ri_interrupt_wkups: u64, - pub ri_pageins: u64, - pub ri_wired_size: u64, - pub ri_resident_size: u64, - pub ri_phys_footprint: u64, - pub ri_proc_start_abstime: u64, - pub ri_proc_exit_abstime: u64, - pub ri_child_user_time: u64, - pub ri_child_system_time: u64, - pub ri_child_pkg_idle_wkups: u64, - pub ri_child_interrupt_wkups: u64, - pub ri_child_pageins: u64, - pub ri_child_elapsed_abstime: u64, - pub ri_diskio_bytesread: u64, - pub ri_diskio_byteswritten: u64, -} -#[test] -fn bindgen_test_layout_rusage_info_v2() { - assert_eq!( - ::std::mem::size_of::(), - 160usize, - concat!("Size of: ", stringify!(rusage_info_v2)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rusage_info_v2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_uuid as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_uuid) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_user_time as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_user_time) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_system_time as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_pkg_idle_wkups as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_pkg_idle_wkups) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_interrupt_wkups as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_interrupt_wkups) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_pageins as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_pageins) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_wired_size as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_wired_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_resident_size as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_resident_size) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_phys_footprint as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_phys_footprint) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_start_abstime as *const _ as usize - }, - 80usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_proc_start_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_exit_abstime as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_proc_exit_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_user_time as *const _ as usize - }, - 96usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_child_user_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_system_time as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_child_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_pkg_idle_wkups as *const _ as usize - }, - 112usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_child_pkg_idle_wkups) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_interrupt_wkups as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_child_interrupt_wkups) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_child_pageins as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_child_pageins) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_elapsed_abstime as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_child_elapsed_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_diskio_bytesread as *const _ as usize - }, - 144usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_diskio_bytesread) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_diskio_byteswritten as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v2), - "::", - stringify!(ri_diskio_byteswritten) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rusage_info_v3 { - pub ri_uuid: [u8; 16usize], - pub ri_user_time: u64, - pub ri_system_time: u64, - pub ri_pkg_idle_wkups: u64, - pub ri_interrupt_wkups: u64, - pub ri_pageins: u64, - pub ri_wired_size: u64, - pub ri_resident_size: u64, - pub ri_phys_footprint: u64, - pub ri_proc_start_abstime: u64, - pub ri_proc_exit_abstime: u64, - pub ri_child_user_time: u64, - pub ri_child_system_time: u64, - pub ri_child_pkg_idle_wkups: u64, - pub ri_child_interrupt_wkups: u64, - pub ri_child_pageins: u64, - pub ri_child_elapsed_abstime: u64, - pub ri_diskio_bytesread: u64, - pub ri_diskio_byteswritten: u64, - pub ri_cpu_time_qos_default: u64, - pub ri_cpu_time_qos_maintenance: u64, - pub ri_cpu_time_qos_background: u64, - pub ri_cpu_time_qos_utility: u64, - pub ri_cpu_time_qos_legacy: u64, - pub ri_cpu_time_qos_user_initiated: u64, - pub ri_cpu_time_qos_user_interactive: u64, - pub ri_billed_system_time: u64, - pub ri_serviced_system_time: u64, -} -#[test] -fn bindgen_test_layout_rusage_info_v3() { - assert_eq!( - ::std::mem::size_of::(), - 232usize, - concat!("Size of: ", stringify!(rusage_info_v3)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rusage_info_v3)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_uuid as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_uuid) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_user_time as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_user_time) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_system_time as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_pkg_idle_wkups as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_pkg_idle_wkups) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_interrupt_wkups as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_interrupt_wkups) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_pageins as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_pageins) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_wired_size as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_wired_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_resident_size as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_resident_size) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_phys_footprint as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_phys_footprint) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_start_abstime as *const _ as usize - }, - 80usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_proc_start_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_exit_abstime as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_proc_exit_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_user_time as *const _ as usize - }, - 96usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_child_user_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_system_time as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_child_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_pkg_idle_wkups as *const _ as usize - }, - 112usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_child_pkg_idle_wkups) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_interrupt_wkups as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_child_interrupt_wkups) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_child_pageins as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_child_pageins) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_elapsed_abstime as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_child_elapsed_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_diskio_bytesread as *const _ as usize - }, - 144usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_diskio_bytesread) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_diskio_byteswritten as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_diskio_byteswritten) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_default as *const _ as usize - }, - 160usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_cpu_time_qos_default) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_maintenance as *const _ - as usize - }, - 168usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_cpu_time_qos_maintenance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_background as *const _ - as usize - }, - 176usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_cpu_time_qos_background) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_utility as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_cpu_time_qos_utility) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_legacy as *const _ as usize - }, - 192usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_cpu_time_qos_legacy) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_user_initiated as *const _ - as usize - }, - 200usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_cpu_time_qos_user_initiated) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_user_interactive as *const _ - as usize - }, - 208usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_cpu_time_qos_user_interactive) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_billed_system_time as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_billed_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_serviced_system_time as *const _ as usize - }, - 224usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v3), - "::", - stringify!(ri_serviced_system_time) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rusage_info_v4 { - pub ri_uuid: [u8; 16usize], - pub ri_user_time: u64, - pub ri_system_time: u64, - pub ri_pkg_idle_wkups: u64, - pub ri_interrupt_wkups: u64, - pub ri_pageins: u64, - pub ri_wired_size: u64, - pub ri_resident_size: u64, - pub ri_phys_footprint: u64, - pub ri_proc_start_abstime: u64, - pub ri_proc_exit_abstime: u64, - pub ri_child_user_time: u64, - pub ri_child_system_time: u64, - pub ri_child_pkg_idle_wkups: u64, - pub ri_child_interrupt_wkups: u64, - pub ri_child_pageins: u64, - pub ri_child_elapsed_abstime: u64, - pub ri_diskio_bytesread: u64, - pub ri_diskio_byteswritten: u64, - pub ri_cpu_time_qos_default: u64, - pub ri_cpu_time_qos_maintenance: u64, - pub ri_cpu_time_qos_background: u64, - pub ri_cpu_time_qos_utility: u64, - pub ri_cpu_time_qos_legacy: u64, - pub ri_cpu_time_qos_user_initiated: u64, - pub ri_cpu_time_qos_user_interactive: u64, - pub ri_billed_system_time: u64, - pub ri_serviced_system_time: u64, - pub ri_logical_writes: u64, - pub ri_lifetime_max_phys_footprint: u64, - pub ri_instructions: u64, - pub ri_cycles: u64, - pub ri_billed_energy: u64, - pub ri_serviced_energy: u64, - pub ri_interval_max_phys_footprint: u64, - pub ri_runnable_time: u64, -} -#[test] -fn bindgen_test_layout_rusage_info_v4() { - assert_eq!( - ::std::mem::size_of::(), - 296usize, - concat!("Size of: ", stringify!(rusage_info_v4)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rusage_info_v4)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_uuid as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_uuid) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_user_time as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_user_time) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_system_time as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_pkg_idle_wkups as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_pkg_idle_wkups) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_interrupt_wkups as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_interrupt_wkups) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_pageins as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_pageins) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_wired_size as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_wired_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_resident_size as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_resident_size) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_phys_footprint as *const _ as usize - }, - 72usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_phys_footprint) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_start_abstime as *const _ as usize - }, - 80usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_proc_start_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_proc_exit_abstime as *const _ as usize - }, - 88usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_proc_exit_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_user_time as *const _ as usize - }, - 96usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_child_user_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_system_time as *const _ as usize - }, - 104usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_child_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_pkg_idle_wkups as *const _ as usize - }, - 112usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_child_pkg_idle_wkups) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_interrupt_wkups as *const _ as usize - }, - 120usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_child_interrupt_wkups) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_child_pageins as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_child_pageins) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_child_elapsed_abstime as *const _ as usize - }, - 136usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_child_elapsed_abstime) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_diskio_bytesread as *const _ as usize - }, - 144usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_diskio_bytesread) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_diskio_byteswritten as *const _ as usize - }, - 152usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_diskio_byteswritten) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_default as *const _ as usize - }, - 160usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_cpu_time_qos_default) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_maintenance as *const _ - as usize - }, - 168usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_cpu_time_qos_maintenance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_background as *const _ - as usize - }, - 176usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_cpu_time_qos_background) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_utility as *const _ as usize - }, - 184usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_cpu_time_qos_utility) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_legacy as *const _ as usize - }, - 192usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_cpu_time_qos_legacy) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_user_initiated as *const _ - as usize - }, - 200usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_cpu_time_qos_user_initiated) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_cpu_time_qos_user_interactive as *const _ - as usize - }, - 208usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_cpu_time_qos_user_interactive) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_billed_system_time as *const _ as usize - }, - 216usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_billed_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_serviced_system_time as *const _ as usize - }, - 224usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_serviced_system_time) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_logical_writes as *const _ as usize - }, - 232usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_logical_writes) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_lifetime_max_phys_footprint as *const _ - as usize - }, - 240usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_lifetime_max_phys_footprint) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_instructions as *const _ as usize }, - 248usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_instructions) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_cycles as *const _ as usize }, - 256usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_cycles) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_billed_energy as *const _ as usize }, - 264usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_billed_energy) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_serviced_energy as *const _ as usize - }, - 272usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_serviced_energy) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).ri_interval_max_phys_footprint as *const _ - as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_interval_max_phys_footprint) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ri_runnable_time as *const _ as usize }, - 288usize, - concat!( - "Offset of field: ", - stringify!(rusage_info_v4), - "::", - stringify!(ri_runnable_time) - ) - ); -} -pub type rusage_info_current = rusage_info_v4; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rlimit { - pub rlim_cur: rlim_t, - pub rlim_max: rlim_t, -} -#[test] -fn bindgen_test_layout_rlimit() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(rlimit)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rlimit)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rlim_cur as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rlimit), - "::", - stringify!(rlim_cur) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rlim_max as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(rlimit), - "::", - stringify!(rlim_max) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct proc_rlimit_control_wakeupmon { - pub wm_flags: u32, - pub wm_rate: i32, -} -#[test] -fn bindgen_test_layout_proc_rlimit_control_wakeupmon() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(proc_rlimit_control_wakeupmon)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(proc_rlimit_control_wakeupmon)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).wm_flags as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(proc_rlimit_control_wakeupmon), - "::", - stringify!(wm_flags) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).wm_rate as *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(proc_rlimit_control_wakeupmon), - "::", - stringify!(wm_rate) - ) - ); -} -extern "C" { - pub fn getpriority(arg1: ::std::os::raw::c_int, arg2: id_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getiopolicy_np( - arg1: ::std::os::raw::c_int, - arg2: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getrlimit(arg1: ::std::os::raw::c_int, arg2: *mut rlimit) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getrusage(arg1: ::std::os::raw::c_int, arg2: *mut rusage) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn setpriority( - arg1: ::std::os::raw::c_int, - arg2: id_t, - arg3: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn setiopolicy_np( - arg1: ::std::os::raw::c_int, - arg2: ::std::os::raw::c_int, - arg3: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn setrlimit(arg1: ::std::os::raw::c_int, arg2: *const rlimit) -> ::std::os::raw::c_int; -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union wait { - pub w_status: ::std::os::raw::c_int, - pub w_T: wait__bindgen_ty_1, - pub w_S: wait__bindgen_ty_2, -} -#[repr(C)] -#[repr(align(4))] -#[derive(Debug, Copy, Clone)] -pub struct wait__bindgen_ty_1 { - pub _bitfield_align_1: [u16; 0], - pub _bitfield_1: __BindgenBitfieldUnit<[u8; 4usize]>, -} -#[test] -fn bindgen_test_layout_wait__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(wait__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(wait__bindgen_ty_1)) - ); -} -impl wait__bindgen_ty_1 { - #[inline] - pub fn w_Termsig(&self) -> ::std::os::raw::c_uint { - unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 7u8) as u32) } - } - #[inline] - pub fn set_w_Termsig(&mut self, val: ::std::os::raw::c_uint) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(0usize, 7u8, val as u64) - } - } - #[inline] - pub fn w_Coredump(&self) -> ::std::os::raw::c_uint { - unsafe { ::std::mem::transmute(self._bitfield_1.get(7usize, 1u8) as u32) } - } - #[inline] - pub fn set_w_Coredump(&mut self, val: ::std::os::raw::c_uint) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(7usize, 1u8, val as u64) - } - } - #[inline] - pub fn w_Retcode(&self) -> ::std::os::raw::c_uint { - unsafe { ::std::mem::transmute(self._bitfield_1.get(8usize, 8u8) as u32) } - } - #[inline] - pub fn set_w_Retcode(&mut self, val: ::std::os::raw::c_uint) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(8usize, 8u8, val as u64) - } - } - #[inline] - pub fn w_Filler(&self) -> ::std::os::raw::c_uint { - unsafe { ::std::mem::transmute(self._bitfield_1.get(16usize, 16u8) as u32) } - } - #[inline] - pub fn set_w_Filler(&mut self, val: ::std::os::raw::c_uint) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(16usize, 16u8, val as u64) - } - } - #[inline] - pub fn new_bitfield_1( - w_Termsig: ::std::os::raw::c_uint, - w_Coredump: ::std::os::raw::c_uint, - w_Retcode: ::std::os::raw::c_uint, - w_Filler: ::std::os::raw::c_uint, - ) -> __BindgenBitfieldUnit<[u8; 4usize]> { - let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 4usize]> = Default::default(); - __bindgen_bitfield_unit.set(0usize, 7u8, { - let w_Termsig: u32 = unsafe { ::std::mem::transmute(w_Termsig) }; - w_Termsig as u64 - }); - __bindgen_bitfield_unit.set(7usize, 1u8, { - let w_Coredump: u32 = unsafe { ::std::mem::transmute(w_Coredump) }; - w_Coredump as u64 - }); - __bindgen_bitfield_unit.set(8usize, 8u8, { - let w_Retcode: u32 = unsafe { ::std::mem::transmute(w_Retcode) }; - w_Retcode as u64 - }); - __bindgen_bitfield_unit.set(16usize, 16u8, { - let w_Filler: u32 = unsafe { ::std::mem::transmute(w_Filler) }; - w_Filler as u64 - }); - __bindgen_bitfield_unit - } -} -#[repr(C)] -#[repr(align(4))] -#[derive(Debug, Copy, Clone)] -pub struct wait__bindgen_ty_2 { - pub _bitfield_align_1: [u16; 0], - pub _bitfield_1: __BindgenBitfieldUnit<[u8; 4usize]>, -} -#[test] -fn bindgen_test_layout_wait__bindgen_ty_2() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(wait__bindgen_ty_2)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(wait__bindgen_ty_2)) - ); -} -impl wait__bindgen_ty_2 { - #[inline] - pub fn w_Stopval(&self) -> ::std::os::raw::c_uint { - unsafe { ::std::mem::transmute(self._bitfield_1.get(0usize, 8u8) as u32) } - } - #[inline] - pub fn set_w_Stopval(&mut self, val: ::std::os::raw::c_uint) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(0usize, 8u8, val as u64) - } - } - #[inline] - pub fn w_Stopsig(&self) -> ::std::os::raw::c_uint { - unsafe { ::std::mem::transmute(self._bitfield_1.get(8usize, 8u8) as u32) } - } - #[inline] - pub fn set_w_Stopsig(&mut self, val: ::std::os::raw::c_uint) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(8usize, 8u8, val as u64) - } - } - #[inline] - pub fn w_Filler(&self) -> ::std::os::raw::c_uint { - unsafe { ::std::mem::transmute(self._bitfield_1.get(16usize, 16u8) as u32) } - } - #[inline] - pub fn set_w_Filler(&mut self, val: ::std::os::raw::c_uint) { - unsafe { - let val: u32 = ::std::mem::transmute(val); - self._bitfield_1.set(16usize, 16u8, val as u64) - } - } - #[inline] - pub fn new_bitfield_1( - w_Stopval: ::std::os::raw::c_uint, - w_Stopsig: ::std::os::raw::c_uint, - w_Filler: ::std::os::raw::c_uint, - ) -> __BindgenBitfieldUnit<[u8; 4usize]> { - let mut __bindgen_bitfield_unit: __BindgenBitfieldUnit<[u8; 4usize]> = Default::default(); - __bindgen_bitfield_unit.set(0usize, 8u8, { - let w_Stopval: u32 = unsafe { ::std::mem::transmute(w_Stopval) }; - w_Stopval as u64 - }); - __bindgen_bitfield_unit.set(8usize, 8u8, { - let w_Stopsig: u32 = unsafe { ::std::mem::transmute(w_Stopsig) }; - w_Stopsig as u64 - }); - __bindgen_bitfield_unit.set(16usize, 16u8, { - let w_Filler: u32 = unsafe { ::std::mem::transmute(w_Filler) }; - w_Filler as u64 - }); - __bindgen_bitfield_unit - } -} -#[test] -fn bindgen_test_layout_wait() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(wait)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(wait)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).w_status as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(wait), - "::", - stringify!(w_status) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).w_T as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(wait), "::", stringify!(w_T)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).w_S as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(wait), "::", stringify!(w_S)) - ); -} -extern "C" { - pub fn wait(arg1: *mut ::std::os::raw::c_int) -> pid_t; -} -extern "C" { - pub fn waitpid( - arg1: pid_t, - arg2: *mut ::std::os::raw::c_int, - arg3: ::std::os::raw::c_int, - ) -> pid_t; -} -extern "C" { - pub fn waitid( - arg1: idtype_t, - arg2: id_t, - arg3: *mut siginfo_t, - arg4: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wait3( - arg1: *mut ::std::os::raw::c_int, - arg2: ::std::os::raw::c_int, - arg3: *mut rusage, - ) -> pid_t; -} -extern "C" { - pub fn wait4( - arg1: pid_t, - arg2: *mut ::std::os::raw::c_int, - arg3: ::std::os::raw::c_int, - arg4: *mut rusage, - ) -> pid_t; -} -extern "C" { - pub fn alloca(arg1: size_t) -> *mut ::std::os::raw::c_void; -} -pub type ct_rune_t = __darwin_ct_rune_t; -pub type rune_t = __darwin_rune_t; -pub type wchar_t = __darwin_wchar_t; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct div_t { - pub quot: ::std::os::raw::c_int, - pub rem: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_div_t() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(div_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(div_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(div_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(div_t), - "::", - stringify!(rem) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct ldiv_t { - pub quot: ::std::os::raw::c_long, - pub rem: ::std::os::raw::c_long, -} -#[test] -fn bindgen_test_layout_ldiv_t() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(ldiv_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(ldiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(ldiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(ldiv_t), - "::", - stringify!(rem) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct lldiv_t { - pub quot: ::std::os::raw::c_longlong, - pub rem: ::std::os::raw::c_longlong, -} -#[test] -fn bindgen_test_layout_lldiv_t() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(lldiv_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(lldiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(lldiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(lldiv_t), - "::", - stringify!(rem) - ) - ); -} -extern "C" { - pub static mut __mb_cur_max: ::std::os::raw::c_int; -} -extern "C" { - pub fn malloc(__size: ::std::os::raw::c_ulong) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn calloc( - __count: ::std::os::raw::c_ulong, - __size: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn free(arg1: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn realloc( - __ptr: *mut ::std::os::raw::c_void, - __size: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn valloc(arg1: size_t) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn aligned_alloc(__alignment: size_t, __size: size_t) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn posix_memalign( - __memptr: *mut *mut ::std::os::raw::c_void, - __alignment: size_t, - __size: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn abort(); -} -extern "C" { - pub fn abs(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn atexit(arg1: ::std::option::Option) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn atof(arg1: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn atoi(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn atol(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn atoll(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn bsearch( - __key: *const ::std::os::raw::c_void, - __base: *const ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: ::std::option::Option< - unsafe extern "C" fn( - arg1: *const ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, - >, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn div(arg1: ::std::os::raw::c_int, arg2: ::std::os::raw::c_int) -> div_t; -} -extern "C" { - pub fn exit(arg1: ::std::os::raw::c_int); -} -extern "C" { - pub fn getenv(arg1: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn labs(arg1: ::std::os::raw::c_long) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn ldiv(arg1: ::std::os::raw::c_long, arg2: ::std::os::raw::c_long) -> ldiv_t; -} -extern "C" { - pub fn llabs(arg1: ::std::os::raw::c_longlong) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn lldiv(arg1: ::std::os::raw::c_longlong, arg2: ::std::os::raw::c_longlong) -> lldiv_t; -} -extern "C" { - pub fn mblen(__s: *const ::std::os::raw::c_char, __n: size_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mbstowcs( - arg1: *mut wchar_t, - arg2: *const ::std::os::raw::c_char, - arg3: size_t, - ) -> size_t; -} -extern "C" { - pub fn mbtowc( - arg1: *mut wchar_t, - arg2: *const ::std::os::raw::c_char, - arg3: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn qsort( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: ::std::option::Option< - unsafe extern "C" fn( - arg1: *const ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, - >, - ); -} -extern "C" { - pub fn rand() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn srand(arg1: ::std::os::raw::c_uint); -} -extern "C" { - pub fn strtod( - arg1: *const ::std::os::raw::c_char, - arg2: *mut *mut ::std::os::raw::c_char, - ) -> f64; -} -extern "C" { - pub fn strtof( - arg1: *const ::std::os::raw::c_char, - arg2: *mut *mut ::std::os::raw::c_char, - ) -> f32; -} -extern "C" { - pub fn strtol( - __str: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn strtold( - arg1: *const ::std::os::raw::c_char, - arg2: *mut *mut ::std::os::raw::c_char, - ) -> u128; -} -extern "C" { - pub fn strtoll( - __str: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn strtoul( - __str: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strtoull( - __str: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn system(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wcstombs( - arg1: *mut ::std::os::raw::c_char, - arg2: *const wchar_t, - arg3: size_t, - ) -> size_t; -} -extern "C" { - pub fn wctomb(arg1: *mut ::std::os::raw::c_char, arg2: wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _Exit(arg1: ::std::os::raw::c_int); -} -extern "C" { - pub fn a64l(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn drand48() -> f64; -} -extern "C" { - pub fn ecvt( - arg1: f64, - arg2: ::std::os::raw::c_int, - arg3: *mut ::std::os::raw::c_int, - arg4: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn erand48(arg1: *mut ::std::os::raw::c_ushort) -> f64; -} -extern "C" { - pub fn fcvt( - arg1: f64, - arg2: ::std::os::raw::c_int, - arg3: *mut ::std::os::raw::c_int, - arg4: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn gcvt( - arg1: f64, - arg2: ::std::os::raw::c_int, - arg3: *mut ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn getsubopt( - arg1: *mut *mut ::std::os::raw::c_char, - arg2: *const *mut ::std::os::raw::c_char, - arg3: *mut *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn grantpt(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn initstate( - arg1: ::std::os::raw::c_uint, - arg2: *mut ::std::os::raw::c_char, - arg3: size_t, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn jrand48(arg1: *mut ::std::os::raw::c_ushort) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn l64a(arg1: ::std::os::raw::c_long) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn lcong48(arg1: *mut ::std::os::raw::c_ushort); -} -extern "C" { - pub fn lrand48() -> ::std::os::raw::c_long; -} -extern "C" { - pub fn mktemp(arg1: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn mkstemp(arg1: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mrand48() -> ::std::os::raw::c_long; -} -extern "C" { - pub fn nrand48(arg1: *mut ::std::os::raw::c_ushort) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn posix_openpt(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ptsname(arg1: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ptsname_r( - fildes: ::std::os::raw::c_int, - buffer: *mut ::std::os::raw::c_char, - buflen: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putenv(arg1: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn random() -> ::std::os::raw::c_long; -} -extern "C" { - pub fn rand_r(arg1: *mut ::std::os::raw::c_uint) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}_realpath$DARWIN_EXTSN"] - pub fn realpath( - arg1: *const ::std::os::raw::c_char, - arg2: *mut ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn seed48(arg1: *mut ::std::os::raw::c_ushort) -> *mut ::std::os::raw::c_ushort; -} -extern "C" { - pub fn setenv( - __name: *const ::std::os::raw::c_char, - __value: *const ::std::os::raw::c_char, - __overwrite: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn setkey(arg1: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn setstate(arg1: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn srand48(arg1: ::std::os::raw::c_long); -} -extern "C" { - pub fn srandom(arg1: ::std::os::raw::c_uint); -} -extern "C" { - pub fn unlockpt(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn unsetenv(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -pub type dev_t = __darwin_dev_t; -pub type mode_t = __darwin_mode_t; -extern "C" { - pub fn arc4random() -> u32; -} -extern "C" { - pub fn arc4random_addrandom(arg1: *mut ::std::os::raw::c_uchar, arg2: ::std::os::raw::c_int); -} -extern "C" { - pub fn arc4random_buf(__buf: *mut ::std::os::raw::c_void, __nbytes: size_t); -} -extern "C" { - pub fn arc4random_stir(); -} -extern "C" { - pub fn arc4random_uniform(__upper_bound: u32) -> u32; -} -extern "C" { - pub fn atexit_b(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn bsearch_b( - __key: *const ::std::os::raw::c_void, - __base: *const ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: *mut ::std::os::raw::c_void, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn cgetcap( - arg1: *mut ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn cgetclose() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn cgetent( - arg1: *mut *mut ::std::os::raw::c_char, - arg2: *mut *mut ::std::os::raw::c_char, - arg3: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn cgetfirst( - arg1: *mut *mut ::std::os::raw::c_char, - arg2: *mut *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn cgetmatch( - arg1: *const ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn cgetnext( - arg1: *mut *mut ::std::os::raw::c_char, - arg2: *mut *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn cgetnum( - arg1: *mut ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: *mut ::std::os::raw::c_long, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn cgetset(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn cgetstr( - arg1: *mut ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: *mut *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn cgetustr( - arg1: *mut ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: *mut *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}_daemon$1050"] - pub fn daemon( - arg1: ::std::os::raw::c_int, - arg2: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn devname(arg1: dev_t, arg2: mode_t) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn devname_r( - arg1: dev_t, - arg2: mode_t, - buf: *mut ::std::os::raw::c_char, - len: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn getbsize( - arg1: *mut ::std::os::raw::c_int, - arg2: *mut ::std::os::raw::c_long, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn getloadavg(arg1: *mut f64, arg2: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getprogname() -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn setprogname(arg1: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn heapsort( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: ::std::option::Option< - unsafe extern "C" fn( - arg1: *const ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, - >, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn heapsort_b( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: *mut ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mergesort( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: ::std::option::Option< - unsafe extern "C" fn( - arg1: *const ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, - >, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mergesort_b( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: *mut ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn psort( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: ::std::option::Option< - unsafe extern "C" fn( - arg1: *const ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, - >, - ); -} -extern "C" { - pub fn psort_b( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: *mut ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn psort_r( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - arg1: *mut ::std::os::raw::c_void, - __compar: ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - arg3: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, - >, - ); -} -extern "C" { - pub fn qsort_b( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - __compar: *mut ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn qsort_r( - __base: *mut ::std::os::raw::c_void, - __nel: size_t, - __width: size_t, - arg1: *mut ::std::os::raw::c_void, - __compar: ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - arg3: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, - >, - ); -} -extern "C" { - pub fn radixsort( - __base: *mut *const ::std::os::raw::c_uchar, - __nel: ::std::os::raw::c_int, - __table: *const ::std::os::raw::c_uchar, - __endbyte: ::std::os::raw::c_uint, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rpmatch(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn sradixsort( - __base: *mut *const ::std::os::raw::c_uchar, - __nel: ::std::os::raw::c_int, - __table: *const ::std::os::raw::c_uchar, - __endbyte: ::std::os::raw::c_uint, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn sranddev(); -} -extern "C" { - pub fn srandomdev(); -} -extern "C" { - pub fn reallocf( - __ptr: *mut ::std::os::raw::c_void, - __size: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn strtoq( - __str: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn strtouq( - __str: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub static mut suboptarg: *mut ::std::os::raw::c_char; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct GuiStyleProp { - pub controlId: ::std::os::raw::c_ushort, - pub propertyId: ::std::os::raw::c_ushort, - pub propertyValue: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_GuiStyleProp() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(GuiStyleProp)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(GuiStyleProp)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).controlId as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(controlId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).propertyId as *const _ as usize }, - 2usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(propertyId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).propertyValue as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(propertyValue) - ) - ); -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiControlState { - GUI_STATE_NORMAL = 0, - GUI_STATE_FOCUSED = 1, - GUI_STATE_PRESSED = 2, - GUI_STATE_DISABLED = 3, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiTextAlignment { - GUI_TEXT_ALIGN_LEFT = 0, - GUI_TEXT_ALIGN_CENTER = 1, - GUI_TEXT_ALIGN_RIGHT = 2, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiControl { - DEFAULT = 0, - LABEL = 1, - BUTTON = 2, - TOGGLE = 3, - SLIDER = 4, - PROGRESSBAR = 5, - CHECKBOX = 6, - COMBOBOX = 7, - DROPDOWNBOX = 8, - TEXTBOX = 9, - VALUEBOX = 10, - SPINNER = 11, - LISTVIEW = 12, - COLORPICKER = 13, - SCROLLBAR = 14, - STATUSBAR = 15, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiControlProperty { - BORDER_COLOR_NORMAL = 0, - BASE_COLOR_NORMAL = 1, - TEXT_COLOR_NORMAL = 2, - BORDER_COLOR_FOCUSED = 3, - BASE_COLOR_FOCUSED = 4, - TEXT_COLOR_FOCUSED = 5, - BORDER_COLOR_PRESSED = 6, - BASE_COLOR_PRESSED = 7, - TEXT_COLOR_PRESSED = 8, - BORDER_COLOR_DISABLED = 9, - BASE_COLOR_DISABLED = 10, - TEXT_COLOR_DISABLED = 11, - BORDER_WIDTH = 12, - TEXT_PADDING = 13, - TEXT_ALIGNMENT = 14, - RESERVED = 15, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiDefaultProperty { - TEXT_SIZE = 16, - TEXT_SPACING = 17, - LINE_COLOR = 18, - BACKGROUND_COLOR = 19, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiToggleProperty { - GROUP_PADDING = 16, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiSliderProperty { - SLIDER_WIDTH = 16, - SLIDER_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiProgressBarProperty { - PROGRESS_PADDING = 16, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiCheckBoxProperty { - CHECK_PADDING = 16, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiComboBoxProperty { - COMBO_BUTTON_WIDTH = 16, - COMBO_BUTTON_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiDropdownBoxProperty { - ARROW_PADDING = 16, - DROPDOWN_ITEMS_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiTextBoxProperty { - TEXT_INNER_PADDING = 16, - TEXT_LINES_PADDING = 17, - COLOR_SELECTED_FG = 18, - COLOR_SELECTED_BG = 19, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiSpinnerProperty { - SPIN_BUTTON_WIDTH = 16, - SPIN_BUTTON_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiScrollBarProperty { - ARROWS_SIZE = 16, - ARROWS_VISIBLE = 17, - SCROLL_SLIDER_PADDING = 18, - SCROLL_SLIDER_SIZE = 19, - SCROLL_PADDING = 20, - SCROLL_SPEED = 21, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiScrollBarSide { - SCROLLBAR_LEFT_SIDE = 0, - SCROLLBAR_RIGHT_SIDE = 1, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiListViewProperty { - LIST_ITEMS_HEIGHT = 16, - LIST_ITEMS_PADDING = 17, - SCROLLBAR_WIDTH = 18, - SCROLLBAR_SIDE = 19, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiColorPickerProperty { - COLOR_SELECTOR_SIZE = 16, - HUEBAR_WIDTH = 17, - HUEBAR_PADDING = 18, - HUEBAR_SELECTOR_HEIGHT = 19, - HUEBAR_SELECTOR_OVERFLOW = 20, -} -extern "C" { - pub fn GuiEnable(); -} -extern "C" { - pub fn GuiDisable(); -} -extern "C" { - pub fn GuiLock(); -} -extern "C" { - pub fn GuiUnlock(); -} -extern "C" { - pub fn GuiFade(alpha: f32); -} -extern "C" { - pub fn GuiSetState(state: ::std::os::raw::c_int); -} -extern "C" { - pub fn GuiGetState() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiSetFont(font: Font); -} -extern "C" { - pub fn GuiGetFont() -> Font; -} -extern "C" { - pub fn GuiSetStyle( - control: ::std::os::raw::c_int, - property: ::std::os::raw::c_int, - value: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiGetStyle( - control: ::std::os::raw::c_int, - property: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiEnableTooltip(); -} -extern "C" { - pub fn GuiDisableTooltip(); -} -extern "C" { - pub fn GuiSetTooltip(tooltip: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiClearTooltip(); -} -extern "C" { - pub fn GuiWindowBox(bounds: Rectangle, title: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiGroupBox(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiLine(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiPanel(bounds: Rectangle); -} -extern "C" { - pub fn GuiScrollPanel(bounds: Rectangle, content: Rectangle, scroll: *mut Vector2) - -> Rectangle; -} -extern "C" { - pub fn GuiLabel(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiButton(bounds: Rectangle, text: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiLabelButton(bounds: Rectangle, text: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiImageButton( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - texture: Texture2D, - ) -> bool; -} -extern "C" { - pub fn GuiImageButtonEx( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - texture: Texture2D, - texSource: Rectangle, - ) -> bool; -} -extern "C" { - pub fn GuiToggle(bounds: Rectangle, text: *const ::std::os::raw::c_char, active: bool) -> bool; -} -extern "C" { - pub fn GuiToggleGroup( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiCheckBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - checked: bool, - ) -> bool; -} -extern "C" { - pub fn GuiComboBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiDropdownBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: *mut ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiSpinner( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - value: *mut ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiValueBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - value: *mut ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiTextBox( - bounds: Rectangle, - text: *mut ::std::os::raw::c_char, - textSize: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiTextBoxMulti( - bounds: Rectangle, - text: *mut ::std::os::raw::c_char, - textSize: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiSlider( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiSliderBar( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiProgressBar( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiStatusBar(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiDummyRec(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiScrollBar( - bounds: Rectangle, - value: ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiGrid(bounds: Rectangle, spacing: f32, subdivs: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn GuiListView( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - scrollIndex: *mut ::std::os::raw::c_int, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiListViewEx( - bounds: Rectangle, - text: *mut *const ::std::os::raw::c_char, - count: ::std::os::raw::c_int, - focus: *mut ::std::os::raw::c_int, - scrollIndex: *mut ::std::os::raw::c_int, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiMessageBox( - bounds: Rectangle, - title: *const ::std::os::raw::c_char, - message: *const ::std::os::raw::c_char, - buttons: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiTextInputBox( - bounds: Rectangle, - title: *const ::std::os::raw::c_char, - message: *const ::std::os::raw::c_char, - buttons: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiColorPicker(bounds: Rectangle, color: Color) -> Color; -} -extern "C" { - pub fn GuiColorPanel(bounds: Rectangle, color: Color) -> Color; -} -extern "C" { - pub fn GuiColorBarAlpha(bounds: Rectangle, alpha: f32) -> f32; -} -extern "C" { - pub fn GuiColorBarHue(bounds: Rectangle, value: f32) -> f32; -} -extern "C" { - pub fn GuiLoadStyle(fileName: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiLoadStyleDefault(); -} -extern "C" { - pub fn GuiIconText( - iconId: ::std::os::raw::c_int, - text: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GuiDrawIcon( - iconId: ::std::os::raw::c_int, - position: Vector2, - pixelSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn GuiGetIcons() -> *mut ::std::os::raw::c_uint; -} -extern "C" { - pub fn GuiGetIconData(iconId: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_uint; -} -extern "C" { - pub fn GuiSetIconData(iconId: ::std::os::raw::c_int, data: *mut ::std::os::raw::c_uint); -} -extern "C" { - pub fn GuiSetIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiClearIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiCheckIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ) -> bool; -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum guiIconName { - RICON_NONE = 0, - RICON_FOLDER_FILE_OPEN = 1, - RICON_FILE_SAVE_CLASSIC = 2, - RICON_FOLDER_OPEN = 3, - RICON_FOLDER_SAVE = 4, - RICON_FILE_OPEN = 5, - RICON_FILE_SAVE = 6, - RICON_FILE_EXPORT = 7, - RICON_FILE_NEW = 8, - RICON_FILE_DELETE = 9, - RICON_FILETYPE_TEXT = 10, - RICON_FILETYPE_AUDIO = 11, - RICON_FILETYPE_IMAGE = 12, - RICON_FILETYPE_PLAY = 13, - RICON_FILETYPE_VIDEO = 14, - RICON_FILETYPE_INFO = 15, - RICON_FILE_COPY = 16, - RICON_FILE_CUT = 17, - RICON_FILE_PASTE = 18, - RICON_CURSOR_HAND = 19, - RICON_CURSOR_POINTER = 20, - RICON_CURSOR_CLASSIC = 21, - RICON_PENCIL = 22, - RICON_PENCIL_BIG = 23, - RICON_BRUSH_CLASSIC = 24, - RICON_BRUSH_PAINTER = 25, - RICON_WATER_DROP = 26, - RICON_COLOR_PICKER = 27, - RICON_RUBBER = 28, - RICON_COLOR_BUCKET = 29, - RICON_TEXT_T = 30, - RICON_TEXT_A = 31, - RICON_SCALE = 32, - RICON_RESIZE = 33, - RICON_FILTER_POINT = 34, - RICON_FILTER_BILINEAR = 35, - RICON_CROP = 36, - RICON_CROP_ALPHA = 37, - RICON_SQUARE_TOGGLE = 38, - RICON_SYMMETRY = 39, - RICON_SYMMETRY_HORIZONTAL = 40, - RICON_SYMMETRY_VERTICAL = 41, - RICON_LENS = 42, - RICON_LENS_BIG = 43, - RICON_EYE_ON = 44, - RICON_EYE_OFF = 45, - RICON_FILTER_TOP = 46, - RICON_FILTER = 47, - RICON_TARGET_POINT = 48, - RICON_TARGET_SMALL = 49, - RICON_TARGET_BIG = 50, - RICON_TARGET_MOVE = 51, - RICON_CURSOR_MOVE = 52, - RICON_CURSOR_SCALE = 53, - RICON_CURSOR_SCALE_RIGHT = 54, - RICON_CURSOR_SCALE_LEFT = 55, - RICON_UNDO = 56, - RICON_REDO = 57, - RICON_REREDO = 58, - RICON_MUTATE = 59, - RICON_ROTATE = 60, - RICON_REPEAT = 61, - RICON_SHUFFLE = 62, - RICON_EMPTYBOX = 63, - RICON_TARGET = 64, - RICON_TARGET_SMALL_FILL = 65, - RICON_TARGET_BIG_FILL = 66, - RICON_TARGET_MOVE_FILL = 67, - RICON_CURSOR_MOVE_FILL = 68, - RICON_CURSOR_SCALE_FILL = 69, - RICON_CURSOR_SCALE_RIGHT_FILL = 70, - RICON_CURSOR_SCALE_LEFT_FILL = 71, - RICON_UNDO_FILL = 72, - RICON_REDO_FILL = 73, - RICON_REREDO_FILL = 74, - RICON_MUTATE_FILL = 75, - RICON_ROTATE_FILL = 76, - RICON_REPEAT_FILL = 77, - RICON_SHUFFLE_FILL = 78, - RICON_EMPTYBOX_SMALL = 79, - RICON_BOX = 80, - RICON_BOX_TOP = 81, - RICON_BOX_TOP_RIGHT = 82, - RICON_BOX_RIGHT = 83, - RICON_BOX_BOTTOM_RIGHT = 84, - RICON_BOX_BOTTOM = 85, - RICON_BOX_BOTTOM_LEFT = 86, - RICON_BOX_LEFT = 87, - RICON_BOX_TOP_LEFT = 88, - RICON_BOX_CENTER = 89, - RICON_BOX_CIRCLE_MASK = 90, - RICON_POT = 91, - RICON_ALPHA_MULTIPLY = 92, - RICON_ALPHA_CLEAR = 93, - RICON_DITHERING = 94, - RICON_MIPMAPS = 95, - RICON_BOX_GRID = 96, - RICON_GRID = 97, - RICON_BOX_CORNERS_SMALL = 98, - RICON_BOX_CORNERS_BIG = 99, - RICON_FOUR_BOXES = 100, - RICON_GRID_FILL = 101, - RICON_BOX_MULTISIZE = 102, - RICON_ZOOM_SMALL = 103, - RICON_ZOOM_MEDIUM = 104, - RICON_ZOOM_BIG = 105, - RICON_ZOOM_ALL = 106, - RICON_ZOOM_CENTER = 107, - RICON_BOX_DOTS_SMALL = 108, - RICON_BOX_DOTS_BIG = 109, - RICON_BOX_CONCENTRIC = 110, - RICON_BOX_GRID_BIG = 111, - RICON_OK_TICK = 112, - RICON_CROSS = 113, - RICON_ARROW_LEFT = 114, - RICON_ARROW_RIGHT = 115, - RICON_ARROW_BOTTOM = 116, - RICON_ARROW_TOP = 117, - RICON_ARROW_LEFT_FILL = 118, - RICON_ARROW_RIGHT_FILL = 119, - RICON_ARROW_BOTTOM_FILL = 120, - RICON_ARROW_TOP_FILL = 121, - RICON_AUDIO = 122, - RICON_FX = 123, - RICON_WAVE = 124, - RICON_WAVE_SINUS = 125, - RICON_WAVE_SQUARE = 126, - RICON_WAVE_TRIANGULAR = 127, - RICON_CROSS_SMALL = 128, - RICON_PLAYER_PREVIOUS = 129, - RICON_PLAYER_PLAY_BACK = 130, - RICON_PLAYER_PLAY = 131, - RICON_PLAYER_PAUSE = 132, - RICON_PLAYER_STOP = 133, - RICON_PLAYER_NEXT = 134, - RICON_PLAYER_RECORD = 135, - RICON_MAGNET = 136, - RICON_LOCK_CLOSE = 137, - RICON_LOCK_OPEN = 138, - RICON_CLOCK = 139, - RICON_TOOLS = 140, - RICON_GEAR = 141, - RICON_GEAR_BIG = 142, - RICON_BIN = 143, - RICON_HAND_POINTER = 144, - RICON_LASER = 145, - RICON_COIN = 146, - RICON_EXPLOSION = 147, - RICON_1UP = 148, - RICON_PLAYER = 149, - RICON_PLAYER_JUMP = 150, - RICON_KEY = 151, - RICON_DEMON = 152, - RICON_TEXT_POPUP = 153, - RICON_GEAR_EX = 154, - RICON_CRACK = 155, - RICON_CRACK_POINTS = 156, - RICON_STAR = 157, - RICON_DOOR = 158, - RICON_EXIT = 159, - RICON_MODE_2D = 160, - RICON_MODE_3D = 161, - RICON_CUBE = 162, - RICON_CUBE_FACE_TOP = 163, - RICON_CUBE_FACE_LEFT = 164, - RICON_CUBE_FACE_FRONT = 165, - RICON_CUBE_FACE_BOTTOM = 166, - RICON_CUBE_FACE_RIGHT = 167, - RICON_CUBE_FACE_BACK = 168, - RICON_CAMERA = 169, - RICON_SPECIAL = 170, - RICON_LINK_NET = 171, - RICON_LINK_BOXES = 172, - RICON_LINK_MULTI = 173, - RICON_LINK = 174, - RICON_LINK_BROKE = 175, - RICON_TEXT_NOTES = 176, - RICON_NOTEBOOK = 177, - RICON_SUITCASE = 178, - RICON_SUITCASE_ZIP = 179, - RICON_MAILBOX = 180, - RICON_MONITOR = 181, - RICON_PRINTER = 182, - RICON_PHOTO_CAMERA = 183, - RICON_PHOTO_CAMERA_FLASH = 184, - RICON_HOUSE = 185, - RICON_HEART = 186, - RICON_CORNER = 187, - RICON_VERTICAL_BARS = 188, - RICON_VERTICAL_BARS_FILL = 189, - RICON_LIFE_BARS = 190, - RICON_INFO = 191, - RICON_CROSSLINE = 192, - RICON_HELP = 193, - RICON_FILETYPE_ALPHA = 194, - RICON_FILETYPE_HOME = 195, - RICON_LAYERS_VISIBLE = 196, - RICON_LAYERS = 197, - RICON_WINDOW = 198, - RICON_HIDPI = 199, - RICON_200 = 200, - RICON_201 = 201, - RICON_202 = 202, - RICON_203 = 203, - RICON_204 = 204, - RICON_205 = 205, - RICON_206 = 206, - RICON_207 = 207, - RICON_208 = 208, - RICON_209 = 209, - RICON_210 = 210, - RICON_211 = 211, - RICON_212 = 212, - RICON_213 = 213, - RICON_214 = 214, - RICON_215 = 215, - RICON_216 = 216, - RICON_217 = 217, - RICON_218 = 218, - RICON_219 = 219, - RICON_220 = 220, - RICON_221 = 221, - RICON_222 = 222, - RICON_223 = 223, - RICON_224 = 224, - RICON_225 = 225, - RICON_226 = 226, - RICON_227 = 227, - RICON_228 = 228, - RICON_229 = 229, - RICON_230 = 230, - RICON_231 = 231, - RICON_232 = 232, - RICON_233 = 233, - RICON_234 = 234, - RICON_235 = 235, - RICON_236 = 236, - RICON_237 = 237, - RICON_238 = 238, - RICON_239 = 239, - RICON_240 = 240, - RICON_241 = 241, - RICON_242 = 242, - RICON_243 = 243, - RICON_244 = 244, - RICON_245 = 245, - RICON_246 = 246, - RICON_247 = 247, - RICON_248 = 248, - RICON_249 = 249, - RICON_250 = 250, - RICON_251 = 251, - RICON_252 = 252, - RICON_253 = 253, - RICON_254 = 254, - RICON_255 = 255, -} -extern "C" { - pub static mut guiIcons: [::std::os::raw::c_uint; 2048usize]; -} -extern "C" { - pub fn renameat( - arg1: ::std::os::raw::c_int, - arg2: *const ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - arg4: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn renamex_np( - arg1: *const ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: ::std::os::raw::c_uint, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn renameatx_np( - arg1: ::std::os::raw::c_int, - arg2: *const ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - arg4: *const ::std::os::raw::c_char, - arg5: ::std::os::raw::c_uint, - ) -> ::std::os::raw::c_int; -} -pub type fpos_t = __darwin_off_t; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __sbuf { - pub _base: *mut ::std::os::raw::c_uchar, - pub _size: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout___sbuf() { - assert_eq!( - ::std::mem::size_of::<__sbuf>(), - 16usize, - concat!("Size of: ", stringify!(__sbuf)) - ); - assert_eq!( - ::std::mem::align_of::<__sbuf>(), - 8usize, - concat!("Alignment of ", stringify!(__sbuf)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sbuf>()))._base as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__sbuf), - "::", - stringify!(_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sbuf>()))._size as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__sbuf), - "::", - stringify!(_size) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __sFILEX { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __sFILE { - pub _p: *mut ::std::os::raw::c_uchar, - pub _r: ::std::os::raw::c_int, - pub _w: ::std::os::raw::c_int, - pub _flags: ::std::os::raw::c_short, - pub _file: ::std::os::raw::c_short, - pub _bf: __sbuf, - pub _lbfsize: ::std::os::raw::c_int, - pub _cookie: *mut ::std::os::raw::c_void, - pub _close: ::std::option::Option< - unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int, - >, - pub _read: ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: *mut ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int, - >, - pub _seek: ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: fpos_t, - arg3: ::std::os::raw::c_int, - ) -> fpos_t, - >, - pub _write: ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int, - >, - pub _ub: __sbuf, - pub _extra: *mut __sFILEX, - pub _ur: ::std::os::raw::c_int, - pub _ubuf: [::std::os::raw::c_uchar; 3usize], - pub _nbuf: [::std::os::raw::c_uchar; 1usize], - pub _lb: __sbuf, - pub _blksize: ::std::os::raw::c_int, - pub _offset: fpos_t, -} -#[test] -fn bindgen_test_layout___sFILE() { - assert_eq!( - ::std::mem::size_of::<__sFILE>(), - 152usize, - concat!("Size of: ", stringify!(__sFILE)) - ); - assert_eq!( - ::std::mem::align_of::<__sFILE>(), - 8usize, - concat!("Alignment of ", stringify!(__sFILE)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._p as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_p) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._r as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_r) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._w as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_w) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._flags as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._file as *const _ as usize }, - 18usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_file) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._bf as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_bf) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._lbfsize as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_lbfsize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._cookie as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_cookie) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._close as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_close) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._read as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_read) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._seek as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_seek) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._write as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_write) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._ub as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_ub) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._extra as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_extra) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._ur as *const _ as usize }, - 112usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_ur) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._ubuf as *const _ as usize }, - 116usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_ubuf) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._nbuf as *const _ as usize }, - 119usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_nbuf) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._lb as *const _ as usize }, - 120usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_lb) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._blksize as *const _ as usize }, - 136usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_blksize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__sFILE>()))._offset as *const _ as usize }, - 144usize, - concat!( - "Offset of field: ", - stringify!(__sFILE), - "::", - stringify!(_offset) - ) - ); -} -pub type FILE = __sFILE; -extern "C" { - pub static mut __stdinp: *mut FILE; -} -extern "C" { - pub static mut __stdoutp: *mut FILE; -} -extern "C" { - pub static mut __stderrp: *mut FILE; -} -extern "C" { - pub fn clearerr(arg1: *mut FILE); -} -extern "C" { - pub fn fclose(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn feof(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ferror(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fflush(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgetc(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgetpos(arg1: *mut FILE, arg2: *mut fpos_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgets( - arg1: *mut ::std::os::raw::c_char, - arg2: ::std::os::raw::c_int, - arg3: *mut FILE, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fopen( - __filename: *const ::std::os::raw::c_char, - __mode: *const ::std::os::raw::c_char, - ) -> *mut FILE; -} -extern "C" { - pub fn fprintf( - arg1: *mut FILE, - arg2: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fputc(arg1: ::std::os::raw::c_int, arg2: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fputs(arg1: *const ::std::os::raw::c_char, arg2: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fread( - __ptr: *mut ::std::os::raw::c_void, - __size: ::std::os::raw::c_ulong, - __nitems: ::std::os::raw::c_ulong, - __stream: *mut FILE, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn freopen( - arg1: *const ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: *mut FILE, - ) -> *mut FILE; -} -extern "C" { - pub fn fscanf( - arg1: *mut FILE, - arg2: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fseek( - arg1: *mut FILE, - arg2: ::std::os::raw::c_long, - arg3: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fsetpos(arg1: *mut FILE, arg2: *const fpos_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ftell(arg1: *mut FILE) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn fwrite( - __ptr: *const ::std::os::raw::c_void, - __size: ::std::os::raw::c_ulong, - __nitems: ::std::os::raw::c_ulong, - __stream: *mut FILE, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn getc(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getchar() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn gets(arg1: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn perror(arg1: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn printf(arg1: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putc(arg1: ::std::os::raw::c_int, arg2: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putchar(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn puts(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn remove(arg1: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rename( - __old: *const ::std::os::raw::c_char, - __new: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rewind(arg1: *mut FILE); -} -extern "C" { - pub fn scanf(arg1: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn setbuf(arg1: *mut FILE, arg2: *mut ::std::os::raw::c_char); -} -extern "C" { - pub fn setvbuf( - arg1: *mut FILE, - arg2: *mut ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - arg4: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn sprintf( - arg1: *mut ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn sscanf( - arg1: *const ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn tmpfile() -> *mut FILE; -} -extern "C" { - pub fn tmpnam(arg1: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ungetc(arg1: ::std::os::raw::c_int, arg2: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vfprintf( - arg1: *mut FILE, - arg2: *const ::std::os::raw::c_char, - arg3: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vprintf( - arg1: *const ::std::os::raw::c_char, - arg2: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vsprintf( - arg1: *mut ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ctermid(arg1: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fdopen(arg1: ::std::os::raw::c_int, arg2: *const ::std::os::raw::c_char) -> *mut FILE; -} -extern "C" { - pub fn fileno(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn pclose(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn popen( - arg1: *const ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - ) -> *mut FILE; -} -extern "C" { - pub fn __srget(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __svfscanf( - arg1: *mut FILE, - arg2: *const ::std::os::raw::c_char, - arg3: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __swbuf(arg1: ::std::os::raw::c_int, arg2: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn flockfile(arg1: *mut FILE); -} -extern "C" { - pub fn ftrylockfile(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn funlockfile(arg1: *mut FILE); -} -extern "C" { - pub fn getc_unlocked(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getchar_unlocked() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putc_unlocked(arg1: ::std::os::raw::c_int, arg2: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putchar_unlocked(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getw(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putw(arg1: ::std::os::raw::c_int, arg2: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn tempnam( - __dir: *const ::std::os::raw::c_char, - __prefix: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -pub type off_t = __darwin_off_t; -extern "C" { - pub fn fseeko( - __stream: *mut FILE, - __offset: off_t, - __whence: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ftello(__stream: *mut FILE) -> off_t; -} -extern "C" { - pub fn snprintf( - __str: *mut ::std::os::raw::c_char, - __size: ::std::os::raw::c_ulong, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vfscanf( - __stream: *mut FILE, - __format: *const ::std::os::raw::c_char, - arg1: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vscanf( - __format: *const ::std::os::raw::c_char, - arg1: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vsnprintf( - __str: *mut ::std::os::raw::c_char, - __size: ::std::os::raw::c_ulong, - __format: *const ::std::os::raw::c_char, - arg1: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vsscanf( - __str: *const ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - arg1: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -pub type ssize_t = __darwin_ssize_t; -extern "C" { - pub fn dprintf( - arg1: ::std::os::raw::c_int, - arg2: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vdprintf( - arg1: ::std::os::raw::c_int, - arg2: *const ::std::os::raw::c_char, - arg3: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getdelim( - __linep: *mut *mut ::std::os::raw::c_char, - __linecapp: *mut size_t, - __delimiter: ::std::os::raw::c_int, - __stream: *mut FILE, - ) -> ssize_t; -} -extern "C" { - pub fn getline( - __linep: *mut *mut ::std::os::raw::c_char, - __linecapp: *mut size_t, - __stream: *mut FILE, - ) -> ssize_t; -} -extern "C" { - pub fn fmemopen( - __buf: *mut ::std::os::raw::c_void, - __size: size_t, - __mode: *const ::std::os::raw::c_char, - ) -> *mut FILE; -} -extern "C" { - pub fn open_memstream( - __bufp: *mut *mut ::std::os::raw::c_char, - __sizep: *mut size_t, - ) -> *mut FILE; -} -extern "C" { - pub static sys_nerr: ::std::os::raw::c_int; -} -extern "C" { - pub static mut sys_errlist: [*const ::std::os::raw::c_char; 0usize]; -} -extern "C" { - pub fn asprintf( - arg1: *mut *mut ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ctermid_r(arg1: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fgetln(arg1: *mut FILE, arg2: *mut size_t) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fmtcheck( - arg1: *const ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn fpurge(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn setbuffer( - arg1: *mut FILE, - arg2: *mut ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn setlinebuf(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vasprintf( - arg1: *mut *mut ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn zopen( - arg1: *const ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - ) -> *mut FILE; -} -extern "C" { - pub fn funopen( - arg1: *const ::std::os::raw::c_void, - arg2: ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: *mut ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int, - >, - arg3: ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_char, - arg3: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int, - >, - arg4: ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: fpos_t, - arg3: ::std::os::raw::c_int, - ) -> fpos_t, - >, - arg5: ::std::option::Option< - unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int, - >, - ) -> *mut FILE; -} -extern "C" { - pub fn __sprintf_chk( - arg1: *mut ::std::os::raw::c_char, - arg2: ::std::os::raw::c_int, - arg3: size_t, - arg4: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __snprintf_chk( - arg1: *mut ::std::os::raw::c_char, - arg2: size_t, - arg3: ::std::os::raw::c_int, - arg4: size_t, - arg5: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __vsprintf_chk( - arg1: *mut ::std::os::raw::c_char, - arg2: ::std::os::raw::c_int, - arg3: size_t, - arg4: *const ::std::os::raw::c_char, - arg5: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __vsnprintf_chk( - arg1: *mut ::std::os::raw::c_char, - arg2: size_t, - arg3: ::std::os::raw::c_int, - arg4: size_t, - arg5: *const ::std::os::raw::c_char, - arg6: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn memchr( - __s: *const ::std::os::raw::c_void, - __c: ::std::os::raw::c_int, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memcmp( - __s1: *const ::std::os::raw::c_void, - __s2: *const ::std::os::raw::c_void, - __n: ::std::os::raw::c_ulong, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn memcpy( - __dst: *mut ::std::os::raw::c_void, - __src: *const ::std::os::raw::c_void, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memmove( - __dst: *mut ::std::os::raw::c_void, - __src: *const ::std::os::raw::c_void, - __len: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memset( - __b: *mut ::std::os::raw::c_void, - __c: ::std::os::raw::c_int, - __len: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn strcat( - __s1: *mut ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strchr( - __s: *const ::std::os::raw::c_char, - __c: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcmp( - __s1: *const ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strcoll( - __s1: *const ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strcpy( - __dst: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcspn( - __s: *const ::std::os::raw::c_char, - __charset: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strerror(__errnum: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strlen(__s: *const ::std::os::raw::c_char) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strncat( - __s1: *mut ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strncmp( - __s1: *const ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strncpy( - __dst: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strpbrk( - __s: *const ::std::os::raw::c_char, - __charset: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strrchr( - __s: *const ::std::os::raw::c_char, - __c: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strspn( - __s: *const ::std::os::raw::c_char, - __charset: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strstr( - __big: *const ::std::os::raw::c_char, - __little: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strtok( - __str: *mut ::std::os::raw::c_char, - __sep: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strxfrm( - __s1: *mut ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strtok_r( - __str: *mut ::std::os::raw::c_char, - __sep: *const ::std::os::raw::c_char, - __lasts: *mut *mut ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strerror_r( - __errnum: ::std::os::raw::c_int, - __strerrbuf: *mut ::std::os::raw::c_char, - __buflen: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strdup(__s1: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn memccpy( - __dst: *mut ::std::os::raw::c_void, - __src: *const ::std::os::raw::c_void, - __c: ::std::os::raw::c_int, - __n: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn stpcpy( - __dst: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn stpncpy( - __dst: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - __n: size_t, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strndup(__s1: *const ::std::os::raw::c_char, __n: size_t) - -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strnlen(__s1: *const ::std::os::raw::c_char, __n: size_t) -> size_t; -} -extern "C" { - pub fn strsignal(__sig: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn memmem( - __big: *const ::std::os::raw::c_void, - __big_len: size_t, - __little: *const ::std::os::raw::c_void, - __little_len: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memset_pattern4( - __b: *mut ::std::os::raw::c_void, - __pattern4: *const ::std::os::raw::c_void, - __len: size_t, - ); -} -extern "C" { - pub fn memset_pattern8( - __b: *mut ::std::os::raw::c_void, - __pattern8: *const ::std::os::raw::c_void, - __len: size_t, - ); -} -extern "C" { - pub fn memset_pattern16( - __b: *mut ::std::os::raw::c_void, - __pattern16: *const ::std::os::raw::c_void, - __len: size_t, - ); -} -extern "C" { - pub fn strcasestr( - __big: *const ::std::os::raw::c_char, - __little: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strnstr( - __big: *const ::std::os::raw::c_char, - __little: *const ::std::os::raw::c_char, - __len: size_t, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strlcat( - __dst: *mut ::std::os::raw::c_char, - __source: *const ::std::os::raw::c_char, - __size: size_t, - ) -> size_t; -} -extern "C" { - pub fn strlcpy( - __dst: *mut ::std::os::raw::c_char, - __source: *const ::std::os::raw::c_char, - __size: size_t, - ) -> size_t; -} -extern "C" { - pub fn strmode(__mode: ::std::os::raw::c_int, __bp: *mut ::std::os::raw::c_char); -} -extern "C" { - pub fn strsep( - __stringp: *mut *mut ::std::os::raw::c_char, - __delim: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn swab( - arg1: *const ::std::os::raw::c_void, - arg2: *mut ::std::os::raw::c_void, - arg3: ssize_t, - ); -} -extern "C" { - pub fn timingsafe_bcmp( - __b1: *const ::std::os::raw::c_void, - __b2: *const ::std::os::raw::c_void, - __len: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn bcmp( - arg1: *const ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - arg3: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn bcopy( - arg1: *const ::std::os::raw::c_void, - arg2: *mut ::std::os::raw::c_void, - arg3: size_t, - ); -} -extern "C" { - pub fn bzero(arg1: *mut ::std::os::raw::c_void, arg2: size_t); -} -extern "C" { - pub fn index( - arg1: *const ::std::os::raw::c_char, - arg2: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn rindex( - arg1: *const ::std::os::raw::c_char, - arg2: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ffs(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strcasecmp( - arg1: *const ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strncasecmp( - arg1: *const ::std::os::raw::c_char, - arg2: *const ::std::os::raw::c_char, - arg3: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ffsl(arg1: ::std::os::raw::c_long) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ffsll(arg1: ::std::os::raw::c_longlong) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fls(arg1: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn flsl(arg1: ::std::os::raw::c_long) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn flsll(arg1: ::std::os::raw::c_longlong) -> ::std::os::raw::c_int; -} -pub type float_t = f32; -pub type double_t = f64; -extern "C" { - pub fn __math_errhandling() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __fpclassifyf(arg1: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __fpclassifyd(arg1: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __fpclassifyl(arg1: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn acosf(arg1: f32) -> f32; -} -extern "C" { - pub fn acos(arg1: f64) -> f64; -} -extern "C" { - pub fn acosl(arg1: u128) -> u128; -} -extern "C" { - pub fn asinf(arg1: f32) -> f32; -} -extern "C" { - pub fn asin(arg1: f64) -> f64; -} -extern "C" { - pub fn asinl(arg1: u128) -> u128; -} -extern "C" { - pub fn atanf(arg1: f32) -> f32; -} -extern "C" { - pub fn atan(arg1: f64) -> f64; -} -extern "C" { - pub fn atanl(arg1: u128) -> u128; -} -extern "C" { - pub fn atan2f(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn atan2(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn atan2l(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn cosf(arg1: f32) -> f32; -} -extern "C" { - pub fn cos(arg1: f64) -> f64; -} -extern "C" { - pub fn cosl(arg1: u128) -> u128; -} -extern "C" { - pub fn sinf(arg1: f32) -> f32; -} -extern "C" { - pub fn sin(arg1: f64) -> f64; -} -extern "C" { - pub fn sinl(arg1: u128) -> u128; -} -extern "C" { - pub fn tanf(arg1: f32) -> f32; -} -extern "C" { - pub fn tan(arg1: f64) -> f64; -} -extern "C" { - pub fn tanl(arg1: u128) -> u128; -} -extern "C" { - pub fn acoshf(arg1: f32) -> f32; -} -extern "C" { - pub fn acosh(arg1: f64) -> f64; -} -extern "C" { - pub fn acoshl(arg1: u128) -> u128; -} -extern "C" { - pub fn asinhf(arg1: f32) -> f32; -} -extern "C" { - pub fn asinh(arg1: f64) -> f64; -} -extern "C" { - pub fn asinhl(arg1: u128) -> u128; -} -extern "C" { - pub fn atanhf(arg1: f32) -> f32; -} -extern "C" { - pub fn atanh(arg1: f64) -> f64; -} -extern "C" { - pub fn atanhl(arg1: u128) -> u128; -} -extern "C" { - pub fn coshf(arg1: f32) -> f32; -} -extern "C" { - pub fn cosh(arg1: f64) -> f64; -} -extern "C" { - pub fn coshl(arg1: u128) -> u128; -} -extern "C" { - pub fn sinhf(arg1: f32) -> f32; -} -extern "C" { - pub fn sinh(arg1: f64) -> f64; -} -extern "C" { - pub fn sinhl(arg1: u128) -> u128; -} -extern "C" { - pub fn tanhf(arg1: f32) -> f32; -} -extern "C" { - pub fn tanh(arg1: f64) -> f64; -} -extern "C" { - pub fn tanhl(arg1: u128) -> u128; -} -extern "C" { - pub fn expf(arg1: f32) -> f32; -} -extern "C" { - pub fn exp(arg1: f64) -> f64; -} -extern "C" { - pub fn expl(arg1: u128) -> u128; -} -extern "C" { - pub fn exp2f(arg1: f32) -> f32; -} -extern "C" { - pub fn exp2(arg1: f64) -> f64; -} -extern "C" { - pub fn exp2l(arg1: u128) -> u128; -} -extern "C" { - pub fn expm1f(arg1: f32) -> f32; -} -extern "C" { - pub fn expm1(arg1: f64) -> f64; -} -extern "C" { - pub fn expm1l(arg1: u128) -> u128; -} -extern "C" { - pub fn logf(arg1: f32) -> f32; -} -extern "C" { - pub fn log(arg1: f64) -> f64; -} -extern "C" { - pub fn logl(arg1: u128) -> u128; -} -extern "C" { - pub fn log10f(arg1: f32) -> f32; -} -extern "C" { - pub fn log10(arg1: f64) -> f64; -} -extern "C" { - pub fn log10l(arg1: u128) -> u128; -} -extern "C" { - pub fn log2f(arg1: f32) -> f32; -} -extern "C" { - pub fn log2(arg1: f64) -> f64; -} -extern "C" { - pub fn log2l(arg1: u128) -> u128; -} -extern "C" { - pub fn log1pf(arg1: f32) -> f32; -} -extern "C" { - pub fn log1p(arg1: f64) -> f64; -} -extern "C" { - pub fn log1pl(arg1: u128) -> u128; -} -extern "C" { - pub fn logbf(arg1: f32) -> f32; -} -extern "C" { - pub fn logb(arg1: f64) -> f64; -} -extern "C" { - pub fn logbl(arg1: u128) -> u128; -} -extern "C" { - pub fn modff(arg1: f32, arg2: *mut f32) -> f32; -} -extern "C" { - pub fn modf(arg1: f64, arg2: *mut f64) -> f64; -} -extern "C" { - pub fn modfl(arg1: u128, arg2: *mut u128) -> u128; -} -extern "C" { - pub fn ldexpf(arg1: f32, arg2: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn ldexp(arg1: f64, arg2: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn ldexpl(arg1: u128, arg2: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn frexpf(arg1: f32, arg2: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn frexp(arg1: f64, arg2: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn frexpl(arg1: u128, arg2: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn ilogbf(arg1: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ilogb(arg1: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ilogbl(arg1: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn scalbnf(arg1: f32, arg2: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn scalbn(arg1: f64, arg2: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn scalbnl(arg1: u128, arg2: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn scalblnf(arg1: f32, arg2: ::std::os::raw::c_long) -> f32; -} -extern "C" { - pub fn scalbln(arg1: f64, arg2: ::std::os::raw::c_long) -> f64; -} -extern "C" { - pub fn scalblnl(arg1: u128, arg2: ::std::os::raw::c_long) -> u128; -} -extern "C" { - pub fn fabsf(arg1: f32) -> f32; -} -extern "C" { - pub fn fabs(arg1: f64) -> f64; -} -extern "C" { - pub fn fabsl(arg1: u128) -> u128; -} -extern "C" { - pub fn cbrtf(arg1: f32) -> f32; -} -extern "C" { - pub fn cbrt(arg1: f64) -> f64; -} -extern "C" { - pub fn cbrtl(arg1: u128) -> u128; -} -extern "C" { - pub fn hypotf(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn hypot(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn hypotl(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn powf(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn pow(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn powl(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn sqrtf(arg1: f32) -> f32; -} -extern "C" { - pub fn sqrt(arg1: f64) -> f64; -} -extern "C" { - pub fn sqrtl(arg1: u128) -> u128; -} -extern "C" { - pub fn erff(arg1: f32) -> f32; -} -extern "C" { - pub fn erf(arg1: f64) -> f64; -} -extern "C" { - pub fn erfl(arg1: u128) -> u128; -} -extern "C" { - pub fn erfcf(arg1: f32) -> f32; -} -extern "C" { - pub fn erfc(arg1: f64) -> f64; -} -extern "C" { - pub fn erfcl(arg1: u128) -> u128; -} -extern "C" { - pub fn lgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn lgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn lgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn tgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn tgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn tgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn ceilf(arg1: f32) -> f32; -} -extern "C" { - pub fn ceil(arg1: f64) -> f64; -} -extern "C" { - pub fn ceill(arg1: u128) -> u128; -} -extern "C" { - pub fn floorf(arg1: f32) -> f32; -} -extern "C" { - pub fn floor(arg1: f64) -> f64; -} -extern "C" { - pub fn floorl(arg1: u128) -> u128; -} -extern "C" { - pub fn nearbyintf(arg1: f32) -> f32; -} -extern "C" { - pub fn nearbyint(arg1: f64) -> f64; -} -extern "C" { - pub fn nearbyintl(arg1: u128) -> u128; -} -extern "C" { - pub fn rintf(arg1: f32) -> f32; -} -extern "C" { - pub fn rint(arg1: f64) -> f64; -} -extern "C" { - pub fn rintl(arg1: u128) -> u128; -} -extern "C" { - pub fn lrintf(arg1: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn lrint(arg1: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn lrintl(arg1: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn roundf(arg1: f32) -> f32; -} -extern "C" { - pub fn round(arg1: f64) -> f64; -} -extern "C" { - pub fn roundl(arg1: u128) -> u128; -} -extern "C" { - pub fn lroundf(arg1: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn lround(arg1: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn lroundl(arg1: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llrintf(arg1: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn llrint(arg1: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn llrintl(arg1: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn llroundf(arg1: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn llround(arg1: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn llroundl(arg1: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn truncf(arg1: f32) -> f32; -} -extern "C" { - pub fn trunc(arg1: f64) -> f64; -} -extern "C" { - pub fn truncl(arg1: u128) -> u128; -} -extern "C" { - pub fn fmodf(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn fmod(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn fmodl(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn remainderf(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn remainder(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn remainderl(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn remquof(arg1: f32, arg2: f32, arg3: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn remquo(arg1: f64, arg2: f64, arg3: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn remquol(arg1: u128, arg2: u128, arg3: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn copysignf(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn copysign(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn copysignl(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn nanf(arg1: *const ::std::os::raw::c_char) -> f32; -} -extern "C" { - pub fn nan(arg1: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn nanl(arg1: *const ::std::os::raw::c_char) -> u128; -} -extern "C" { - pub fn nextafterf(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn nextafter(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn nextafterl(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn nexttoward(arg1: f64, arg2: u128) -> f64; -} -extern "C" { - pub fn nexttowardf(arg1: f32, arg2: u128) -> f32; -} -extern "C" { - pub fn nexttowardl(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn fdimf(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn fdim(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn fdiml(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn fmaxf(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn fmax(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn fmaxl(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn fminf(arg1: f32, arg2: f32) -> f32; -} -extern "C" { - pub fn fmin(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn fminl(arg1: u128, arg2: u128) -> u128; -} -extern "C" { - pub fn fmaf(arg1: f32, arg2: f32, arg3: f32) -> f32; -} -extern "C" { - pub fn fma(arg1: f64, arg2: f64, arg3: f64) -> f64; -} -extern "C" { - pub fn fmal(arg1: u128, arg2: u128, arg3: u128) -> u128; -} -extern "C" { - pub fn __inff() -> f32; -} -extern "C" { - pub fn __inf() -> f64; -} -extern "C" { - pub fn __infl() -> u128; -} -extern "C" { - pub fn __nan() -> f32; -} -extern "C" { - pub fn __exp10f(arg1: f32) -> f32; -} -extern "C" { - pub fn __exp10(arg1: f64) -> f64; -} -extern "C" { - pub fn __cospif(arg1: f32) -> f32; -} -extern "C" { - pub fn __cospi(arg1: f64) -> f64; -} -extern "C" { - pub fn __sinpif(arg1: f32) -> f32; -} -extern "C" { - pub fn __sinpi(arg1: f64) -> f64; -} -extern "C" { - pub fn __tanpif(arg1: f32) -> f32; -} -extern "C" { - pub fn __tanpi(arg1: f64) -> f64; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __float2 { - pub __sinval: f32, - pub __cosval: f32, -} -#[test] -fn bindgen_test_layout___float2() { - assert_eq!( - ::std::mem::size_of::<__float2>(), - 8usize, - concat!("Size of: ", stringify!(__float2)) - ); - assert_eq!( - ::std::mem::align_of::<__float2>(), - 4usize, - concat!("Alignment of ", stringify!(__float2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__float2>())).__sinval as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__float2), - "::", - stringify!(__sinval) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__float2>())).__cosval as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__float2), - "::", - stringify!(__cosval) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __double2 { - pub __sinval: f64, - pub __cosval: f64, -} -#[test] -fn bindgen_test_layout___double2() { - assert_eq!( - ::std::mem::size_of::<__double2>(), - 16usize, - concat!("Size of: ", stringify!(__double2)) - ); - assert_eq!( - ::std::mem::align_of::<__double2>(), - 8usize, - concat!("Alignment of ", stringify!(__double2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__double2>())).__sinval as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__double2), - "::", - stringify!(__sinval) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__double2>())).__cosval as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__double2), - "::", - stringify!(__cosval) - ) - ); -} -extern "C" { - pub fn __sincosf_stret(arg1: f32) -> __float2; -} -extern "C" { - pub fn __sincos_stret(arg1: f64) -> __double2; -} -extern "C" { - pub fn __sincospif_stret(arg1: f32) -> __float2; -} -extern "C" { - pub fn __sincospi_stret(arg1: f64) -> __double2; -} -extern "C" { - pub fn j0(arg1: f64) -> f64; -} -extern "C" { - pub fn j1(arg1: f64) -> f64; -} -extern "C" { - pub fn jn(arg1: ::std::os::raw::c_int, arg2: f64) -> f64; -} -extern "C" { - pub fn y0(arg1: f64) -> f64; -} -extern "C" { - pub fn y1(arg1: f64) -> f64; -} -extern "C" { - pub fn yn(arg1: ::std::os::raw::c_int, arg2: f64) -> f64; -} -extern "C" { - pub fn scalb(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub static mut signgam: ::std::os::raw::c_int; -} -extern "C" { - pub fn rinttol(arg1: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn roundtol(arg1: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn drem(arg1: f64, arg2: f64) -> f64; -} -extern "C" { - pub fn finite(arg1: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn gamma(arg1: f64) -> f64; -} -extern "C" { - pub fn significand(arg1: f64) -> f64; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct exception { - pub type_: ::std::os::raw::c_int, - pub name: *mut ::std::os::raw::c_char, - pub arg1: f64, - pub arg2: f64, - pub retval: f64, -} -#[test] -fn bindgen_test_layout_exception() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(exception)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(exception)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).type_ as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(exception), - "::", - stringify!(type_) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).name as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(exception), - "::", - stringify!(name) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).arg1 as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(exception), - "::", - stringify!(arg1) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).arg2 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(exception), - "::", - stringify!(arg2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).retval as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(exception), - "::", - stringify!(retval) - ) - ); -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub enum GuiPropertyElement { - BORDER = 0, - BASE = 1, - TEXT = 2, - OTHER = 3, -} -extern "C" { - pub static mut guiState: GuiControlState; -} -extern "C" { - pub static mut guiFont: Font; -} -pub const guiLocked: bool = false; -pub const guiAlpha: f32 = 1.0; -extern "C" { - pub static mut guiStyle: [::std::os::raw::c_uint; 384usize]; -} -pub const guiStyleLoaded: bool = false; -extern "C" { - pub static mut guiTooltip: *const ::std::os::raw::c_char; -} -pub const guiTooltipEnabled: bool = true; -extern "C" { - pub fn GuiSliderPro( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - sliderWidth: ::std::os::raw::c_int, - ) -> f32; -} -extern "C" { - pub fn GuiColorPanelEx(bounds: Rectangle, color: Color, hue: f32) -> Color; -} -extern "C" { - pub fn GuiLoadIcons( - fileName: *const ::std::os::raw::c_char, - loadIconsName: bool, - ) -> *mut *mut ::std::os::raw::c_char; -} -pub type __builtin_va_list = [__va_list_tag; 1usize]; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __va_list_tag { - pub gp_offset: ::std::os::raw::c_uint, - pub fp_offset: ::std::os::raw::c_uint, - pub overflow_arg_area: *mut ::std::os::raw::c_void, - pub reg_save_area: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout___va_list_tag() { - assert_eq!( - ::std::mem::size_of::<__va_list_tag>(), - 24usize, - concat!("Size of: ", stringify!(__va_list_tag)) - ); - assert_eq!( - ::std::mem::align_of::<__va_list_tag>(), - 8usize, - concat!("Alignment of ", stringify!(__va_list_tag)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).gp_offset as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(gp_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).fp_offset as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(fp_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).overflow_arg_area as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(overflow_arg_area) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).reg_save_area as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(reg_save_area) - ) - ); -} diff --git a/raylib-sys/bindings_web.rs b/raylib-sys/bindings_web.rs deleted file mode 100644 index 4b46d3b9..00000000 --- a/raylib-sys/bindings_web.rs +++ /dev/null @@ -1,15977 +0,0 @@ -/* automatically generated by rust-bindgen 0.55.1 */ - -pub const __GNUC_VA_LIST: u32 = 1; -pub const PI: f64 = 3.141592653589793; -pub const DEG2RAD: f64 = 0.017453292519943295; -pub const RAD2DEG: f64 = 57.29577951308232; -pub const true_: u32 = 1; -pub const false_: u32 = 0; -pub const __bool_true_false_are_defined: u32 = 1; -pub const _MATH_H: u32 = 1; -pub const _FEATURES_H: u32 = 1; -pub const __GLIBC_USE_ISOC2X: u32 = 0; -pub const __USE_ISOC11: u32 = 1; -pub const __USE_ISOC99: u32 = 1; -pub const __USE_ISOC95: u32 = 1; -pub const __USE_FORTIFY_LEVEL: u32 = 0; -pub const __GLIBC_USE_DEPRECATED_GETS: u32 = 0; -pub const __GLIBC_USE_DEPRECATED_SCANF: u32 = 0; -pub const _STDC_PREDEF_H: u32 = 1; -pub const __STDC_IEC_559__: u32 = 1; -pub const __STDC_IEC_559_COMPLEX__: u32 = 1; -pub const __STDC_ISO_10646__: u32 = 201706; -pub const __GNU_LIBRARY__: u32 = 6; -pub const __GLIBC__: u32 = 2; -pub const __GLIBC_MINOR__: u32 = 31; -pub const _SYS_CDEFS_H: u32 = 1; -pub const __glibc_c99_flexarr_available: u32 = 1; -pub const __WORDSIZE: u32 = 64; -pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1; -pub const __SYSCALL_WORDSIZE: u32 = 64; -pub const __LONG_DOUBLE_USES_FLOAT128: u32 = 0; -pub const __HAVE_GENERIC_SELECTION: u32 = 1; -pub const __GLIBC_USE_LIB_EXT2: u32 = 0; -pub const __GLIBC_USE_IEC_60559_BFP_EXT: u32 = 0; -pub const __GLIBC_USE_IEC_60559_BFP_EXT_C2X: u32 = 0; -pub const __GLIBC_USE_IEC_60559_FUNCS_EXT: u32 = 0; -pub const __GLIBC_USE_IEC_60559_FUNCS_EXT_C2X: u32 = 0; -pub const __GLIBC_USE_IEC_60559_TYPES_EXT: u32 = 0; -pub const _BITS_TYPES_H: u32 = 1; -pub const __TIMESIZE: u32 = 64; -pub const _BITS_TYPESIZES_H: u32 = 1; -pub const __OFF_T_MATCHES_OFF64_T: u32 = 1; -pub const __INO_T_MATCHES_INO64_T: u32 = 1; -pub const __RLIM_T_MATCHES_RLIM64_T: u32 = 1; -pub const __STATFS_MATCHES_STATFS64: u32 = 1; -pub const __FD_SETSIZE: u32 = 1024; -pub const _BITS_TIME64_H: u32 = 1; -pub const _BITS_LIBM_SIMD_DECL_STUBS_H: u32 = 1; -pub const __HAVE_FLOAT128: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT128: u32 = 0; -pub const __HAVE_FLOAT64X: u32 = 1; -pub const __HAVE_FLOAT64X_LONG_DOUBLE: u32 = 1; -pub const __HAVE_FLOAT16: u32 = 0; -pub const __HAVE_FLOAT32: u32 = 1; -pub const __HAVE_FLOAT64: u32 = 1; -pub const __HAVE_FLOAT32X: u32 = 1; -pub const __HAVE_FLOAT128X: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT16: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT32: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT64: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT32X: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT64X: u32 = 0; -pub const __HAVE_DISTINCT_FLOAT128X: u32 = 0; -pub const __HAVE_FLOATN_NOT_TYPEDEF: u32 = 0; -pub const __FP_LOGB0_IS_MIN: u32 = 1; -pub const __FP_LOGBNAN_IS_MIN: u32 = 1; -pub const FP_ILOGB0: i32 = -2147483648; -pub const FP_ILOGBNAN: i32 = -2147483648; -pub const __MATH_DECLARING_DOUBLE: u32 = 1; -pub const __MATH_DECLARING_FLOATN: u32 = 0; -pub const __MATH_DECLARE_LDOUBLE: u32 = 1; -pub const FP_NAN: u32 = 0; -pub const FP_INFINITE: u32 = 1; -pub const FP_ZERO: u32 = 2; -pub const FP_SUBNORMAL: u32 = 3; -pub const FP_NORMAL: u32 = 4; -pub const MATH_ERRNO: u32 = 1; -pub const MATH_ERREXCEPT: u32 = 2; -pub const math_errhandling: u32 = 3; -pub const DEFAULT_BATCH_BUFFER_ELEMENTS: u32 = 8192; -pub const DEFAULT_BATCH_BUFFERS: u32 = 1; -pub const DEFAULT_BATCH_DRAWCALLS: u32 = 256; -pub const MAX_BATCH_ACTIVE_TEXTURES: u32 = 4; -pub const MAX_MATRIX_STACK_SIZE: u32 = 32; -pub const MAX_SHADER_LOCATIONS: u32 = 32; -pub const MAX_MATERIAL_MAPS: u32 = 12; -pub const RL_CULL_DISTANCE_NEAR: f64 = 0.01; -pub const RL_CULL_DISTANCE_FAR: f64 = 1000.0; -pub const RL_TEXTURE_WRAP_S: u32 = 10242; -pub const RL_TEXTURE_WRAP_T: u32 = 10243; -pub const RL_TEXTURE_MAG_FILTER: u32 = 10240; -pub const RL_TEXTURE_MIN_FILTER: u32 = 10241; -pub const RL_TEXTURE_ANISOTROPIC_FILTER: u32 = 12288; -pub const RL_FILTER_NEAREST: u32 = 9728; -pub const RL_FILTER_LINEAR: u32 = 9729; -pub const RL_FILTER_MIP_NEAREST: u32 = 9984; -pub const RL_FILTER_NEAREST_MIP_LINEAR: u32 = 9986; -pub const RL_FILTER_LINEAR_MIP_NEAREST: u32 = 9985; -pub const RL_FILTER_MIP_LINEAR: u32 = 9987; -pub const RL_WRAP_REPEAT: u32 = 10497; -pub const RL_WRAP_CLAMP: u32 = 33071; -pub const RL_WRAP_MIRROR_REPEAT: u32 = 33648; -pub const RL_WRAP_MIRROR_CLAMP: u32 = 34626; -pub const RL_MODELVIEW: u32 = 5888; -pub const RL_PROJECTION: u32 = 5889; -pub const RL_TEXTURE: u32 = 5890; -pub const RL_LINES: u32 = 1; -pub const RL_TRIANGLES: u32 = 4; -pub const RL_QUADS: u32 = 7; -pub const RAYLIB_VERSION: &'static [u8; 4usize] = b"3.0\0"; -pub const SUPPORT_CAMERA_SYSTEM: u32 = 1; -pub const SUPPORT_GESTURES_SYSTEM: u32 = 1; -pub const SUPPORT_MOUSE_GESTURES: u32 = 1; -pub const SUPPORT_SSH_KEYBOARD_RPI: u32 = 1; -pub const SUPPORT_MOUSE_CURSOR_RPI: u32 = 1; -pub const SUPPORT_SCREEN_CAPTURE: u32 = 1; -pub const SUPPORT_COMPRESSION_API: u32 = 1; -pub const SUPPORT_DATA_STORAGE: u32 = 1; -pub const SUPPORT_VR_SIMULATOR: u32 = 1; -pub const SUPPORT_FONT_TEXTURE: u32 = 1; -pub const SUPPORT_QUADS_DRAW_MODE: u32 = 1; -pub const SUPPORT_FILEFORMAT_PNG: u32 = 1; -pub const SUPPORT_FILEFORMAT_BMP: u32 = 1; -pub const SUPPORT_FILEFORMAT_TGA: u32 = 1; -pub const SUPPORT_FILEFORMAT_GIF: u32 = 1; -pub const SUPPORT_FILEFORMAT_DDS: u32 = 1; -pub const SUPPORT_FILEFORMAT_HDR: u32 = 1; -pub const SUPPORT_FILEFORMAT_KTX: u32 = 1; -pub const SUPPORT_FILEFORMAT_ASTC: u32 = 1; -pub const SUPPORT_IMAGE_EXPORT: u32 = 1; -pub const SUPPORT_IMAGE_MANIPULATION: u32 = 1; -pub const SUPPORT_IMAGE_GENERATION: u32 = 1; -pub const SUPPORT_DEFAULT_FONT: u32 = 1; -pub const SUPPORT_FILEFORMAT_FNT: u32 = 1; -pub const SUPPORT_FILEFORMAT_TTF: u32 = 1; -pub const SUPPORT_FILEFORMAT_OBJ: u32 = 1; -pub const SUPPORT_FILEFORMAT_MTL: u32 = 1; -pub const SUPPORT_FILEFORMAT_IQM: u32 = 1; -pub const SUPPORT_FILEFORMAT_GLTF: u32 = 1; -pub const SUPPORT_MESH_GENERATION: u32 = 1; -pub const SUPPORT_FILEFORMAT_WAV: u32 = 1; -pub const SUPPORT_FILEFORMAT_OGG: u32 = 1; -pub const SUPPORT_FILEFORMAT_XM: u32 = 1; -pub const SUPPORT_FILEFORMAT_MOD: u32 = 1; -pub const SUPPORT_FILEFORMAT_MP3: u32 = 1; -pub const SUPPORT_TRACELOG: u32 = 1; -pub const _STDLIB_H: u32 = 1; -pub const __ldiv_t_defined: u32 = 1; -pub const __lldiv_t_defined: u32 = 1; -pub const RAND_MAX: u32 = 2147483647; -pub const EXIT_FAILURE: u32 = 1; -pub const EXIT_SUCCESS: u32 = 0; -pub const _STRING_H: u32 = 1; -pub const _INTTYPES_H: u32 = 1; -pub const _STDINT_H: u32 = 1; -pub const _BITS_WCHAR_H: u32 = 1; -pub const _BITS_STDINT_INTN_H: u32 = 1; -pub const _BITS_STDINT_UINTN_H: u32 = 1; -pub const INT8_MIN: i32 = -128; -pub const INT16_MIN: i32 = -32768; -pub const INT32_MIN: i32 = -2147483648; -pub const INT8_MAX: u32 = 127; -pub const INT16_MAX: u32 = 32767; -pub const INT32_MAX: u32 = 2147483647; -pub const UINT8_MAX: u32 = 255; -pub const UINT16_MAX: u32 = 65535; -pub const UINT32_MAX: u32 = 4294967295; -pub const INT_LEAST8_MIN: i32 = -128; -pub const INT_LEAST16_MIN: i32 = -32768; -pub const INT_LEAST32_MIN: i32 = -2147483648; -pub const INT_LEAST8_MAX: u32 = 127; -pub const INT_LEAST16_MAX: u32 = 32767; -pub const INT_LEAST32_MAX: u32 = 2147483647; -pub const UINT_LEAST8_MAX: u32 = 255; -pub const UINT_LEAST16_MAX: u32 = 65535; -pub const UINT_LEAST32_MAX: u32 = 4294967295; -pub const INT_FAST8_MIN: i32 = -128; -pub const INT_FAST16_MIN: i64 = -9223372036854775808; -pub const INT_FAST32_MIN: i64 = -9223372036854775808; -pub const INT_FAST8_MAX: u32 = 127; -pub const INT_FAST16_MAX: u64 = 9223372036854775807; -pub const INT_FAST32_MAX: u64 = 9223372036854775807; -pub const UINT_FAST8_MAX: u32 = 255; -pub const UINT_FAST16_MAX: i32 = -1; -pub const UINT_FAST32_MAX: i32 = -1; -pub const INTPTR_MIN: i64 = -9223372036854775808; -pub const INTPTR_MAX: u64 = 9223372036854775807; -pub const UINTPTR_MAX: i32 = -1; -pub const PTRDIFF_MIN: i64 = -9223372036854775808; -pub const PTRDIFF_MAX: u64 = 9223372036854775807; -pub const SIG_ATOMIC_MIN: i32 = -2147483648; -pub const SIG_ATOMIC_MAX: u32 = 2147483647; -pub const SIZE_MAX: i32 = -1; -pub const WINT_MIN: u32 = 0; -pub const WINT_MAX: u32 = 4294967295; -pub const ____gwchar_t_defined: u32 = 1; -pub const __PRI64_PREFIX: &'static [u8; 2usize] = b"l\0"; -pub const __PRIPTR_PREFIX: &'static [u8; 2usize] = b"l\0"; -pub const PRId8: &'static [u8; 2usize] = b"d\0"; -pub const PRId16: &'static [u8; 2usize] = b"d\0"; -pub const PRId32: &'static [u8; 2usize] = b"d\0"; -pub const PRId64: &'static [u8; 3usize] = b"ld\0"; -pub const PRIdLEAST8: &'static [u8; 2usize] = b"d\0"; -pub const PRIdLEAST16: &'static [u8; 2usize] = b"d\0"; -pub const PRIdLEAST32: &'static [u8; 2usize] = b"d\0"; -pub const PRIdLEAST64: &'static [u8; 3usize] = b"ld\0"; -pub const PRIdFAST8: &'static [u8; 2usize] = b"d\0"; -pub const PRIdFAST16: &'static [u8; 3usize] = b"ld\0"; -pub const PRIdFAST32: &'static [u8; 3usize] = b"ld\0"; -pub const PRIdFAST64: &'static [u8; 3usize] = b"ld\0"; -pub const PRIi8: &'static [u8; 2usize] = b"i\0"; -pub const PRIi16: &'static [u8; 2usize] = b"i\0"; -pub const PRIi32: &'static [u8; 2usize] = b"i\0"; -pub const PRIi64: &'static [u8; 3usize] = b"li\0"; -pub const PRIiLEAST8: &'static [u8; 2usize] = b"i\0"; -pub const PRIiLEAST16: &'static [u8; 2usize] = b"i\0"; -pub const PRIiLEAST32: &'static [u8; 2usize] = b"i\0"; -pub const PRIiLEAST64: &'static [u8; 3usize] = b"li\0"; -pub const PRIiFAST8: &'static [u8; 2usize] = b"i\0"; -pub const PRIiFAST16: &'static [u8; 3usize] = b"li\0"; -pub const PRIiFAST32: &'static [u8; 3usize] = b"li\0"; -pub const PRIiFAST64: &'static [u8; 3usize] = b"li\0"; -pub const PRIo8: &'static [u8; 2usize] = b"o\0"; -pub const PRIo16: &'static [u8; 2usize] = b"o\0"; -pub const PRIo32: &'static [u8; 2usize] = b"o\0"; -pub const PRIo64: &'static [u8; 3usize] = b"lo\0"; -pub const PRIoLEAST8: &'static [u8; 2usize] = b"o\0"; -pub const PRIoLEAST16: &'static [u8; 2usize] = b"o\0"; -pub const PRIoLEAST32: &'static [u8; 2usize] = b"o\0"; -pub const PRIoLEAST64: &'static [u8; 3usize] = b"lo\0"; -pub const PRIoFAST8: &'static [u8; 2usize] = b"o\0"; -pub const PRIoFAST16: &'static [u8; 3usize] = b"lo\0"; -pub const PRIoFAST32: &'static [u8; 3usize] = b"lo\0"; -pub const PRIoFAST64: &'static [u8; 3usize] = b"lo\0"; -pub const PRIu8: &'static [u8; 2usize] = b"u\0"; -pub const PRIu16: &'static [u8; 2usize] = b"u\0"; -pub const PRIu32: &'static [u8; 2usize] = b"u\0"; -pub const PRIu64: &'static [u8; 3usize] = b"lu\0"; -pub const PRIuLEAST8: &'static [u8; 2usize] = b"u\0"; -pub const PRIuLEAST16: &'static [u8; 2usize] = b"u\0"; -pub const PRIuLEAST32: &'static [u8; 2usize] = b"u\0"; -pub const PRIuLEAST64: &'static [u8; 3usize] = b"lu\0"; -pub const PRIuFAST8: &'static [u8; 2usize] = b"u\0"; -pub const PRIuFAST16: &'static [u8; 3usize] = b"lu\0"; -pub const PRIuFAST32: &'static [u8; 3usize] = b"lu\0"; -pub const PRIuFAST64: &'static [u8; 3usize] = b"lu\0"; -pub const PRIx8: &'static [u8; 2usize] = b"x\0"; -pub const PRIx16: &'static [u8; 2usize] = b"x\0"; -pub const PRIx32: &'static [u8; 2usize] = b"x\0"; -pub const PRIx64: &'static [u8; 3usize] = b"lx\0"; -pub const PRIxLEAST8: &'static [u8; 2usize] = b"x\0"; -pub const PRIxLEAST16: &'static [u8; 2usize] = b"x\0"; -pub const PRIxLEAST32: &'static [u8; 2usize] = b"x\0"; -pub const PRIxLEAST64: &'static [u8; 3usize] = b"lx\0"; -pub const PRIxFAST8: &'static [u8; 2usize] = b"x\0"; -pub const PRIxFAST16: &'static [u8; 3usize] = b"lx\0"; -pub const PRIxFAST32: &'static [u8; 3usize] = b"lx\0"; -pub const PRIxFAST64: &'static [u8; 3usize] = b"lx\0"; -pub const PRIX8: &'static [u8; 2usize] = b"X\0"; -pub const PRIX16: &'static [u8; 2usize] = b"X\0"; -pub const PRIX32: &'static [u8; 2usize] = b"X\0"; -pub const PRIX64: &'static [u8; 3usize] = b"lX\0"; -pub const PRIXLEAST8: &'static [u8; 2usize] = b"X\0"; -pub const PRIXLEAST16: &'static [u8; 2usize] = b"X\0"; -pub const PRIXLEAST32: &'static [u8; 2usize] = b"X\0"; -pub const PRIXLEAST64: &'static [u8; 3usize] = b"lX\0"; -pub const PRIXFAST8: &'static [u8; 2usize] = b"X\0"; -pub const PRIXFAST16: &'static [u8; 3usize] = b"lX\0"; -pub const PRIXFAST32: &'static [u8; 3usize] = b"lX\0"; -pub const PRIXFAST64: &'static [u8; 3usize] = b"lX\0"; -pub const PRIdMAX: &'static [u8; 3usize] = b"ld\0"; -pub const PRIiMAX: &'static [u8; 3usize] = b"li\0"; -pub const PRIoMAX: &'static [u8; 3usize] = b"lo\0"; -pub const PRIuMAX: &'static [u8; 3usize] = b"lu\0"; -pub const PRIxMAX: &'static [u8; 3usize] = b"lx\0"; -pub const PRIXMAX: &'static [u8; 3usize] = b"lX\0"; -pub const PRIdPTR: &'static [u8; 3usize] = b"ld\0"; -pub const PRIiPTR: &'static [u8; 3usize] = b"li\0"; -pub const PRIoPTR: &'static [u8; 3usize] = b"lo\0"; -pub const PRIuPTR: &'static [u8; 3usize] = b"lu\0"; -pub const PRIxPTR: &'static [u8; 3usize] = b"lx\0"; -pub const PRIXPTR: &'static [u8; 3usize] = b"lX\0"; -pub const SCNd8: &'static [u8; 4usize] = b"hhd\0"; -pub const SCNd16: &'static [u8; 3usize] = b"hd\0"; -pub const SCNd32: &'static [u8; 2usize] = b"d\0"; -pub const SCNd64: &'static [u8; 3usize] = b"ld\0"; -pub const SCNdLEAST8: &'static [u8; 4usize] = b"hhd\0"; -pub const SCNdLEAST16: &'static [u8; 3usize] = b"hd\0"; -pub const SCNdLEAST32: &'static [u8; 2usize] = b"d\0"; -pub const SCNdLEAST64: &'static [u8; 3usize] = b"ld\0"; -pub const SCNdFAST8: &'static [u8; 4usize] = b"hhd\0"; -pub const SCNdFAST16: &'static [u8; 3usize] = b"ld\0"; -pub const SCNdFAST32: &'static [u8; 3usize] = b"ld\0"; -pub const SCNdFAST64: &'static [u8; 3usize] = b"ld\0"; -pub const SCNi8: &'static [u8; 4usize] = b"hhi\0"; -pub const SCNi16: &'static [u8; 3usize] = b"hi\0"; -pub const SCNi32: &'static [u8; 2usize] = b"i\0"; -pub const SCNi64: &'static [u8; 3usize] = b"li\0"; -pub const SCNiLEAST8: &'static [u8; 4usize] = b"hhi\0"; -pub const SCNiLEAST16: &'static [u8; 3usize] = b"hi\0"; -pub const SCNiLEAST32: &'static [u8; 2usize] = b"i\0"; -pub const SCNiLEAST64: &'static [u8; 3usize] = b"li\0"; -pub const SCNiFAST8: &'static [u8; 4usize] = b"hhi\0"; -pub const SCNiFAST16: &'static [u8; 3usize] = b"li\0"; -pub const SCNiFAST32: &'static [u8; 3usize] = b"li\0"; -pub const SCNiFAST64: &'static [u8; 3usize] = b"li\0"; -pub const SCNu8: &'static [u8; 4usize] = b"hhu\0"; -pub const SCNu16: &'static [u8; 3usize] = b"hu\0"; -pub const SCNu32: &'static [u8; 2usize] = b"u\0"; -pub const SCNu64: &'static [u8; 3usize] = b"lu\0"; -pub const SCNuLEAST8: &'static [u8; 4usize] = b"hhu\0"; -pub const SCNuLEAST16: &'static [u8; 3usize] = b"hu\0"; -pub const SCNuLEAST32: &'static [u8; 2usize] = b"u\0"; -pub const SCNuLEAST64: &'static [u8; 3usize] = b"lu\0"; -pub const SCNuFAST8: &'static [u8; 4usize] = b"hhu\0"; -pub const SCNuFAST16: &'static [u8; 3usize] = b"lu\0"; -pub const SCNuFAST32: &'static [u8; 3usize] = b"lu\0"; -pub const SCNuFAST64: &'static [u8; 3usize] = b"lu\0"; -pub const SCNo8: &'static [u8; 4usize] = b"hho\0"; -pub const SCNo16: &'static [u8; 3usize] = b"ho\0"; -pub const SCNo32: &'static [u8; 2usize] = b"o\0"; -pub const SCNo64: &'static [u8; 3usize] = b"lo\0"; -pub const SCNoLEAST8: &'static [u8; 4usize] = b"hho\0"; -pub const SCNoLEAST16: &'static [u8; 3usize] = b"ho\0"; -pub const SCNoLEAST32: &'static [u8; 2usize] = b"o\0"; -pub const SCNoLEAST64: &'static [u8; 3usize] = b"lo\0"; -pub const SCNoFAST8: &'static [u8; 4usize] = b"hho\0"; -pub const SCNoFAST16: &'static [u8; 3usize] = b"lo\0"; -pub const SCNoFAST32: &'static [u8; 3usize] = b"lo\0"; -pub const SCNoFAST64: &'static [u8; 3usize] = b"lo\0"; -pub const SCNx8: &'static [u8; 4usize] = b"hhx\0"; -pub const SCNx16: &'static [u8; 3usize] = b"hx\0"; -pub const SCNx32: &'static [u8; 2usize] = b"x\0"; -pub const SCNx64: &'static [u8; 3usize] = b"lx\0"; -pub const SCNxLEAST8: &'static [u8; 4usize] = b"hhx\0"; -pub const SCNxLEAST16: &'static [u8; 3usize] = b"hx\0"; -pub const SCNxLEAST32: &'static [u8; 2usize] = b"x\0"; -pub const SCNxLEAST64: &'static [u8; 3usize] = b"lx\0"; -pub const SCNxFAST8: &'static [u8; 4usize] = b"hhx\0"; -pub const SCNxFAST16: &'static [u8; 3usize] = b"lx\0"; -pub const SCNxFAST32: &'static [u8; 3usize] = b"lx\0"; -pub const SCNxFAST64: &'static [u8; 3usize] = b"lx\0"; -pub const SCNdMAX: &'static [u8; 3usize] = b"ld\0"; -pub const SCNiMAX: &'static [u8; 3usize] = b"li\0"; -pub const SCNoMAX: &'static [u8; 3usize] = b"lo\0"; -pub const SCNuMAX: &'static [u8; 3usize] = b"lu\0"; -pub const SCNxMAX: &'static [u8; 3usize] = b"lx\0"; -pub const SCNdPTR: &'static [u8; 3usize] = b"ld\0"; -pub const SCNiPTR: &'static [u8; 3usize] = b"li\0"; -pub const SCNoPTR: &'static [u8; 3usize] = b"lo\0"; -pub const SCNuPTR: &'static [u8; 3usize] = b"lu\0"; -pub const SCNxPTR: &'static [u8; 3usize] = b"lx\0"; -pub const GL_DEPTH_BUFFER_BIT: u32 = 256; -pub const GL_STENCIL_BUFFER_BIT: u32 = 1024; -pub const GL_COLOR_BUFFER_BIT: u32 = 16384; -pub const GL_FALSE: u32 = 0; -pub const GL_TRUE: u32 = 1; -pub const GL_POINTS: u32 = 0; -pub const GL_LINES: u32 = 1; -pub const GL_LINE_LOOP: u32 = 2; -pub const GL_LINE_STRIP: u32 = 3; -pub const GL_TRIANGLES: u32 = 4; -pub const GL_TRIANGLE_STRIP: u32 = 5; -pub const GL_TRIANGLE_FAN: u32 = 6; -pub const GL_NEVER: u32 = 512; -pub const GL_LESS: u32 = 513; -pub const GL_EQUAL: u32 = 514; -pub const GL_LEQUAL: u32 = 515; -pub const GL_GREATER: u32 = 516; -pub const GL_NOTEQUAL: u32 = 517; -pub const GL_GEQUAL: u32 = 518; -pub const GL_ALWAYS: u32 = 519; -pub const GL_ZERO: u32 = 0; -pub const GL_ONE: u32 = 1; -pub const GL_SRC_COLOR: u32 = 768; -pub const GL_ONE_MINUS_SRC_COLOR: u32 = 769; -pub const GL_SRC_ALPHA: u32 = 770; -pub const GL_ONE_MINUS_SRC_ALPHA: u32 = 771; -pub const GL_DST_ALPHA: u32 = 772; -pub const GL_ONE_MINUS_DST_ALPHA: u32 = 773; -pub const GL_DST_COLOR: u32 = 774; -pub const GL_ONE_MINUS_DST_COLOR: u32 = 775; -pub const GL_SRC_ALPHA_SATURATE: u32 = 776; -pub const GL_NONE: u32 = 0; -pub const GL_FRONT_LEFT: u32 = 1024; -pub const GL_FRONT_RIGHT: u32 = 1025; -pub const GL_BACK_LEFT: u32 = 1026; -pub const GL_BACK_RIGHT: u32 = 1027; -pub const GL_FRONT: u32 = 1028; -pub const GL_BACK: u32 = 1029; -pub const GL_LEFT: u32 = 1030; -pub const GL_RIGHT: u32 = 1031; -pub const GL_FRONT_AND_BACK: u32 = 1032; -pub const GL_NO_ERROR: u32 = 0; -pub const GL_INVALID_ENUM: u32 = 1280; -pub const GL_INVALID_VALUE: u32 = 1281; -pub const GL_INVALID_OPERATION: u32 = 1282; -pub const GL_OUT_OF_MEMORY: u32 = 1285; -pub const GL_CW: u32 = 2304; -pub const GL_CCW: u32 = 2305; -pub const GL_POINT_SIZE: u32 = 2833; -pub const GL_POINT_SIZE_RANGE: u32 = 2834; -pub const GL_POINT_SIZE_GRANULARITY: u32 = 2835; -pub const GL_LINE_SMOOTH: u32 = 2848; -pub const GL_LINE_WIDTH: u32 = 2849; -pub const GL_LINE_WIDTH_RANGE: u32 = 2850; -pub const GL_LINE_WIDTH_GRANULARITY: u32 = 2851; -pub const GL_POLYGON_MODE: u32 = 2880; -pub const GL_POLYGON_SMOOTH: u32 = 2881; -pub const GL_CULL_FACE: u32 = 2884; -pub const GL_CULL_FACE_MODE: u32 = 2885; -pub const GL_FRONT_FACE: u32 = 2886; -pub const GL_DEPTH_RANGE: u32 = 2928; -pub const GL_DEPTH_TEST: u32 = 2929; -pub const GL_DEPTH_WRITEMASK: u32 = 2930; -pub const GL_DEPTH_CLEAR_VALUE: u32 = 2931; -pub const GL_DEPTH_FUNC: u32 = 2932; -pub const GL_STENCIL_TEST: u32 = 2960; -pub const GL_STENCIL_CLEAR_VALUE: u32 = 2961; -pub const GL_STENCIL_FUNC: u32 = 2962; -pub const GL_STENCIL_VALUE_MASK: u32 = 2963; -pub const GL_STENCIL_FAIL: u32 = 2964; -pub const GL_STENCIL_PASS_DEPTH_FAIL: u32 = 2965; -pub const GL_STENCIL_PASS_DEPTH_PASS: u32 = 2966; -pub const GL_STENCIL_REF: u32 = 2967; -pub const GL_STENCIL_WRITEMASK: u32 = 2968; -pub const GL_VIEWPORT: u32 = 2978; -pub const GL_DITHER: u32 = 3024; -pub const GL_BLEND_DST: u32 = 3040; -pub const GL_BLEND_SRC: u32 = 3041; -pub const GL_BLEND: u32 = 3042; -pub const GL_LOGIC_OP_MODE: u32 = 3056; -pub const GL_COLOR_LOGIC_OP: u32 = 3058; -pub const GL_DRAW_BUFFER: u32 = 3073; -pub const GL_READ_BUFFER: u32 = 3074; -pub const GL_SCISSOR_BOX: u32 = 3088; -pub const GL_SCISSOR_TEST: u32 = 3089; -pub const GL_COLOR_CLEAR_VALUE: u32 = 3106; -pub const GL_COLOR_WRITEMASK: u32 = 3107; -pub const GL_DOUBLEBUFFER: u32 = 3122; -pub const GL_STEREO: u32 = 3123; -pub const GL_LINE_SMOOTH_HINT: u32 = 3154; -pub const GL_POLYGON_SMOOTH_HINT: u32 = 3155; -pub const GL_UNPACK_SWAP_BYTES: u32 = 3312; -pub const GL_UNPACK_LSB_FIRST: u32 = 3313; -pub const GL_UNPACK_ROW_LENGTH: u32 = 3314; -pub const GL_UNPACK_SKIP_ROWS: u32 = 3315; -pub const GL_UNPACK_SKIP_PIXELS: u32 = 3316; -pub const GL_UNPACK_ALIGNMENT: u32 = 3317; -pub const GL_PACK_SWAP_BYTES: u32 = 3328; -pub const GL_PACK_LSB_FIRST: u32 = 3329; -pub const GL_PACK_ROW_LENGTH: u32 = 3330; -pub const GL_PACK_SKIP_ROWS: u32 = 3331; -pub const GL_PACK_SKIP_PIXELS: u32 = 3332; -pub const GL_PACK_ALIGNMENT: u32 = 3333; -pub const GL_MAX_TEXTURE_SIZE: u32 = 3379; -pub const GL_MAX_VIEWPORT_DIMS: u32 = 3386; -pub const GL_SUBPIXEL_BITS: u32 = 3408; -pub const GL_TEXTURE_1D: u32 = 3552; -pub const GL_TEXTURE_2D: u32 = 3553; -pub const GL_POLYGON_OFFSET_UNITS: u32 = 10752; -pub const GL_POLYGON_OFFSET_POINT: u32 = 10753; -pub const GL_POLYGON_OFFSET_LINE: u32 = 10754; -pub const GL_POLYGON_OFFSET_FILL: u32 = 32823; -pub const GL_POLYGON_OFFSET_FACTOR: u32 = 32824; -pub const GL_TEXTURE_BINDING_1D: u32 = 32872; -pub const GL_TEXTURE_BINDING_2D: u32 = 32873; -pub const GL_TEXTURE_WIDTH: u32 = 4096; -pub const GL_TEXTURE_HEIGHT: u32 = 4097; -pub const GL_TEXTURE_INTERNAL_FORMAT: u32 = 4099; -pub const GL_TEXTURE_BORDER_COLOR: u32 = 4100; -pub const GL_TEXTURE_RED_SIZE: u32 = 32860; -pub const GL_TEXTURE_GREEN_SIZE: u32 = 32861; -pub const GL_TEXTURE_BLUE_SIZE: u32 = 32862; -pub const GL_TEXTURE_ALPHA_SIZE: u32 = 32863; -pub const GL_DONT_CARE: u32 = 4352; -pub const GL_FASTEST: u32 = 4353; -pub const GL_NICEST: u32 = 4354; -pub const GL_BYTE: u32 = 5120; -pub const GL_UNSIGNED_BYTE: u32 = 5121; -pub const GL_SHORT: u32 = 5122; -pub const GL_UNSIGNED_SHORT: u32 = 5123; -pub const GL_INT: u32 = 5124; -pub const GL_UNSIGNED_INT: u32 = 5125; -pub const GL_FLOAT: u32 = 5126; -pub const GL_DOUBLE: u32 = 5130; -pub const GL_CLEAR: u32 = 5376; -pub const GL_AND: u32 = 5377; -pub const GL_AND_REVERSE: u32 = 5378; -pub const GL_COPY: u32 = 5379; -pub const GL_AND_INVERTED: u32 = 5380; -pub const GL_NOOP: u32 = 5381; -pub const GL_XOR: u32 = 5382; -pub const GL_OR: u32 = 5383; -pub const GL_NOR: u32 = 5384; -pub const GL_EQUIV: u32 = 5385; -pub const GL_INVERT: u32 = 5386; -pub const GL_OR_REVERSE: u32 = 5387; -pub const GL_COPY_INVERTED: u32 = 5388; -pub const GL_OR_INVERTED: u32 = 5389; -pub const GL_NAND: u32 = 5390; -pub const GL_SET: u32 = 5391; -pub const GL_TEXTURE: u32 = 5890; -pub const GL_COLOR: u32 = 6144; -pub const GL_DEPTH: u32 = 6145; -pub const GL_STENCIL: u32 = 6146; -pub const GL_STENCIL_INDEX: u32 = 6401; -pub const GL_DEPTH_COMPONENT: u32 = 6402; -pub const GL_RED: u32 = 6403; -pub const GL_GREEN: u32 = 6404; -pub const GL_BLUE: u32 = 6405; -pub const GL_ALPHA: u32 = 6406; -pub const GL_RGB: u32 = 6407; -pub const GL_RGBA: u32 = 6408; -pub const GL_POINT: u32 = 6912; -pub const GL_LINE: u32 = 6913; -pub const GL_FILL: u32 = 6914; -pub const GL_KEEP: u32 = 7680; -pub const GL_REPLACE: u32 = 7681; -pub const GL_INCR: u32 = 7682; -pub const GL_DECR: u32 = 7683; -pub const GL_VENDOR: u32 = 7936; -pub const GL_RENDERER: u32 = 7937; -pub const GL_VERSION: u32 = 7938; -pub const GL_EXTENSIONS: u32 = 7939; -pub const GL_NEAREST: u32 = 9728; -pub const GL_LINEAR: u32 = 9729; -pub const GL_NEAREST_MIPMAP_NEAREST: u32 = 9984; -pub const GL_LINEAR_MIPMAP_NEAREST: u32 = 9985; -pub const GL_NEAREST_MIPMAP_LINEAR: u32 = 9986; -pub const GL_LINEAR_MIPMAP_LINEAR: u32 = 9987; -pub const GL_TEXTURE_MAG_FILTER: u32 = 10240; -pub const GL_TEXTURE_MIN_FILTER: u32 = 10241; -pub const GL_TEXTURE_WRAP_S: u32 = 10242; -pub const GL_TEXTURE_WRAP_T: u32 = 10243; -pub const GL_PROXY_TEXTURE_1D: u32 = 32867; -pub const GL_PROXY_TEXTURE_2D: u32 = 32868; -pub const GL_REPEAT: u32 = 10497; -pub const GL_R3_G3_B2: u32 = 10768; -pub const GL_RGB4: u32 = 32847; -pub const GL_RGB5: u32 = 32848; -pub const GL_RGB8: u32 = 32849; -pub const GL_RGB10: u32 = 32850; -pub const GL_RGB12: u32 = 32851; -pub const GL_RGB16: u32 = 32852; -pub const GL_RGBA2: u32 = 32853; -pub const GL_RGBA4: u32 = 32854; -pub const GL_RGB5_A1: u32 = 32855; -pub const GL_RGBA8: u32 = 32856; -pub const GL_RGB10_A2: u32 = 32857; -pub const GL_RGBA12: u32 = 32858; -pub const GL_RGBA16: u32 = 32859; -pub const GL_UNSIGNED_BYTE_3_3_2: u32 = 32818; -pub const GL_UNSIGNED_SHORT_4_4_4_4: u32 = 32819; -pub const GL_UNSIGNED_SHORT_5_5_5_1: u32 = 32820; -pub const GL_UNSIGNED_INT_8_8_8_8: u32 = 32821; -pub const GL_UNSIGNED_INT_10_10_10_2: u32 = 32822; -pub const GL_TEXTURE_BINDING_3D: u32 = 32874; -pub const GL_PACK_SKIP_IMAGES: u32 = 32875; -pub const GL_PACK_IMAGE_HEIGHT: u32 = 32876; -pub const GL_UNPACK_SKIP_IMAGES: u32 = 32877; -pub const GL_UNPACK_IMAGE_HEIGHT: u32 = 32878; -pub const GL_TEXTURE_3D: u32 = 32879; -pub const GL_PROXY_TEXTURE_3D: u32 = 32880; -pub const GL_TEXTURE_DEPTH: u32 = 32881; -pub const GL_TEXTURE_WRAP_R: u32 = 32882; -pub const GL_MAX_3D_TEXTURE_SIZE: u32 = 32883; -pub const GL_UNSIGNED_BYTE_2_3_3_REV: u32 = 33634; -pub const GL_UNSIGNED_SHORT_5_6_5: u32 = 33635; -pub const GL_UNSIGNED_SHORT_5_6_5_REV: u32 = 33636; -pub const GL_UNSIGNED_SHORT_4_4_4_4_REV: u32 = 33637; -pub const GL_UNSIGNED_SHORT_1_5_5_5_REV: u32 = 33638; -pub const GL_UNSIGNED_INT_8_8_8_8_REV: u32 = 33639; -pub const GL_UNSIGNED_INT_2_10_10_10_REV: u32 = 33640; -pub const GL_BGR: u32 = 32992; -pub const GL_BGRA: u32 = 32993; -pub const GL_MAX_ELEMENTS_VERTICES: u32 = 33000; -pub const GL_MAX_ELEMENTS_INDICES: u32 = 33001; -pub const GL_CLAMP_TO_EDGE: u32 = 33071; -pub const GL_TEXTURE_MIN_LOD: u32 = 33082; -pub const GL_TEXTURE_MAX_LOD: u32 = 33083; -pub const GL_TEXTURE_BASE_LEVEL: u32 = 33084; -pub const GL_TEXTURE_MAX_LEVEL: u32 = 33085; -pub const GL_SMOOTH_POINT_SIZE_RANGE: u32 = 2834; -pub const GL_SMOOTH_POINT_SIZE_GRANULARITY: u32 = 2835; -pub const GL_SMOOTH_LINE_WIDTH_RANGE: u32 = 2850; -pub const GL_SMOOTH_LINE_WIDTH_GRANULARITY: u32 = 2851; -pub const GL_ALIASED_LINE_WIDTH_RANGE: u32 = 33902; -pub const GL_TEXTURE0: u32 = 33984; -pub const GL_TEXTURE1: u32 = 33985; -pub const GL_TEXTURE2: u32 = 33986; -pub const GL_TEXTURE3: u32 = 33987; -pub const GL_TEXTURE4: u32 = 33988; -pub const GL_TEXTURE5: u32 = 33989; -pub const GL_TEXTURE6: u32 = 33990; -pub const GL_TEXTURE7: u32 = 33991; -pub const GL_TEXTURE8: u32 = 33992; -pub const GL_TEXTURE9: u32 = 33993; -pub const GL_TEXTURE10: u32 = 33994; -pub const GL_TEXTURE11: u32 = 33995; -pub const GL_TEXTURE12: u32 = 33996; -pub const GL_TEXTURE13: u32 = 33997; -pub const GL_TEXTURE14: u32 = 33998; -pub const GL_TEXTURE15: u32 = 33999; -pub const GL_TEXTURE16: u32 = 34000; -pub const GL_TEXTURE17: u32 = 34001; -pub const GL_TEXTURE18: u32 = 34002; -pub const GL_TEXTURE19: u32 = 34003; -pub const GL_TEXTURE20: u32 = 34004; -pub const GL_TEXTURE21: u32 = 34005; -pub const GL_TEXTURE22: u32 = 34006; -pub const GL_TEXTURE23: u32 = 34007; -pub const GL_TEXTURE24: u32 = 34008; -pub const GL_TEXTURE25: u32 = 34009; -pub const GL_TEXTURE26: u32 = 34010; -pub const GL_TEXTURE27: u32 = 34011; -pub const GL_TEXTURE28: u32 = 34012; -pub const GL_TEXTURE29: u32 = 34013; -pub const GL_TEXTURE30: u32 = 34014; -pub const GL_TEXTURE31: u32 = 34015; -pub const GL_ACTIVE_TEXTURE: u32 = 34016; -pub const GL_MULTISAMPLE: u32 = 32925; -pub const GL_SAMPLE_ALPHA_TO_COVERAGE: u32 = 32926; -pub const GL_SAMPLE_ALPHA_TO_ONE: u32 = 32927; -pub const GL_SAMPLE_COVERAGE: u32 = 32928; -pub const GL_SAMPLE_BUFFERS: u32 = 32936; -pub const GL_SAMPLES: u32 = 32937; -pub const GL_SAMPLE_COVERAGE_VALUE: u32 = 32938; -pub const GL_SAMPLE_COVERAGE_INVERT: u32 = 32939; -pub const GL_TEXTURE_CUBE_MAP: u32 = 34067; -pub const GL_TEXTURE_BINDING_CUBE_MAP: u32 = 34068; -pub const GL_TEXTURE_CUBE_MAP_POSITIVE_X: u32 = 34069; -pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_X: u32 = 34070; -pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Y: u32 = 34071; -pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: u32 = 34072; -pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Z: u32 = 34073; -pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: u32 = 34074; -pub const GL_PROXY_TEXTURE_CUBE_MAP: u32 = 34075; -pub const GL_MAX_CUBE_MAP_TEXTURE_SIZE: u32 = 34076; -pub const GL_COMPRESSED_RGB: u32 = 34029; -pub const GL_COMPRESSED_RGBA: u32 = 34030; -pub const GL_TEXTURE_COMPRESSION_HINT: u32 = 34031; -pub const GL_TEXTURE_COMPRESSED_IMAGE_SIZE: u32 = 34464; -pub const GL_TEXTURE_COMPRESSED: u32 = 34465; -pub const GL_NUM_COMPRESSED_TEXTURE_FORMATS: u32 = 34466; -pub const GL_COMPRESSED_TEXTURE_FORMATS: u32 = 34467; -pub const GL_CLAMP_TO_BORDER: u32 = 33069; -pub const GL_BLEND_DST_RGB: u32 = 32968; -pub const GL_BLEND_SRC_RGB: u32 = 32969; -pub const GL_BLEND_DST_ALPHA: u32 = 32970; -pub const GL_BLEND_SRC_ALPHA: u32 = 32971; -pub const GL_POINT_FADE_THRESHOLD_SIZE: u32 = 33064; -pub const GL_DEPTH_COMPONENT16: u32 = 33189; -pub const GL_DEPTH_COMPONENT24: u32 = 33190; -pub const GL_DEPTH_COMPONENT32: u32 = 33191; -pub const GL_MIRRORED_REPEAT: u32 = 33648; -pub const GL_MAX_TEXTURE_LOD_BIAS: u32 = 34045; -pub const GL_TEXTURE_LOD_BIAS: u32 = 34049; -pub const GL_INCR_WRAP: u32 = 34055; -pub const GL_DECR_WRAP: u32 = 34056; -pub const GL_TEXTURE_DEPTH_SIZE: u32 = 34890; -pub const GL_TEXTURE_COMPARE_MODE: u32 = 34892; -pub const GL_TEXTURE_COMPARE_FUNC: u32 = 34893; -pub const GL_FUNC_ADD: u32 = 32774; -pub const GL_FUNC_SUBTRACT: u32 = 32778; -pub const GL_FUNC_REVERSE_SUBTRACT: u32 = 32779; -pub const GL_MIN: u32 = 32775; -pub const GL_MAX: u32 = 32776; -pub const GL_CONSTANT_COLOR: u32 = 32769; -pub const GL_ONE_MINUS_CONSTANT_COLOR: u32 = 32770; -pub const GL_CONSTANT_ALPHA: u32 = 32771; -pub const GL_ONE_MINUS_CONSTANT_ALPHA: u32 = 32772; -pub const GL_BUFFER_SIZE: u32 = 34660; -pub const GL_BUFFER_USAGE: u32 = 34661; -pub const GL_QUERY_COUNTER_BITS: u32 = 34916; -pub const GL_CURRENT_QUERY: u32 = 34917; -pub const GL_QUERY_RESULT: u32 = 34918; -pub const GL_QUERY_RESULT_AVAILABLE: u32 = 34919; -pub const GL_ARRAY_BUFFER: u32 = 34962; -pub const GL_ELEMENT_ARRAY_BUFFER: u32 = 34963; -pub const GL_ARRAY_BUFFER_BINDING: u32 = 34964; -pub const GL_ELEMENT_ARRAY_BUFFER_BINDING: u32 = 34965; -pub const GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: u32 = 34975; -pub const GL_READ_ONLY: u32 = 35000; -pub const GL_WRITE_ONLY: u32 = 35001; -pub const GL_READ_WRITE: u32 = 35002; -pub const GL_BUFFER_ACCESS: u32 = 35003; -pub const GL_BUFFER_MAPPED: u32 = 35004; -pub const GL_BUFFER_MAP_POINTER: u32 = 35005; -pub const GL_STREAM_DRAW: u32 = 35040; -pub const GL_STREAM_READ: u32 = 35041; -pub const GL_STREAM_COPY: u32 = 35042; -pub const GL_STATIC_DRAW: u32 = 35044; -pub const GL_STATIC_READ: u32 = 35045; -pub const GL_STATIC_COPY: u32 = 35046; -pub const GL_DYNAMIC_DRAW: u32 = 35048; -pub const GL_DYNAMIC_READ: u32 = 35049; -pub const GL_DYNAMIC_COPY: u32 = 35050; -pub const GL_SAMPLES_PASSED: u32 = 35092; -pub const GL_SRC1_ALPHA: u32 = 34185; -pub const GL_BLEND_EQUATION_RGB: u32 = 32777; -pub const GL_VERTEX_ATTRIB_ARRAY_ENABLED: u32 = 34338; -pub const GL_VERTEX_ATTRIB_ARRAY_SIZE: u32 = 34339; -pub const GL_VERTEX_ATTRIB_ARRAY_STRIDE: u32 = 34340; -pub const GL_VERTEX_ATTRIB_ARRAY_TYPE: u32 = 34341; -pub const GL_CURRENT_VERTEX_ATTRIB: u32 = 34342; -pub const GL_VERTEX_PROGRAM_POINT_SIZE: u32 = 34370; -pub const GL_VERTEX_ATTRIB_ARRAY_POINTER: u32 = 34373; -pub const GL_STENCIL_BACK_FUNC: u32 = 34816; -pub const GL_STENCIL_BACK_FAIL: u32 = 34817; -pub const GL_STENCIL_BACK_PASS_DEPTH_FAIL: u32 = 34818; -pub const GL_STENCIL_BACK_PASS_DEPTH_PASS: u32 = 34819; -pub const GL_MAX_DRAW_BUFFERS: u32 = 34852; -pub const GL_DRAW_BUFFER0: u32 = 34853; -pub const GL_DRAW_BUFFER1: u32 = 34854; -pub const GL_DRAW_BUFFER2: u32 = 34855; -pub const GL_DRAW_BUFFER3: u32 = 34856; -pub const GL_DRAW_BUFFER4: u32 = 34857; -pub const GL_DRAW_BUFFER5: u32 = 34858; -pub const GL_DRAW_BUFFER6: u32 = 34859; -pub const GL_DRAW_BUFFER7: u32 = 34860; -pub const GL_DRAW_BUFFER8: u32 = 34861; -pub const GL_DRAW_BUFFER9: u32 = 34862; -pub const GL_DRAW_BUFFER10: u32 = 34863; -pub const GL_DRAW_BUFFER11: u32 = 34864; -pub const GL_DRAW_BUFFER12: u32 = 34865; -pub const GL_DRAW_BUFFER13: u32 = 34866; -pub const GL_DRAW_BUFFER14: u32 = 34867; -pub const GL_DRAW_BUFFER15: u32 = 34868; -pub const GL_BLEND_EQUATION_ALPHA: u32 = 34877; -pub const GL_MAX_VERTEX_ATTRIBS: u32 = 34921; -pub const GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: u32 = 34922; -pub const GL_MAX_TEXTURE_IMAGE_UNITS: u32 = 34930; -pub const GL_FRAGMENT_SHADER: u32 = 35632; -pub const GL_VERTEX_SHADER: u32 = 35633; -pub const GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: u32 = 35657; -pub const GL_MAX_VERTEX_UNIFORM_COMPONENTS: u32 = 35658; -pub const GL_MAX_VARYING_FLOATS: u32 = 35659; -pub const GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: u32 = 35660; -pub const GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: u32 = 35661; -pub const GL_SHADER_TYPE: u32 = 35663; -pub const GL_FLOAT_VEC2: u32 = 35664; -pub const GL_FLOAT_VEC3: u32 = 35665; -pub const GL_FLOAT_VEC4: u32 = 35666; -pub const GL_INT_VEC2: u32 = 35667; -pub const GL_INT_VEC3: u32 = 35668; -pub const GL_INT_VEC4: u32 = 35669; -pub const GL_BOOL: u32 = 35670; -pub const GL_BOOL_VEC2: u32 = 35671; -pub const GL_BOOL_VEC3: u32 = 35672; -pub const GL_BOOL_VEC4: u32 = 35673; -pub const GL_FLOAT_MAT2: u32 = 35674; -pub const GL_FLOAT_MAT3: u32 = 35675; -pub const GL_FLOAT_MAT4: u32 = 35676; -pub const GL_SAMPLER_1D: u32 = 35677; -pub const GL_SAMPLER_2D: u32 = 35678; -pub const GL_SAMPLER_3D: u32 = 35679; -pub const GL_SAMPLER_CUBE: u32 = 35680; -pub const GL_SAMPLER_1D_SHADOW: u32 = 35681; -pub const GL_SAMPLER_2D_SHADOW: u32 = 35682; -pub const GL_DELETE_STATUS: u32 = 35712; -pub const GL_COMPILE_STATUS: u32 = 35713; -pub const GL_LINK_STATUS: u32 = 35714; -pub const GL_VALIDATE_STATUS: u32 = 35715; -pub const GL_INFO_LOG_LENGTH: u32 = 35716; -pub const GL_ATTACHED_SHADERS: u32 = 35717; -pub const GL_ACTIVE_UNIFORMS: u32 = 35718; -pub const GL_ACTIVE_UNIFORM_MAX_LENGTH: u32 = 35719; -pub const GL_SHADER_SOURCE_LENGTH: u32 = 35720; -pub const GL_ACTIVE_ATTRIBUTES: u32 = 35721; -pub const GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: u32 = 35722; -pub const GL_FRAGMENT_SHADER_DERIVATIVE_HINT: u32 = 35723; -pub const GL_SHADING_LANGUAGE_VERSION: u32 = 35724; -pub const GL_CURRENT_PROGRAM: u32 = 35725; -pub const GL_POINT_SPRITE_COORD_ORIGIN: u32 = 36000; -pub const GL_LOWER_LEFT: u32 = 36001; -pub const GL_UPPER_LEFT: u32 = 36002; -pub const GL_STENCIL_BACK_REF: u32 = 36003; -pub const GL_STENCIL_BACK_VALUE_MASK: u32 = 36004; -pub const GL_STENCIL_BACK_WRITEMASK: u32 = 36005; -pub const GL_PIXEL_PACK_BUFFER: u32 = 35051; -pub const GL_PIXEL_UNPACK_BUFFER: u32 = 35052; -pub const GL_PIXEL_PACK_BUFFER_BINDING: u32 = 35053; -pub const GL_PIXEL_UNPACK_BUFFER_BINDING: u32 = 35055; -pub const GL_FLOAT_MAT2x3: u32 = 35685; -pub const GL_FLOAT_MAT2x4: u32 = 35686; -pub const GL_FLOAT_MAT3x2: u32 = 35687; -pub const GL_FLOAT_MAT3x4: u32 = 35688; -pub const GL_FLOAT_MAT4x2: u32 = 35689; -pub const GL_FLOAT_MAT4x3: u32 = 35690; -pub const GL_SRGB: u32 = 35904; -pub const GL_SRGB8: u32 = 35905; -pub const GL_SRGB_ALPHA: u32 = 35906; -pub const GL_SRGB8_ALPHA8: u32 = 35907; -pub const GL_COMPRESSED_SRGB: u32 = 35912; -pub const GL_COMPRESSED_SRGB_ALPHA: u32 = 35913; -pub const GL_COMPARE_REF_TO_TEXTURE: u32 = 34894; -pub const GL_CLIP_DISTANCE0: u32 = 12288; -pub const GL_CLIP_DISTANCE1: u32 = 12289; -pub const GL_CLIP_DISTANCE2: u32 = 12290; -pub const GL_CLIP_DISTANCE3: u32 = 12291; -pub const GL_CLIP_DISTANCE4: u32 = 12292; -pub const GL_CLIP_DISTANCE5: u32 = 12293; -pub const GL_CLIP_DISTANCE6: u32 = 12294; -pub const GL_CLIP_DISTANCE7: u32 = 12295; -pub const GL_MAX_CLIP_DISTANCES: u32 = 3378; -pub const GL_MAJOR_VERSION: u32 = 33307; -pub const GL_MINOR_VERSION: u32 = 33308; -pub const GL_NUM_EXTENSIONS: u32 = 33309; -pub const GL_CONTEXT_FLAGS: u32 = 33310; -pub const GL_COMPRESSED_RED: u32 = 33317; -pub const GL_COMPRESSED_RG: u32 = 33318; -pub const GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT: u32 = 1; -pub const GL_RGBA32F: u32 = 34836; -pub const GL_RGB32F: u32 = 34837; -pub const GL_RGBA16F: u32 = 34842; -pub const GL_RGB16F: u32 = 34843; -pub const GL_VERTEX_ATTRIB_ARRAY_INTEGER: u32 = 35069; -pub const GL_MAX_ARRAY_TEXTURE_LAYERS: u32 = 35071; -pub const GL_MIN_PROGRAM_TEXEL_OFFSET: u32 = 35076; -pub const GL_MAX_PROGRAM_TEXEL_OFFSET: u32 = 35077; -pub const GL_CLAMP_READ_COLOR: u32 = 35100; -pub const GL_FIXED_ONLY: u32 = 35101; -pub const GL_MAX_VARYING_COMPONENTS: u32 = 35659; -pub const GL_TEXTURE_1D_ARRAY: u32 = 35864; -pub const GL_PROXY_TEXTURE_1D_ARRAY: u32 = 35865; -pub const GL_TEXTURE_2D_ARRAY: u32 = 35866; -pub const GL_PROXY_TEXTURE_2D_ARRAY: u32 = 35867; -pub const GL_TEXTURE_BINDING_1D_ARRAY: u32 = 35868; -pub const GL_TEXTURE_BINDING_2D_ARRAY: u32 = 35869; -pub const GL_R11F_G11F_B10F: u32 = 35898; -pub const GL_UNSIGNED_INT_10F_11F_11F_REV: u32 = 35899; -pub const GL_RGB9_E5: u32 = 35901; -pub const GL_UNSIGNED_INT_5_9_9_9_REV: u32 = 35902; -pub const GL_TEXTURE_SHARED_SIZE: u32 = 35903; -pub const GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: u32 = 35958; -pub const GL_TRANSFORM_FEEDBACK_BUFFER_MODE: u32 = 35967; -pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: u32 = 35968; -pub const GL_TRANSFORM_FEEDBACK_VARYINGS: u32 = 35971; -pub const GL_TRANSFORM_FEEDBACK_BUFFER_START: u32 = 35972; -pub const GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: u32 = 35973; -pub const GL_PRIMITIVES_GENERATED: u32 = 35975; -pub const GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: u32 = 35976; -pub const GL_RASTERIZER_DISCARD: u32 = 35977; -pub const GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: u32 = 35978; -pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: u32 = 35979; -pub const GL_INTERLEAVED_ATTRIBS: u32 = 35980; -pub const GL_SEPARATE_ATTRIBS: u32 = 35981; -pub const GL_TRANSFORM_FEEDBACK_BUFFER: u32 = 35982; -pub const GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: u32 = 35983; -pub const GL_RGBA32UI: u32 = 36208; -pub const GL_RGB32UI: u32 = 36209; -pub const GL_RGBA16UI: u32 = 36214; -pub const GL_RGB16UI: u32 = 36215; -pub const GL_RGBA8UI: u32 = 36220; -pub const GL_RGB8UI: u32 = 36221; -pub const GL_RGBA32I: u32 = 36226; -pub const GL_RGB32I: u32 = 36227; -pub const GL_RGBA16I: u32 = 36232; -pub const GL_RGB16I: u32 = 36233; -pub const GL_RGBA8I: u32 = 36238; -pub const GL_RGB8I: u32 = 36239; -pub const GL_RED_INTEGER: u32 = 36244; -pub const GL_GREEN_INTEGER: u32 = 36245; -pub const GL_BLUE_INTEGER: u32 = 36246; -pub const GL_RGB_INTEGER: u32 = 36248; -pub const GL_RGBA_INTEGER: u32 = 36249; -pub const GL_BGR_INTEGER: u32 = 36250; -pub const GL_BGRA_INTEGER: u32 = 36251; -pub const GL_SAMPLER_1D_ARRAY: u32 = 36288; -pub const GL_SAMPLER_2D_ARRAY: u32 = 36289; -pub const GL_SAMPLER_1D_ARRAY_SHADOW: u32 = 36291; -pub const GL_SAMPLER_2D_ARRAY_SHADOW: u32 = 36292; -pub const GL_SAMPLER_CUBE_SHADOW: u32 = 36293; -pub const GL_UNSIGNED_INT_VEC2: u32 = 36294; -pub const GL_UNSIGNED_INT_VEC3: u32 = 36295; -pub const GL_UNSIGNED_INT_VEC4: u32 = 36296; -pub const GL_INT_SAMPLER_1D: u32 = 36297; -pub const GL_INT_SAMPLER_2D: u32 = 36298; -pub const GL_INT_SAMPLER_3D: u32 = 36299; -pub const GL_INT_SAMPLER_CUBE: u32 = 36300; -pub const GL_INT_SAMPLER_1D_ARRAY: u32 = 36302; -pub const GL_INT_SAMPLER_2D_ARRAY: u32 = 36303; -pub const GL_UNSIGNED_INT_SAMPLER_1D: u32 = 36305; -pub const GL_UNSIGNED_INT_SAMPLER_2D: u32 = 36306; -pub const GL_UNSIGNED_INT_SAMPLER_3D: u32 = 36307; -pub const GL_UNSIGNED_INT_SAMPLER_CUBE: u32 = 36308; -pub const GL_UNSIGNED_INT_SAMPLER_1D_ARRAY: u32 = 36310; -pub const GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: u32 = 36311; -pub const GL_QUERY_WAIT: u32 = 36371; -pub const GL_QUERY_NO_WAIT: u32 = 36372; -pub const GL_QUERY_BY_REGION_WAIT: u32 = 36373; -pub const GL_QUERY_BY_REGION_NO_WAIT: u32 = 36374; -pub const GL_BUFFER_ACCESS_FLAGS: u32 = 37151; -pub const GL_BUFFER_MAP_LENGTH: u32 = 37152; -pub const GL_BUFFER_MAP_OFFSET: u32 = 37153; -pub const GL_DEPTH_COMPONENT32F: u32 = 36012; -pub const GL_DEPTH32F_STENCIL8: u32 = 36013; -pub const GL_FLOAT_32_UNSIGNED_INT_24_8_REV: u32 = 36269; -pub const GL_INVALID_FRAMEBUFFER_OPERATION: u32 = 1286; -pub const GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: u32 = 33296; -pub const GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: u32 = 33297; -pub const GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: u32 = 33298; -pub const GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: u32 = 33299; -pub const GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: u32 = 33300; -pub const GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: u32 = 33301; -pub const GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: u32 = 33302; -pub const GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: u32 = 33303; -pub const GL_FRAMEBUFFER_DEFAULT: u32 = 33304; -pub const GL_FRAMEBUFFER_UNDEFINED: u32 = 33305; -pub const GL_DEPTH_STENCIL_ATTACHMENT: u32 = 33306; -pub const GL_MAX_RENDERBUFFER_SIZE: u32 = 34024; -pub const GL_DEPTH_STENCIL: u32 = 34041; -pub const GL_UNSIGNED_INT_24_8: u32 = 34042; -pub const GL_DEPTH24_STENCIL8: u32 = 35056; -pub const GL_TEXTURE_STENCIL_SIZE: u32 = 35057; -pub const GL_TEXTURE_RED_TYPE: u32 = 35856; -pub const GL_TEXTURE_GREEN_TYPE: u32 = 35857; -pub const GL_TEXTURE_BLUE_TYPE: u32 = 35858; -pub const GL_TEXTURE_ALPHA_TYPE: u32 = 35859; -pub const GL_TEXTURE_DEPTH_TYPE: u32 = 35862; -pub const GL_UNSIGNED_NORMALIZED: u32 = 35863; -pub const GL_FRAMEBUFFER_BINDING: u32 = 36006; -pub const GL_DRAW_FRAMEBUFFER_BINDING: u32 = 36006; -pub const GL_RENDERBUFFER_BINDING: u32 = 36007; -pub const GL_READ_FRAMEBUFFER: u32 = 36008; -pub const GL_DRAW_FRAMEBUFFER: u32 = 36009; -pub const GL_READ_FRAMEBUFFER_BINDING: u32 = 36010; -pub const GL_RENDERBUFFER_SAMPLES: u32 = 36011; -pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: u32 = 36048; -pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: u32 = 36049; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: u32 = 36050; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: u32 = 36051; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: u32 = 36052; -pub const GL_FRAMEBUFFER_COMPLETE: u32 = 36053; -pub const GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: u32 = 36054; -pub const GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: u32 = 36055; -pub const GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: u32 = 36059; -pub const GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: u32 = 36060; -pub const GL_FRAMEBUFFER_UNSUPPORTED: u32 = 36061; -pub const GL_MAX_COLOR_ATTACHMENTS: u32 = 36063; -pub const GL_COLOR_ATTACHMENT0: u32 = 36064; -pub const GL_COLOR_ATTACHMENT1: u32 = 36065; -pub const GL_COLOR_ATTACHMENT2: u32 = 36066; -pub const GL_COLOR_ATTACHMENT3: u32 = 36067; -pub const GL_COLOR_ATTACHMENT4: u32 = 36068; -pub const GL_COLOR_ATTACHMENT5: u32 = 36069; -pub const GL_COLOR_ATTACHMENT6: u32 = 36070; -pub const GL_COLOR_ATTACHMENT7: u32 = 36071; -pub const GL_COLOR_ATTACHMENT8: u32 = 36072; -pub const GL_COLOR_ATTACHMENT9: u32 = 36073; -pub const GL_COLOR_ATTACHMENT10: u32 = 36074; -pub const GL_COLOR_ATTACHMENT11: u32 = 36075; -pub const GL_COLOR_ATTACHMENT12: u32 = 36076; -pub const GL_COLOR_ATTACHMENT13: u32 = 36077; -pub const GL_COLOR_ATTACHMENT14: u32 = 36078; -pub const GL_COLOR_ATTACHMENT15: u32 = 36079; -pub const GL_COLOR_ATTACHMENT16: u32 = 36080; -pub const GL_COLOR_ATTACHMENT17: u32 = 36081; -pub const GL_COLOR_ATTACHMENT18: u32 = 36082; -pub const GL_COLOR_ATTACHMENT19: u32 = 36083; -pub const GL_COLOR_ATTACHMENT20: u32 = 36084; -pub const GL_COLOR_ATTACHMENT21: u32 = 36085; -pub const GL_COLOR_ATTACHMENT22: u32 = 36086; -pub const GL_COLOR_ATTACHMENT23: u32 = 36087; -pub const GL_COLOR_ATTACHMENT24: u32 = 36088; -pub const GL_COLOR_ATTACHMENT25: u32 = 36089; -pub const GL_COLOR_ATTACHMENT26: u32 = 36090; -pub const GL_COLOR_ATTACHMENT27: u32 = 36091; -pub const GL_COLOR_ATTACHMENT28: u32 = 36092; -pub const GL_COLOR_ATTACHMENT29: u32 = 36093; -pub const GL_COLOR_ATTACHMENT30: u32 = 36094; -pub const GL_COLOR_ATTACHMENT31: u32 = 36095; -pub const GL_DEPTH_ATTACHMENT: u32 = 36096; -pub const GL_STENCIL_ATTACHMENT: u32 = 36128; -pub const GL_FRAMEBUFFER: u32 = 36160; -pub const GL_RENDERBUFFER: u32 = 36161; -pub const GL_RENDERBUFFER_WIDTH: u32 = 36162; -pub const GL_RENDERBUFFER_HEIGHT: u32 = 36163; -pub const GL_RENDERBUFFER_INTERNAL_FORMAT: u32 = 36164; -pub const GL_STENCIL_INDEX1: u32 = 36166; -pub const GL_STENCIL_INDEX4: u32 = 36167; -pub const GL_STENCIL_INDEX8: u32 = 36168; -pub const GL_STENCIL_INDEX16: u32 = 36169; -pub const GL_RENDERBUFFER_RED_SIZE: u32 = 36176; -pub const GL_RENDERBUFFER_GREEN_SIZE: u32 = 36177; -pub const GL_RENDERBUFFER_BLUE_SIZE: u32 = 36178; -pub const GL_RENDERBUFFER_ALPHA_SIZE: u32 = 36179; -pub const GL_RENDERBUFFER_DEPTH_SIZE: u32 = 36180; -pub const GL_RENDERBUFFER_STENCIL_SIZE: u32 = 36181; -pub const GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: u32 = 36182; -pub const GL_MAX_SAMPLES: u32 = 36183; -pub const GL_INDEX: u32 = 33314; -pub const GL_FRAMEBUFFER_SRGB: u32 = 36281; -pub const GL_HALF_FLOAT: u32 = 5131; -pub const GL_MAP_READ_BIT: u32 = 1; -pub const GL_MAP_WRITE_BIT: u32 = 2; -pub const GL_MAP_INVALIDATE_RANGE_BIT: u32 = 4; -pub const GL_MAP_INVALIDATE_BUFFER_BIT: u32 = 8; -pub const GL_MAP_FLUSH_EXPLICIT_BIT: u32 = 16; -pub const GL_MAP_UNSYNCHRONIZED_BIT: u32 = 32; -pub const GL_COMPRESSED_RED_RGTC1: u32 = 36283; -pub const GL_COMPRESSED_SIGNED_RED_RGTC1: u32 = 36284; -pub const GL_COMPRESSED_RG_RGTC2: u32 = 36285; -pub const GL_COMPRESSED_SIGNED_RG_RGTC2: u32 = 36286; -pub const GL_RG: u32 = 33319; -pub const GL_RG_INTEGER: u32 = 33320; -pub const GL_R8: u32 = 33321; -pub const GL_R16: u32 = 33322; -pub const GL_RG8: u32 = 33323; -pub const GL_RG16: u32 = 33324; -pub const GL_R16F: u32 = 33325; -pub const GL_R32F: u32 = 33326; -pub const GL_RG16F: u32 = 33327; -pub const GL_RG32F: u32 = 33328; -pub const GL_R8I: u32 = 33329; -pub const GL_R8UI: u32 = 33330; -pub const GL_R16I: u32 = 33331; -pub const GL_R16UI: u32 = 33332; -pub const GL_R32I: u32 = 33333; -pub const GL_R32UI: u32 = 33334; -pub const GL_RG8I: u32 = 33335; -pub const GL_RG8UI: u32 = 33336; -pub const GL_RG16I: u32 = 33337; -pub const GL_RG16UI: u32 = 33338; -pub const GL_RG32I: u32 = 33339; -pub const GL_RG32UI: u32 = 33340; -pub const GL_VERTEX_ARRAY_BINDING: u32 = 34229; -pub const GL_SAMPLER_2D_RECT: u32 = 35683; -pub const GL_SAMPLER_2D_RECT_SHADOW: u32 = 35684; -pub const GL_SAMPLER_BUFFER: u32 = 36290; -pub const GL_INT_SAMPLER_2D_RECT: u32 = 36301; -pub const GL_INT_SAMPLER_BUFFER: u32 = 36304; -pub const GL_UNSIGNED_INT_SAMPLER_2D_RECT: u32 = 36309; -pub const GL_UNSIGNED_INT_SAMPLER_BUFFER: u32 = 36312; -pub const GL_TEXTURE_BUFFER: u32 = 35882; -pub const GL_MAX_TEXTURE_BUFFER_SIZE: u32 = 35883; -pub const GL_TEXTURE_BINDING_BUFFER: u32 = 35884; -pub const GL_TEXTURE_BUFFER_DATA_STORE_BINDING: u32 = 35885; -pub const GL_TEXTURE_RECTANGLE: u32 = 34037; -pub const GL_TEXTURE_BINDING_RECTANGLE: u32 = 34038; -pub const GL_PROXY_TEXTURE_RECTANGLE: u32 = 34039; -pub const GL_MAX_RECTANGLE_TEXTURE_SIZE: u32 = 34040; -pub const GL_R8_SNORM: u32 = 36756; -pub const GL_RG8_SNORM: u32 = 36757; -pub const GL_RGB8_SNORM: u32 = 36758; -pub const GL_RGBA8_SNORM: u32 = 36759; -pub const GL_R16_SNORM: u32 = 36760; -pub const GL_RG16_SNORM: u32 = 36761; -pub const GL_RGB16_SNORM: u32 = 36762; -pub const GL_RGBA16_SNORM: u32 = 36763; -pub const GL_SIGNED_NORMALIZED: u32 = 36764; -pub const GL_PRIMITIVE_RESTART: u32 = 36765; -pub const GL_PRIMITIVE_RESTART_INDEX: u32 = 36766; -pub const GL_COPY_READ_BUFFER: u32 = 36662; -pub const GL_COPY_WRITE_BUFFER: u32 = 36663; -pub const GL_UNIFORM_BUFFER: u32 = 35345; -pub const GL_UNIFORM_BUFFER_BINDING: u32 = 35368; -pub const GL_UNIFORM_BUFFER_START: u32 = 35369; -pub const GL_UNIFORM_BUFFER_SIZE: u32 = 35370; -pub const GL_MAX_VERTEX_UNIFORM_BLOCKS: u32 = 35371; -pub const GL_MAX_GEOMETRY_UNIFORM_BLOCKS: u32 = 35372; -pub const GL_MAX_FRAGMENT_UNIFORM_BLOCKS: u32 = 35373; -pub const GL_MAX_COMBINED_UNIFORM_BLOCKS: u32 = 35374; -pub const GL_MAX_UNIFORM_BUFFER_BINDINGS: u32 = 35375; -pub const GL_MAX_UNIFORM_BLOCK_SIZE: u32 = 35376; -pub const GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: u32 = 35377; -pub const GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS: u32 = 35378; -pub const GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: u32 = 35379; -pub const GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: u32 = 35380; -pub const GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: u32 = 35381; -pub const GL_ACTIVE_UNIFORM_BLOCKS: u32 = 35382; -pub const GL_UNIFORM_TYPE: u32 = 35383; -pub const GL_UNIFORM_SIZE: u32 = 35384; -pub const GL_UNIFORM_NAME_LENGTH: u32 = 35385; -pub const GL_UNIFORM_BLOCK_INDEX: u32 = 35386; -pub const GL_UNIFORM_OFFSET: u32 = 35387; -pub const GL_UNIFORM_ARRAY_STRIDE: u32 = 35388; -pub const GL_UNIFORM_MATRIX_STRIDE: u32 = 35389; -pub const GL_UNIFORM_IS_ROW_MAJOR: u32 = 35390; -pub const GL_UNIFORM_BLOCK_BINDING: u32 = 35391; -pub const GL_UNIFORM_BLOCK_DATA_SIZE: u32 = 35392; -pub const GL_UNIFORM_BLOCK_NAME_LENGTH: u32 = 35393; -pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS: u32 = 35394; -pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: u32 = 35395; -pub const GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: u32 = 35396; -pub const GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER: u32 = 35397; -pub const GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: u32 = 35398; -pub const GL_INVALID_INDEX: u32 = 4294967295; -pub const GL_CONTEXT_CORE_PROFILE_BIT: u32 = 1; -pub const GL_CONTEXT_COMPATIBILITY_PROFILE_BIT: u32 = 2; -pub const GL_LINES_ADJACENCY: u32 = 10; -pub const GL_LINE_STRIP_ADJACENCY: u32 = 11; -pub const GL_TRIANGLES_ADJACENCY: u32 = 12; -pub const GL_TRIANGLE_STRIP_ADJACENCY: u32 = 13; -pub const GL_PROGRAM_POINT_SIZE: u32 = 34370; -pub const GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS: u32 = 35881; -pub const GL_FRAMEBUFFER_ATTACHMENT_LAYERED: u32 = 36263; -pub const GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: u32 = 36264; -pub const GL_GEOMETRY_SHADER: u32 = 36313; -pub const GL_GEOMETRY_VERTICES_OUT: u32 = 35094; -pub const GL_GEOMETRY_INPUT_TYPE: u32 = 35095; -pub const GL_GEOMETRY_OUTPUT_TYPE: u32 = 35096; -pub const GL_MAX_GEOMETRY_UNIFORM_COMPONENTS: u32 = 36319; -pub const GL_MAX_GEOMETRY_OUTPUT_VERTICES: u32 = 36320; -pub const GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: u32 = 36321; -pub const GL_MAX_VERTEX_OUTPUT_COMPONENTS: u32 = 37154; -pub const GL_MAX_GEOMETRY_INPUT_COMPONENTS: u32 = 37155; -pub const GL_MAX_GEOMETRY_OUTPUT_COMPONENTS: u32 = 37156; -pub const GL_MAX_FRAGMENT_INPUT_COMPONENTS: u32 = 37157; -pub const GL_CONTEXT_PROFILE_MASK: u32 = 37158; -pub const GL_DEPTH_CLAMP: u32 = 34383; -pub const GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: u32 = 36428; -pub const GL_FIRST_VERTEX_CONVENTION: u32 = 36429; -pub const GL_LAST_VERTEX_CONVENTION: u32 = 36430; -pub const GL_PROVOKING_VERTEX: u32 = 36431; -pub const GL_TEXTURE_CUBE_MAP_SEAMLESS: u32 = 34895; -pub const GL_MAX_SERVER_WAIT_TIMEOUT: u32 = 37137; -pub const GL_OBJECT_TYPE: u32 = 37138; -pub const GL_SYNC_CONDITION: u32 = 37139; -pub const GL_SYNC_STATUS: u32 = 37140; -pub const GL_SYNC_FLAGS: u32 = 37141; -pub const GL_SYNC_FENCE: u32 = 37142; -pub const GL_SYNC_GPU_COMMANDS_COMPLETE: u32 = 37143; -pub const GL_UNSIGNALED: u32 = 37144; -pub const GL_SIGNALED: u32 = 37145; -pub const GL_ALREADY_SIGNALED: u32 = 37146; -pub const GL_TIMEOUT_EXPIRED: u32 = 37147; -pub const GL_CONDITION_SATISFIED: u32 = 37148; -pub const GL_WAIT_FAILED: u32 = 37149; -pub const GL_TIMEOUT_IGNORED: i32 = -1; -pub const GL_SYNC_FLUSH_COMMANDS_BIT: u32 = 1; -pub const GL_SAMPLE_POSITION: u32 = 36432; -pub const GL_SAMPLE_MASK: u32 = 36433; -pub const GL_SAMPLE_MASK_VALUE: u32 = 36434; -pub const GL_MAX_SAMPLE_MASK_WORDS: u32 = 36441; -pub const GL_TEXTURE_2D_MULTISAMPLE: u32 = 37120; -pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE: u32 = 37121; -pub const GL_TEXTURE_2D_MULTISAMPLE_ARRAY: u32 = 37122; -pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY: u32 = 37123; -pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE: u32 = 37124; -pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY: u32 = 37125; -pub const GL_TEXTURE_SAMPLES: u32 = 37126; -pub const GL_TEXTURE_FIXED_SAMPLE_LOCATIONS: u32 = 37127; -pub const GL_SAMPLER_2D_MULTISAMPLE: u32 = 37128; -pub const GL_INT_SAMPLER_2D_MULTISAMPLE: u32 = 37129; -pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: u32 = 37130; -pub const GL_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37131; -pub const GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37132; -pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37133; -pub const GL_MAX_COLOR_TEXTURE_SAMPLES: u32 = 37134; -pub const GL_MAX_DEPTH_TEXTURE_SAMPLES: u32 = 37135; -pub const GL_MAX_INTEGER_SAMPLES: u32 = 37136; -pub const GL_VERTEX_ATTRIB_ARRAY_DIVISOR: u32 = 35070; -pub const GL_SRC1_COLOR: u32 = 35065; -pub const GL_ONE_MINUS_SRC1_COLOR: u32 = 35066; -pub const GL_ONE_MINUS_SRC1_ALPHA: u32 = 35067; -pub const GL_MAX_DUAL_SOURCE_DRAW_BUFFERS: u32 = 35068; -pub const GL_ANY_SAMPLES_PASSED: u32 = 35887; -pub const GL_SAMPLER_BINDING: u32 = 35097; -pub const GL_RGB10_A2UI: u32 = 36975; -pub const GL_TEXTURE_SWIZZLE_R: u32 = 36418; -pub const GL_TEXTURE_SWIZZLE_G: u32 = 36419; -pub const GL_TEXTURE_SWIZZLE_B: u32 = 36420; -pub const GL_TEXTURE_SWIZZLE_A: u32 = 36421; -pub const GL_TEXTURE_SWIZZLE_RGBA: u32 = 36422; -pub const GL_TIME_ELAPSED: u32 = 35007; -pub const GL_TIMESTAMP: u32 = 36392; -pub const GL_INT_2_10_10_10_REV: u32 = 36255; -pub const GL_VERSION_1_0: u32 = 1; -pub const GL_VERSION_1_1: u32 = 1; -pub const GL_VERSION_1_2: u32 = 1; -pub const GL_VERSION_1_3: u32 = 1; -pub const GL_VERSION_1_4: u32 = 1; -pub const GL_VERSION_1_5: u32 = 1; -pub const GL_VERSION_2_0: u32 = 1; -pub const GL_VERSION_2_1: u32 = 1; -pub const GL_VERSION_3_0: u32 = 1; -pub const GL_VERSION_3_1: u32 = 1; -pub const GL_VERSION_3_2: u32 = 1; -pub const GL_VERSION_3_3: u32 = 1; -pub const GL_MAX_DEBUG_MESSAGE_LENGTH_AMD: u32 = 37187; -pub const GL_MAX_DEBUG_LOGGED_MESSAGES_AMD: u32 = 37188; -pub const GL_DEBUG_LOGGED_MESSAGES_AMD: u32 = 37189; -pub const GL_DEBUG_SEVERITY_HIGH_AMD: u32 = 37190; -pub const GL_DEBUG_SEVERITY_MEDIUM_AMD: u32 = 37191; -pub const GL_DEBUG_SEVERITY_LOW_AMD: u32 = 37192; -pub const GL_DEBUG_CATEGORY_API_ERROR_AMD: u32 = 37193; -pub const GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD: u32 = 37194; -pub const GL_DEBUG_CATEGORY_DEPRECATION_AMD: u32 = 37195; -pub const GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD: u32 = 37196; -pub const GL_DEBUG_CATEGORY_PERFORMANCE_AMD: u32 = 37197; -pub const GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD: u32 = 37198; -pub const GL_DEBUG_CATEGORY_APPLICATION_AMD: u32 = 37199; -pub const GL_DEBUG_CATEGORY_OTHER_AMD: u32 = 37200; -pub const GL_QUERY_BUFFER_AMD: u32 = 37266; -pub const GL_QUERY_BUFFER_BINDING_AMD: u32 = 37267; -pub const GL_QUERY_RESULT_NO_WAIT_AMD: u32 = 37268; -pub const GL_FIXED: u32 = 5132; -pub const GL_IMPLEMENTATION_COLOR_READ_TYPE: u32 = 35738; -pub const GL_IMPLEMENTATION_COLOR_READ_FORMAT: u32 = 35739; -pub const GL_LOW_FLOAT: u32 = 36336; -pub const GL_MEDIUM_FLOAT: u32 = 36337; -pub const GL_HIGH_FLOAT: u32 = 36338; -pub const GL_LOW_INT: u32 = 36339; -pub const GL_MEDIUM_INT: u32 = 36340; -pub const GL_HIGH_INT: u32 = 36341; -pub const GL_SHADER_COMPILER: u32 = 36346; -pub const GL_SHADER_BINARY_FORMATS: u32 = 36344; -pub const GL_NUM_SHADER_BINARY_FORMATS: u32 = 36345; -pub const GL_MAX_VERTEX_UNIFORM_VECTORS: u32 = 36347; -pub const GL_MAX_VARYING_VECTORS: u32 = 36348; -pub const GL_MAX_FRAGMENT_UNIFORM_VECTORS: u32 = 36349; -pub const GL_RGB565: u32 = 36194; -pub const GL_COMPRESSED_RGB8_ETC2: u32 = 37492; -pub const GL_COMPRESSED_SRGB8_ETC2: u32 = 37493; -pub const GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: u32 = 37494; -pub const GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: u32 = 37495; -pub const GL_COMPRESSED_RGBA8_ETC2_EAC: u32 = 37496; -pub const GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: u32 = 37497; -pub const GL_COMPRESSED_R11_EAC: u32 = 37488; -pub const GL_COMPRESSED_SIGNED_R11_EAC: u32 = 37489; -pub const GL_COMPRESSED_RG11_EAC: u32 = 37490; -pub const GL_COMPRESSED_SIGNED_RG11_EAC: u32 = 37491; -pub const GL_PRIMITIVE_RESTART_FIXED_INDEX: u32 = 36201; -pub const GL_ANY_SAMPLES_PASSED_CONSERVATIVE: u32 = 36202; -pub const GL_MAX_ELEMENT_INDEX: u32 = 36203; -pub const GL_MAP_PERSISTENT_BIT: u32 = 64; -pub const GL_MAP_COHERENT_BIT: u32 = 128; -pub const GL_DYNAMIC_STORAGE_BIT: u32 = 256; -pub const GL_CLIENT_STORAGE_BIT: u32 = 512; -pub const GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT: u32 = 16384; -pub const GL_BUFFER_IMMUTABLE_STORAGE: u32 = 33311; -pub const GL_BUFFER_STORAGE_FLAGS: u32 = 33312; -pub const GL_UNPACK_COMPRESSED_BLOCK_WIDTH: u32 = 37159; -pub const GL_UNPACK_COMPRESSED_BLOCK_HEIGHT: u32 = 37160; -pub const GL_UNPACK_COMPRESSED_BLOCK_DEPTH: u32 = 37161; -pub const GL_UNPACK_COMPRESSED_BLOCK_SIZE: u32 = 37162; -pub const GL_PACK_COMPRESSED_BLOCK_WIDTH: u32 = 37163; -pub const GL_PACK_COMPRESSED_BLOCK_HEIGHT: u32 = 37164; -pub const GL_PACK_COMPRESSED_BLOCK_DEPTH: u32 = 37165; -pub const GL_PACK_COMPRESSED_BLOCK_SIZE: u32 = 37166; -pub const GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: u32 = 33346; -pub const GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB: u32 = 33347; -pub const GL_DEBUG_CALLBACK_FUNCTION_ARB: u32 = 33348; -pub const GL_DEBUG_CALLBACK_USER_PARAM_ARB: u32 = 33349; -pub const GL_DEBUG_SOURCE_API_ARB: u32 = 33350; -pub const GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB: u32 = 33351; -pub const GL_DEBUG_SOURCE_SHADER_COMPILER_ARB: u32 = 33352; -pub const GL_DEBUG_SOURCE_THIRD_PARTY_ARB: u32 = 33353; -pub const GL_DEBUG_SOURCE_APPLICATION_ARB: u32 = 33354; -pub const GL_DEBUG_SOURCE_OTHER_ARB: u32 = 33355; -pub const GL_DEBUG_TYPE_ERROR_ARB: u32 = 33356; -pub const GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB: u32 = 33357; -pub const GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB: u32 = 33358; -pub const GL_DEBUG_TYPE_PORTABILITY_ARB: u32 = 33359; -pub const GL_DEBUG_TYPE_PERFORMANCE_ARB: u32 = 33360; -pub const GL_DEBUG_TYPE_OTHER_ARB: u32 = 33361; -pub const GL_MAX_DEBUG_MESSAGE_LENGTH_ARB: u32 = 37187; -pub const GL_MAX_DEBUG_LOGGED_MESSAGES_ARB: u32 = 37188; -pub const GL_DEBUG_LOGGED_MESSAGES_ARB: u32 = 37189; -pub const GL_DEBUG_SEVERITY_HIGH_ARB: u32 = 37190; -pub const GL_DEBUG_SEVERITY_MEDIUM_ARB: u32 = 37191; -pub const GL_DEBUG_SEVERITY_LOW_ARB: u32 = 37192; -pub const GL_DEPTH_COMPONENT16_ARB: u32 = 33189; -pub const GL_DEPTH_COMPONENT24_ARB: u32 = 33190; -pub const GL_DEPTH_COMPONENT32_ARB: u32 = 33191; -pub const GL_TEXTURE_DEPTH_SIZE_ARB: u32 = 34890; -pub const GL_DEPTH_TEXTURE_MODE_ARB: u32 = 34891; -pub const GL_MAX_DRAW_BUFFERS_ARB: u32 = 34852; -pub const GL_DRAW_BUFFER0_ARB: u32 = 34853; -pub const GL_DRAW_BUFFER1_ARB: u32 = 34854; -pub const GL_DRAW_BUFFER2_ARB: u32 = 34855; -pub const GL_DRAW_BUFFER3_ARB: u32 = 34856; -pub const GL_DRAW_BUFFER4_ARB: u32 = 34857; -pub const GL_DRAW_BUFFER5_ARB: u32 = 34858; -pub const GL_DRAW_BUFFER6_ARB: u32 = 34859; -pub const GL_DRAW_BUFFER7_ARB: u32 = 34860; -pub const GL_DRAW_BUFFER8_ARB: u32 = 34861; -pub const GL_DRAW_BUFFER9_ARB: u32 = 34862; -pub const GL_DRAW_BUFFER10_ARB: u32 = 34863; -pub const GL_DRAW_BUFFER11_ARB: u32 = 34864; -pub const GL_DRAW_BUFFER12_ARB: u32 = 34865; -pub const GL_DRAW_BUFFER13_ARB: u32 = 34866; -pub const GL_DRAW_BUFFER14_ARB: u32 = 34867; -pub const GL_DRAW_BUFFER15_ARB: u32 = 34868; -pub const GL_MAX_UNIFORM_LOCATIONS: u32 = 33390; -pub const GL_FRAGMENT_PROGRAM_ARB: u32 = 34820; -pub const GL_PROGRAM_FORMAT_ASCII_ARB: u32 = 34933; -pub const GL_PROGRAM_LENGTH_ARB: u32 = 34343; -pub const GL_PROGRAM_FORMAT_ARB: u32 = 34934; -pub const GL_PROGRAM_BINDING_ARB: u32 = 34423; -pub const GL_PROGRAM_INSTRUCTIONS_ARB: u32 = 34976; -pub const GL_MAX_PROGRAM_INSTRUCTIONS_ARB: u32 = 34977; -pub const GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB: u32 = 34978; -pub const GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB: u32 = 34979; -pub const GL_PROGRAM_TEMPORARIES_ARB: u32 = 34980; -pub const GL_MAX_PROGRAM_TEMPORARIES_ARB: u32 = 34981; -pub const GL_PROGRAM_NATIVE_TEMPORARIES_ARB: u32 = 34982; -pub const GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB: u32 = 34983; -pub const GL_PROGRAM_PARAMETERS_ARB: u32 = 34984; -pub const GL_MAX_PROGRAM_PARAMETERS_ARB: u32 = 34985; -pub const GL_PROGRAM_NATIVE_PARAMETERS_ARB: u32 = 34986; -pub const GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB: u32 = 34987; -pub const GL_PROGRAM_ATTRIBS_ARB: u32 = 34988; -pub const GL_MAX_PROGRAM_ATTRIBS_ARB: u32 = 34989; -pub const GL_PROGRAM_NATIVE_ATTRIBS_ARB: u32 = 34990; -pub const GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB: u32 = 34991; -pub const GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB: u32 = 34996; -pub const GL_MAX_PROGRAM_ENV_PARAMETERS_ARB: u32 = 34997; -pub const GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB: u32 = 34998; -pub const GL_PROGRAM_ALU_INSTRUCTIONS_ARB: u32 = 34821; -pub const GL_PROGRAM_TEX_INSTRUCTIONS_ARB: u32 = 34822; -pub const GL_PROGRAM_TEX_INDIRECTIONS_ARB: u32 = 34823; -pub const GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB: u32 = 34824; -pub const GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB: u32 = 34825; -pub const GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB: u32 = 34826; -pub const GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB: u32 = 34827; -pub const GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB: u32 = 34828; -pub const GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB: u32 = 34829; -pub const GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB: u32 = 34830; -pub const GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB: u32 = 34831; -pub const GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB: u32 = 34832; -pub const GL_PROGRAM_STRING_ARB: u32 = 34344; -pub const GL_PROGRAM_ERROR_POSITION_ARB: u32 = 34379; -pub const GL_CURRENT_MATRIX_ARB: u32 = 34369; -pub const GL_TRANSPOSE_CURRENT_MATRIX_ARB: u32 = 34999; -pub const GL_CURRENT_MATRIX_STACK_DEPTH_ARB: u32 = 34368; -pub const GL_MAX_PROGRAM_MATRICES_ARB: u32 = 34351; -pub const GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB: u32 = 34350; -pub const GL_MAX_TEXTURE_COORDS_ARB: u32 = 34929; -pub const GL_MAX_TEXTURE_IMAGE_UNITS_ARB: u32 = 34930; -pub const GL_PROGRAM_ERROR_STRING_ARB: u32 = 34932; -pub const GL_MATRIX0_ARB: u32 = 35008; -pub const GL_MATRIX1_ARB: u32 = 35009; -pub const GL_MATRIX2_ARB: u32 = 35010; -pub const GL_MATRIX3_ARB: u32 = 35011; -pub const GL_MATRIX4_ARB: u32 = 35012; -pub const GL_MATRIX5_ARB: u32 = 35013; -pub const GL_MATRIX6_ARB: u32 = 35014; -pub const GL_MATRIX7_ARB: u32 = 35015; -pub const GL_MATRIX8_ARB: u32 = 35016; -pub const GL_MATRIX9_ARB: u32 = 35017; -pub const GL_MATRIX10_ARB: u32 = 35018; -pub const GL_MATRIX11_ARB: u32 = 35019; -pub const GL_MATRIX12_ARB: u32 = 35020; -pub const GL_MATRIX13_ARB: u32 = 35021; -pub const GL_MATRIX14_ARB: u32 = 35022; -pub const GL_MATRIX15_ARB: u32 = 35023; -pub const GL_MATRIX16_ARB: u32 = 35024; -pub const GL_MATRIX17_ARB: u32 = 35025; -pub const GL_MATRIX18_ARB: u32 = 35026; -pub const GL_MATRIX19_ARB: u32 = 35027; -pub const GL_MATRIX20_ARB: u32 = 35028; -pub const GL_MATRIX21_ARB: u32 = 35029; -pub const GL_MATRIX22_ARB: u32 = 35030; -pub const GL_MATRIX23_ARB: u32 = 35031; -pub const GL_MATRIX24_ARB: u32 = 35032; -pub const GL_MATRIX25_ARB: u32 = 35033; -pub const GL_MATRIX26_ARB: u32 = 35034; -pub const GL_MATRIX27_ARB: u32 = 35035; -pub const GL_MATRIX28_ARB: u32 = 35036; -pub const GL_MATRIX29_ARB: u32 = 35037; -pub const GL_MATRIX30_ARB: u32 = 35038; -pub const GL_MATRIX31_ARB: u32 = 35039; -pub const GL_FRAGMENT_SHADER_ARB: u32 = 35632; -pub const GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB: u32 = 35657; -pub const GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: u32 = 35723; -pub const GL_MULTISAMPLE_ARB: u32 = 32925; -pub const GL_SAMPLE_ALPHA_TO_COVERAGE_ARB: u32 = 32926; -pub const GL_SAMPLE_ALPHA_TO_ONE_ARB: u32 = 32927; -pub const GL_SAMPLE_COVERAGE_ARB: u32 = 32928; -pub const GL_SAMPLE_BUFFERS_ARB: u32 = 32936; -pub const GL_SAMPLES_ARB: u32 = 32937; -pub const GL_SAMPLE_COVERAGE_VALUE_ARB: u32 = 32938; -pub const GL_SAMPLE_COVERAGE_INVERT_ARB: u32 = 32939; -pub const GL_MULTISAMPLE_BIT_ARB: u32 = 536870912; -pub const GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB: u32 = 37693; -pub const GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB: u32 = 37694; -pub const GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB: u32 = 37695; -pub const GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB: u32 = 37696; -pub const GL_SAMPLE_LOCATION_ARB: u32 = 36432; -pub const GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB: u32 = 37697; -pub const GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB: u32 = 37698; -pub const GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB: u32 = 37699; -pub const GL_COMPRESSED_ALPHA_ARB: u32 = 34025; -pub const GL_COMPRESSED_LUMINANCE_ARB: u32 = 34026; -pub const GL_COMPRESSED_LUMINANCE_ALPHA_ARB: u32 = 34027; -pub const GL_COMPRESSED_INTENSITY_ARB: u32 = 34028; -pub const GL_COMPRESSED_RGB_ARB: u32 = 34029; -pub const GL_COMPRESSED_RGBA_ARB: u32 = 34030; -pub const GL_TEXTURE_COMPRESSION_HINT_ARB: u32 = 34031; -pub const GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB: u32 = 34464; -pub const GL_TEXTURE_COMPRESSED_ARB: u32 = 34465; -pub const GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB: u32 = 34466; -pub const GL_COMPRESSED_TEXTURE_FORMATS_ARB: u32 = 34467; -pub const GL_TEXTURE_RED_TYPE_ARB: u32 = 35856; -pub const GL_TEXTURE_GREEN_TYPE_ARB: u32 = 35857; -pub const GL_TEXTURE_BLUE_TYPE_ARB: u32 = 35858; -pub const GL_TEXTURE_ALPHA_TYPE_ARB: u32 = 35859; -pub const GL_TEXTURE_LUMINANCE_TYPE_ARB: u32 = 35860; -pub const GL_TEXTURE_INTENSITY_TYPE_ARB: u32 = 35861; -pub const GL_TEXTURE_DEPTH_TYPE_ARB: u32 = 35862; -pub const GL_UNSIGNED_NORMALIZED_ARB: u32 = 35863; -pub const GL_RGBA32F_ARB: u32 = 34836; -pub const GL_RGB32F_ARB: u32 = 34837; -pub const GL_ALPHA32F_ARB: u32 = 34838; -pub const GL_INTENSITY32F_ARB: u32 = 34839; -pub const GL_LUMINANCE32F_ARB: u32 = 34840; -pub const GL_LUMINANCE_ALPHA32F_ARB: u32 = 34841; -pub const GL_RGBA16F_ARB: u32 = 34842; -pub const GL_RGB16F_ARB: u32 = 34843; -pub const GL_ALPHA16F_ARB: u32 = 34844; -pub const GL_INTENSITY16F_ARB: u32 = 34845; -pub const GL_LUMINANCE16F_ARB: u32 = 34846; -pub const GL_LUMINANCE_ALPHA16F_ARB: u32 = 34847; -pub const GL_VERTEX_ATTRIB_BINDING: u32 = 33492; -pub const GL_VERTEX_ATTRIB_RELATIVE_OFFSET: u32 = 33493; -pub const GL_VERTEX_BINDING_DIVISOR: u32 = 33494; -pub const GL_VERTEX_BINDING_OFFSET: u32 = 33495; -pub const GL_VERTEX_BINDING_STRIDE: u32 = 33496; -pub const GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET: u32 = 33497; -pub const GL_MAX_VERTEX_ATTRIB_BINDINGS: u32 = 33498; -pub const GL_BUFFER_SIZE_ARB: u32 = 34660; -pub const GL_BUFFER_USAGE_ARB: u32 = 34661; -pub const GL_ARRAY_BUFFER_ARB: u32 = 34962; -pub const GL_ELEMENT_ARRAY_BUFFER_ARB: u32 = 34963; -pub const GL_ARRAY_BUFFER_BINDING_ARB: u32 = 34964; -pub const GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB: u32 = 34965; -pub const GL_VERTEX_ARRAY_BUFFER_BINDING_ARB: u32 = 34966; -pub const GL_NORMAL_ARRAY_BUFFER_BINDING_ARB: u32 = 34967; -pub const GL_COLOR_ARRAY_BUFFER_BINDING_ARB: u32 = 34968; -pub const GL_INDEX_ARRAY_BUFFER_BINDING_ARB: u32 = 34969; -pub const GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB: u32 = 34970; -pub const GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB: u32 = 34971; -pub const GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB: u32 = 34972; -pub const GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB: u32 = 34973; -pub const GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: u32 = 34974; -pub const GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB: u32 = 34975; -pub const GL_READ_ONLY_ARB: u32 = 35000; -pub const GL_WRITE_ONLY_ARB: u32 = 35001; -pub const GL_READ_WRITE_ARB: u32 = 35002; -pub const GL_BUFFER_ACCESS_ARB: u32 = 35003; -pub const GL_BUFFER_MAPPED_ARB: u32 = 35004; -pub const GL_BUFFER_MAP_POINTER_ARB: u32 = 35005; -pub const GL_STREAM_DRAW_ARB: u32 = 35040; -pub const GL_STREAM_READ_ARB: u32 = 35041; -pub const GL_STREAM_COPY_ARB: u32 = 35042; -pub const GL_STATIC_DRAW_ARB: u32 = 35044; -pub const GL_STATIC_READ_ARB: u32 = 35045; -pub const GL_STATIC_COPY_ARB: u32 = 35046; -pub const GL_DYNAMIC_DRAW_ARB: u32 = 35048; -pub const GL_DYNAMIC_READ_ARB: u32 = 35049; -pub const GL_DYNAMIC_COPY_ARB: u32 = 35050; -pub const GL_COLOR_SUM_ARB: u32 = 33880; -pub const GL_VERTEX_PROGRAM_ARB: u32 = 34336; -pub const GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB: u32 = 34338; -pub const GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB: u32 = 34339; -pub const GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB: u32 = 34340; -pub const GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB: u32 = 34341; -pub const GL_CURRENT_VERTEX_ATTRIB_ARB: u32 = 34342; -pub const GL_VERTEX_PROGRAM_POINT_SIZE_ARB: u32 = 34370; -pub const GL_VERTEX_PROGRAM_TWO_SIDE_ARB: u32 = 34371; -pub const GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB: u32 = 34373; -pub const GL_MAX_VERTEX_ATTRIBS_ARB: u32 = 34921; -pub const GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB: u32 = 34922; -pub const GL_PROGRAM_ADDRESS_REGISTERS_ARB: u32 = 34992; -pub const GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB: u32 = 34993; -pub const GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB: u32 = 34994; -pub const GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB: u32 = 34995; -pub const GL_VERTEX_SHADER_ARB: u32 = 35633; -pub const GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB: u32 = 35658; -pub const GL_MAX_VARYING_FLOATS_ARB: u32 = 35659; -pub const GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB: u32 = 35660; -pub const GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB: u32 = 35661; -pub const GL_OBJECT_ACTIVE_ATTRIBUTES_ARB: u32 = 35721; -pub const GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB: u32 = 35722; -pub const GL_FLOAT_VEC2_ARB: u32 = 35664; -pub const GL_FLOAT_VEC3_ARB: u32 = 35665; -pub const GL_FLOAT_VEC4_ARB: u32 = 35666; -pub const GL_FLOAT_MAT2_ARB: u32 = 35674; -pub const GL_FLOAT_MAT3_ARB: u32 = 35675; -pub const GL_FLOAT_MAT4_ARB: u32 = 35676; -pub const GL_ELEMENT_ARRAY_ATI: u32 = 34664; -pub const GL_ELEMENT_ARRAY_TYPE_ATI: u32 = 34665; -pub const GL_ELEMENT_ARRAY_POINTER_ATI: u32 = 34666; -pub const GL_FRAGMENT_SHADER_ATI: u32 = 35104; -pub const GL_REG_0_ATI: u32 = 35105; -pub const GL_REG_1_ATI: u32 = 35106; -pub const GL_REG_2_ATI: u32 = 35107; -pub const GL_REG_3_ATI: u32 = 35108; -pub const GL_REG_4_ATI: u32 = 35109; -pub const GL_REG_5_ATI: u32 = 35110; -pub const GL_REG_6_ATI: u32 = 35111; -pub const GL_REG_7_ATI: u32 = 35112; -pub const GL_REG_8_ATI: u32 = 35113; -pub const GL_REG_9_ATI: u32 = 35114; -pub const GL_REG_10_ATI: u32 = 35115; -pub const GL_REG_11_ATI: u32 = 35116; -pub const GL_REG_12_ATI: u32 = 35117; -pub const GL_REG_13_ATI: u32 = 35118; -pub const GL_REG_14_ATI: u32 = 35119; -pub const GL_REG_15_ATI: u32 = 35120; -pub const GL_REG_16_ATI: u32 = 35121; -pub const GL_REG_17_ATI: u32 = 35122; -pub const GL_REG_18_ATI: u32 = 35123; -pub const GL_REG_19_ATI: u32 = 35124; -pub const GL_REG_20_ATI: u32 = 35125; -pub const GL_REG_21_ATI: u32 = 35126; -pub const GL_REG_22_ATI: u32 = 35127; -pub const GL_REG_23_ATI: u32 = 35128; -pub const GL_REG_24_ATI: u32 = 35129; -pub const GL_REG_25_ATI: u32 = 35130; -pub const GL_REG_26_ATI: u32 = 35131; -pub const GL_REG_27_ATI: u32 = 35132; -pub const GL_REG_28_ATI: u32 = 35133; -pub const GL_REG_29_ATI: u32 = 35134; -pub const GL_REG_30_ATI: u32 = 35135; -pub const GL_REG_31_ATI: u32 = 35136; -pub const GL_CON_0_ATI: u32 = 35137; -pub const GL_CON_1_ATI: u32 = 35138; -pub const GL_CON_2_ATI: u32 = 35139; -pub const GL_CON_3_ATI: u32 = 35140; -pub const GL_CON_4_ATI: u32 = 35141; -pub const GL_CON_5_ATI: u32 = 35142; -pub const GL_CON_6_ATI: u32 = 35143; -pub const GL_CON_7_ATI: u32 = 35144; -pub const GL_CON_8_ATI: u32 = 35145; -pub const GL_CON_9_ATI: u32 = 35146; -pub const GL_CON_10_ATI: u32 = 35147; -pub const GL_CON_11_ATI: u32 = 35148; -pub const GL_CON_12_ATI: u32 = 35149; -pub const GL_CON_13_ATI: u32 = 35150; -pub const GL_CON_14_ATI: u32 = 35151; -pub const GL_CON_15_ATI: u32 = 35152; -pub const GL_CON_16_ATI: u32 = 35153; -pub const GL_CON_17_ATI: u32 = 35154; -pub const GL_CON_18_ATI: u32 = 35155; -pub const GL_CON_19_ATI: u32 = 35156; -pub const GL_CON_20_ATI: u32 = 35157; -pub const GL_CON_21_ATI: u32 = 35158; -pub const GL_CON_22_ATI: u32 = 35159; -pub const GL_CON_23_ATI: u32 = 35160; -pub const GL_CON_24_ATI: u32 = 35161; -pub const GL_CON_25_ATI: u32 = 35162; -pub const GL_CON_26_ATI: u32 = 35163; -pub const GL_CON_27_ATI: u32 = 35164; -pub const GL_CON_28_ATI: u32 = 35165; -pub const GL_CON_29_ATI: u32 = 35166; -pub const GL_CON_30_ATI: u32 = 35167; -pub const GL_CON_31_ATI: u32 = 35168; -pub const GL_MOV_ATI: u32 = 35169; -pub const GL_ADD_ATI: u32 = 35171; -pub const GL_MUL_ATI: u32 = 35172; -pub const GL_SUB_ATI: u32 = 35173; -pub const GL_DOT3_ATI: u32 = 35174; -pub const GL_DOT4_ATI: u32 = 35175; -pub const GL_MAD_ATI: u32 = 35176; -pub const GL_LERP_ATI: u32 = 35177; -pub const GL_CND_ATI: u32 = 35178; -pub const GL_CND0_ATI: u32 = 35179; -pub const GL_DOT2_ADD_ATI: u32 = 35180; -pub const GL_SECONDARY_INTERPOLATOR_ATI: u32 = 35181; -pub const GL_NUM_FRAGMENT_REGISTERS_ATI: u32 = 35182; -pub const GL_NUM_FRAGMENT_CONSTANTS_ATI: u32 = 35183; -pub const GL_NUM_PASSES_ATI: u32 = 35184; -pub const GL_NUM_INSTRUCTIONS_PER_PASS_ATI: u32 = 35185; -pub const GL_NUM_INSTRUCTIONS_TOTAL_ATI: u32 = 35186; -pub const GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI: u32 = 35187; -pub const GL_NUM_LOOPBACK_COMPONENTS_ATI: u32 = 35188; -pub const GL_COLOR_ALPHA_PAIRING_ATI: u32 = 35189; -pub const GL_SWIZZLE_STR_ATI: u32 = 35190; -pub const GL_SWIZZLE_STQ_ATI: u32 = 35191; -pub const GL_SWIZZLE_STR_DR_ATI: u32 = 35192; -pub const GL_SWIZZLE_STQ_DQ_ATI: u32 = 35193; -pub const GL_SWIZZLE_STRQ_ATI: u32 = 35194; -pub const GL_SWIZZLE_STRQ_DQ_ATI: u32 = 35195; -pub const GL_RED_BIT_ATI: u32 = 1; -pub const GL_GREEN_BIT_ATI: u32 = 2; -pub const GL_BLUE_BIT_ATI: u32 = 4; -pub const GL_2X_BIT_ATI: u32 = 1; -pub const GL_4X_BIT_ATI: u32 = 2; -pub const GL_8X_BIT_ATI: u32 = 4; -pub const GL_HALF_BIT_ATI: u32 = 8; -pub const GL_QUARTER_BIT_ATI: u32 = 16; -pub const GL_EIGHTH_BIT_ATI: u32 = 32; -pub const GL_SATURATE_BIT_ATI: u32 = 64; -pub const GL_COMP_BIT_ATI: u32 = 2; -pub const GL_NEGATE_BIT_ATI: u32 = 4; -pub const GL_BIAS_BIT_ATI: u32 = 8; -pub const GL_STATIC_ATI: u32 = 34656; -pub const GL_DYNAMIC_ATI: u32 = 34657; -pub const GL_PRESERVE_ATI: u32 = 34658; -pub const GL_DISCARD_ATI: u32 = 34659; -pub const GL_OBJECT_BUFFER_SIZE_ATI: u32 = 34660; -pub const GL_OBJECT_BUFFER_USAGE_ATI: u32 = 34661; -pub const GL_ARRAY_OBJECT_BUFFER_ATI: u32 = 34662; -pub const GL_ARRAY_OBJECT_OFFSET_ATI: u32 = 34663; -pub const GL_CONSTANT_COLOR_EXT: u32 = 32769; -pub const GL_ONE_MINUS_CONSTANT_COLOR_EXT: u32 = 32770; -pub const GL_CONSTANT_ALPHA_EXT: u32 = 32771; -pub const GL_ONE_MINUS_CONSTANT_ALPHA_EXT: u32 = 32772; -pub const GL_BLEND_COLOR_EXT: u32 = 32773; -pub const GL_BLEND_EQUATION_RGB_EXT: u32 = 32777; -pub const GL_BLEND_EQUATION_ALPHA_EXT: u32 = 34877; -pub const GL_BLEND_DST_RGB_EXT: u32 = 32968; -pub const GL_BLEND_SRC_RGB_EXT: u32 = 32969; -pub const GL_BLEND_DST_ALPHA_EXT: u32 = 32970; -pub const GL_BLEND_SRC_ALPHA_EXT: u32 = 32971; -pub const GL_READ_FRAMEBUFFER_EXT: u32 = 36008; -pub const GL_DRAW_FRAMEBUFFER_EXT: u32 = 36009; -pub const GL_DRAW_FRAMEBUFFER_BINDING_EXT: u32 = 36006; -pub const GL_READ_FRAMEBUFFER_BINDING_EXT: u32 = 36010; -pub const GL_RENDERBUFFER_SAMPLES_EXT: u32 = 36011; -pub const GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT: u32 = 36182; -pub const GL_MAX_SAMPLES_EXT: u32 = 36183; -pub const GL_SCALED_RESOLVE_FASTEST_EXT: u32 = 37050; -pub const GL_SCALED_RESOLVE_NICEST_EXT: u32 = 37051; -pub const GL_INVALID_FRAMEBUFFER_OPERATION_EXT: u32 = 1286; -pub const GL_MAX_RENDERBUFFER_SIZE_EXT: u32 = 34024; -pub const GL_FRAMEBUFFER_BINDING_EXT: u32 = 36006; -pub const GL_RENDERBUFFER_BINDING_EXT: u32 = 36007; -pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT: u32 = 36048; -pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT: u32 = 36049; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT: u32 = 36050; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT: u32 = 36051; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT: u32 = 36052; -pub const GL_FRAMEBUFFER_COMPLETE_EXT: u32 = 36053; -pub const GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: u32 = 36054; -pub const GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: u32 = 36055; -pub const GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: u32 = 36057; -pub const GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: u32 = 36058; -pub const GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: u32 = 36059; -pub const GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: u32 = 36060; -pub const GL_FRAMEBUFFER_UNSUPPORTED_EXT: u32 = 36061; -pub const GL_MAX_COLOR_ATTACHMENTS_EXT: u32 = 36063; -pub const GL_COLOR_ATTACHMENT0_EXT: u32 = 36064; -pub const GL_COLOR_ATTACHMENT1_EXT: u32 = 36065; -pub const GL_COLOR_ATTACHMENT2_EXT: u32 = 36066; -pub const GL_COLOR_ATTACHMENT3_EXT: u32 = 36067; -pub const GL_COLOR_ATTACHMENT4_EXT: u32 = 36068; -pub const GL_COLOR_ATTACHMENT5_EXT: u32 = 36069; -pub const GL_COLOR_ATTACHMENT6_EXT: u32 = 36070; -pub const GL_COLOR_ATTACHMENT7_EXT: u32 = 36071; -pub const GL_COLOR_ATTACHMENT8_EXT: u32 = 36072; -pub const GL_COLOR_ATTACHMENT9_EXT: u32 = 36073; -pub const GL_COLOR_ATTACHMENT10_EXT: u32 = 36074; -pub const GL_COLOR_ATTACHMENT11_EXT: u32 = 36075; -pub const GL_COLOR_ATTACHMENT12_EXT: u32 = 36076; -pub const GL_COLOR_ATTACHMENT13_EXT: u32 = 36077; -pub const GL_COLOR_ATTACHMENT14_EXT: u32 = 36078; -pub const GL_COLOR_ATTACHMENT15_EXT: u32 = 36079; -pub const GL_DEPTH_ATTACHMENT_EXT: u32 = 36096; -pub const GL_STENCIL_ATTACHMENT_EXT: u32 = 36128; -pub const GL_FRAMEBUFFER_EXT: u32 = 36160; -pub const GL_RENDERBUFFER_EXT: u32 = 36161; -pub const GL_RENDERBUFFER_WIDTH_EXT: u32 = 36162; -pub const GL_RENDERBUFFER_HEIGHT_EXT: u32 = 36163; -pub const GL_RENDERBUFFER_INTERNAL_FORMAT_EXT: u32 = 36164; -pub const GL_STENCIL_INDEX1_EXT: u32 = 36166; -pub const GL_STENCIL_INDEX4_EXT: u32 = 36167; -pub const GL_STENCIL_INDEX8_EXT: u32 = 36168; -pub const GL_STENCIL_INDEX16_EXT: u32 = 36169; -pub const GL_RENDERBUFFER_RED_SIZE_EXT: u32 = 36176; -pub const GL_RENDERBUFFER_GREEN_SIZE_EXT: u32 = 36177; -pub const GL_RENDERBUFFER_BLUE_SIZE_EXT: u32 = 36178; -pub const GL_RENDERBUFFER_ALPHA_SIZE_EXT: u32 = 36179; -pub const GL_RENDERBUFFER_DEPTH_SIZE_EXT: u32 = 36180; -pub const GL_RENDERBUFFER_STENCIL_SIZE_EXT: u32 = 36181; -pub const GL_FRAMEBUFFER_SRGB_EXT: u32 = 36281; -pub const GL_FRAMEBUFFER_SRGB_CAPABLE_EXT: u32 = 36282; -pub const GL_IUI_V2F_EXT: u32 = 33197; -pub const GL_IUI_V3F_EXT: u32 = 33198; -pub const GL_IUI_N3F_V2F_EXT: u32 = 33199; -pub const GL_IUI_N3F_V3F_EXT: u32 = 33200; -pub const GL_T2F_IUI_V2F_EXT: u32 = 33201; -pub const GL_T2F_IUI_V3F_EXT: u32 = 33202; -pub const GL_T2F_IUI_N3F_V2F_EXT: u32 = 33203; -pub const GL_T2F_IUI_N3F_V3F_EXT: u32 = 33204; -pub const GL_ALPHA4_EXT: u32 = 32827; -pub const GL_ALPHA8_EXT: u32 = 32828; -pub const GL_ALPHA12_EXT: u32 = 32829; -pub const GL_ALPHA16_EXT: u32 = 32830; -pub const GL_LUMINANCE4_EXT: u32 = 32831; -pub const GL_LUMINANCE8_EXT: u32 = 32832; -pub const GL_LUMINANCE12_EXT: u32 = 32833; -pub const GL_LUMINANCE16_EXT: u32 = 32834; -pub const GL_LUMINANCE4_ALPHA4_EXT: u32 = 32835; -pub const GL_LUMINANCE6_ALPHA2_EXT: u32 = 32836; -pub const GL_LUMINANCE8_ALPHA8_EXT: u32 = 32837; -pub const GL_LUMINANCE12_ALPHA4_EXT: u32 = 32838; -pub const GL_LUMINANCE12_ALPHA12_EXT: u32 = 32839; -pub const GL_LUMINANCE16_ALPHA16_EXT: u32 = 32840; -pub const GL_INTENSITY_EXT: u32 = 32841; -pub const GL_INTENSITY4_EXT: u32 = 32842; -pub const GL_INTENSITY8_EXT: u32 = 32843; -pub const GL_INTENSITY12_EXT: u32 = 32844; -pub const GL_INTENSITY16_EXT: u32 = 32845; -pub const GL_RGB2_EXT: u32 = 32846; -pub const GL_RGB4_EXT: u32 = 32847; -pub const GL_RGB5_EXT: u32 = 32848; -pub const GL_RGB8_EXT: u32 = 32849; -pub const GL_RGB10_EXT: u32 = 32850; -pub const GL_RGB12_EXT: u32 = 32851; -pub const GL_RGB16_EXT: u32 = 32852; -pub const GL_RGBA2_EXT: u32 = 32853; -pub const GL_RGBA4_EXT: u32 = 32854; -pub const GL_RGB5_A1_EXT: u32 = 32855; -pub const GL_RGBA8_EXT: u32 = 32856; -pub const GL_RGB10_A2_EXT: u32 = 32857; -pub const GL_RGBA12_EXT: u32 = 32858; -pub const GL_RGBA16_EXT: u32 = 32859; -pub const GL_TEXTURE_RED_SIZE_EXT: u32 = 32860; -pub const GL_TEXTURE_GREEN_SIZE_EXT: u32 = 32861; -pub const GL_TEXTURE_BLUE_SIZE_EXT: u32 = 32862; -pub const GL_TEXTURE_ALPHA_SIZE_EXT: u32 = 32863; -pub const GL_TEXTURE_LUMINANCE_SIZE_EXT: u32 = 32864; -pub const GL_TEXTURE_INTENSITY_SIZE_EXT: u32 = 32865; -pub const GL_REPLACE_EXT: u32 = 32866; -pub const GL_PROXY_TEXTURE_1D_EXT: u32 = 32867; -pub const GL_PROXY_TEXTURE_2D_EXT: u32 = 32868; -pub const GL_TEXTURE_TOO_LARGE_EXT: u32 = 32869; -pub const GL_COMPRESSED_RGB_S3TC_DXT1_EXT: u32 = 33776; -pub const GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: u32 = 33777; -pub const GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: u32 = 33778; -pub const GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: u32 = 33779; -pub const GL_SRGB_EXT: u32 = 35904; -pub const GL_SRGB8_EXT: u32 = 35905; -pub const GL_SRGB_ALPHA_EXT: u32 = 35906; -pub const GL_SRGB8_ALPHA8_EXT: u32 = 35907; -pub const GL_SLUMINANCE_ALPHA_EXT: u32 = 35908; -pub const GL_SLUMINANCE8_ALPHA8_EXT: u32 = 35909; -pub const GL_SLUMINANCE_EXT: u32 = 35910; -pub const GL_SLUMINANCE8_EXT: u32 = 35911; -pub const GL_COMPRESSED_SRGB_EXT: u32 = 35912; -pub const GL_COMPRESSED_SRGB_ALPHA_EXT: u32 = 35913; -pub const GL_COMPRESSED_SLUMINANCE_EXT: u32 = 35914; -pub const GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: u32 = 35915; -pub const GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: u32 = 35916; -pub const GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: u32 = 35917; -pub const GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: u32 = 35918; -pub const GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: u32 = 35919; -pub const GL_TEXTURE_SWIZZLE_R_EXT: u32 = 36418; -pub const GL_TEXTURE_SWIZZLE_G_EXT: u32 = 36419; -pub const GL_TEXTURE_SWIZZLE_B_EXT: u32 = 36420; -pub const GL_TEXTURE_SWIZZLE_A_EXT: u32 = 36421; -pub const GL_TEXTURE_SWIZZLE_RGBA_EXT: u32 = 36422; -pub const GL_VERTEX_ARRAY_EXT: u32 = 32884; -pub const GL_NORMAL_ARRAY_EXT: u32 = 32885; -pub const GL_COLOR_ARRAY_EXT: u32 = 32886; -pub const GL_INDEX_ARRAY_EXT: u32 = 32887; -pub const GL_TEXTURE_COORD_ARRAY_EXT: u32 = 32888; -pub const GL_EDGE_FLAG_ARRAY_EXT: u32 = 32889; -pub const GL_VERTEX_ARRAY_SIZE_EXT: u32 = 32890; -pub const GL_VERTEX_ARRAY_TYPE_EXT: u32 = 32891; -pub const GL_VERTEX_ARRAY_STRIDE_EXT: u32 = 32892; -pub const GL_VERTEX_ARRAY_COUNT_EXT: u32 = 32893; -pub const GL_NORMAL_ARRAY_TYPE_EXT: u32 = 32894; -pub const GL_NORMAL_ARRAY_STRIDE_EXT: u32 = 32895; -pub const GL_NORMAL_ARRAY_COUNT_EXT: u32 = 32896; -pub const GL_COLOR_ARRAY_SIZE_EXT: u32 = 32897; -pub const GL_COLOR_ARRAY_TYPE_EXT: u32 = 32898; -pub const GL_COLOR_ARRAY_STRIDE_EXT: u32 = 32899; -pub const GL_COLOR_ARRAY_COUNT_EXT: u32 = 32900; -pub const GL_INDEX_ARRAY_TYPE_EXT: u32 = 32901; -pub const GL_INDEX_ARRAY_STRIDE_EXT: u32 = 32902; -pub const GL_INDEX_ARRAY_COUNT_EXT: u32 = 32903; -pub const GL_TEXTURE_COORD_ARRAY_SIZE_EXT: u32 = 32904; -pub const GL_TEXTURE_COORD_ARRAY_TYPE_EXT: u32 = 32905; -pub const GL_TEXTURE_COORD_ARRAY_STRIDE_EXT: u32 = 32906; -pub const GL_TEXTURE_COORD_ARRAY_COUNT_EXT: u32 = 32907; -pub const GL_EDGE_FLAG_ARRAY_STRIDE_EXT: u32 = 32908; -pub const GL_EDGE_FLAG_ARRAY_COUNT_EXT: u32 = 32909; -pub const GL_VERTEX_ARRAY_POINTER_EXT: u32 = 32910; -pub const GL_NORMAL_ARRAY_POINTER_EXT: u32 = 32911; -pub const GL_COLOR_ARRAY_POINTER_EXT: u32 = 32912; -pub const GL_INDEX_ARRAY_POINTER_EXT: u32 = 32913; -pub const GL_TEXTURE_COORD_ARRAY_POINTER_EXT: u32 = 32914; -pub const GL_EDGE_FLAG_ARRAY_POINTER_EXT: u32 = 32915; -pub const GL_VERTEX_SHADER_EXT: u32 = 34688; -pub const GL_VERTEX_SHADER_BINDING_EXT: u32 = 34689; -pub const GL_OP_INDEX_EXT: u32 = 34690; -pub const GL_OP_NEGATE_EXT: u32 = 34691; -pub const GL_OP_DOT3_EXT: u32 = 34692; -pub const GL_OP_DOT4_EXT: u32 = 34693; -pub const GL_OP_MUL_EXT: u32 = 34694; -pub const GL_OP_ADD_EXT: u32 = 34695; -pub const GL_OP_MADD_EXT: u32 = 34696; -pub const GL_OP_FRAC_EXT: u32 = 34697; -pub const GL_OP_MAX_EXT: u32 = 34698; -pub const GL_OP_MIN_EXT: u32 = 34699; -pub const GL_OP_SET_GE_EXT: u32 = 34700; -pub const GL_OP_SET_LT_EXT: u32 = 34701; -pub const GL_OP_CLAMP_EXT: u32 = 34702; -pub const GL_OP_FLOOR_EXT: u32 = 34703; -pub const GL_OP_ROUND_EXT: u32 = 34704; -pub const GL_OP_EXP_BASE_2_EXT: u32 = 34705; -pub const GL_OP_LOG_BASE_2_EXT: u32 = 34706; -pub const GL_OP_POWER_EXT: u32 = 34707; -pub const GL_OP_RECIP_EXT: u32 = 34708; -pub const GL_OP_RECIP_SQRT_EXT: u32 = 34709; -pub const GL_OP_SUB_EXT: u32 = 34710; -pub const GL_OP_CROSS_PRODUCT_EXT: u32 = 34711; -pub const GL_OP_MULTIPLY_MATRIX_EXT: u32 = 34712; -pub const GL_OP_MOV_EXT: u32 = 34713; -pub const GL_OUTPUT_VERTEX_EXT: u32 = 34714; -pub const GL_OUTPUT_COLOR0_EXT: u32 = 34715; -pub const GL_OUTPUT_COLOR1_EXT: u32 = 34716; -pub const GL_OUTPUT_TEXTURE_COORD0_EXT: u32 = 34717; -pub const GL_OUTPUT_TEXTURE_COORD1_EXT: u32 = 34718; -pub const GL_OUTPUT_TEXTURE_COORD2_EXT: u32 = 34719; -pub const GL_OUTPUT_TEXTURE_COORD3_EXT: u32 = 34720; -pub const GL_OUTPUT_TEXTURE_COORD4_EXT: u32 = 34721; -pub const GL_OUTPUT_TEXTURE_COORD5_EXT: u32 = 34722; -pub const GL_OUTPUT_TEXTURE_COORD6_EXT: u32 = 34723; -pub const GL_OUTPUT_TEXTURE_COORD7_EXT: u32 = 34724; -pub const GL_OUTPUT_TEXTURE_COORD8_EXT: u32 = 34725; -pub const GL_OUTPUT_TEXTURE_COORD9_EXT: u32 = 34726; -pub const GL_OUTPUT_TEXTURE_COORD10_EXT: u32 = 34727; -pub const GL_OUTPUT_TEXTURE_COORD11_EXT: u32 = 34728; -pub const GL_OUTPUT_TEXTURE_COORD12_EXT: u32 = 34729; -pub const GL_OUTPUT_TEXTURE_COORD13_EXT: u32 = 34730; -pub const GL_OUTPUT_TEXTURE_COORD14_EXT: u32 = 34731; -pub const GL_OUTPUT_TEXTURE_COORD15_EXT: u32 = 34732; -pub const GL_OUTPUT_TEXTURE_COORD16_EXT: u32 = 34733; -pub const GL_OUTPUT_TEXTURE_COORD17_EXT: u32 = 34734; -pub const GL_OUTPUT_TEXTURE_COORD18_EXT: u32 = 34735; -pub const GL_OUTPUT_TEXTURE_COORD19_EXT: u32 = 34736; -pub const GL_OUTPUT_TEXTURE_COORD20_EXT: u32 = 34737; -pub const GL_OUTPUT_TEXTURE_COORD21_EXT: u32 = 34738; -pub const GL_OUTPUT_TEXTURE_COORD22_EXT: u32 = 34739; -pub const GL_OUTPUT_TEXTURE_COORD23_EXT: u32 = 34740; -pub const GL_OUTPUT_TEXTURE_COORD24_EXT: u32 = 34741; -pub const GL_OUTPUT_TEXTURE_COORD25_EXT: u32 = 34742; -pub const GL_OUTPUT_TEXTURE_COORD26_EXT: u32 = 34743; -pub const GL_OUTPUT_TEXTURE_COORD27_EXT: u32 = 34744; -pub const GL_OUTPUT_TEXTURE_COORD28_EXT: u32 = 34745; -pub const GL_OUTPUT_TEXTURE_COORD29_EXT: u32 = 34746; -pub const GL_OUTPUT_TEXTURE_COORD30_EXT: u32 = 34747; -pub const GL_OUTPUT_TEXTURE_COORD31_EXT: u32 = 34748; -pub const GL_OUTPUT_FOG_EXT: u32 = 34749; -pub const GL_SCALAR_EXT: u32 = 34750; -pub const GL_VECTOR_EXT: u32 = 34751; -pub const GL_MATRIX_EXT: u32 = 34752; -pub const GL_VARIANT_EXT: u32 = 34753; -pub const GL_INVARIANT_EXT: u32 = 34754; -pub const GL_LOCAL_CONSTANT_EXT: u32 = 34755; -pub const GL_LOCAL_EXT: u32 = 34756; -pub const GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT: u32 = 34757; -pub const GL_MAX_VERTEX_SHADER_VARIANTS_EXT: u32 = 34758; -pub const GL_MAX_VERTEX_SHADER_INVARIANTS_EXT: u32 = 34759; -pub const GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT: u32 = 34760; -pub const GL_MAX_VERTEX_SHADER_LOCALS_EXT: u32 = 34761; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT: u32 = 34762; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT: u32 = 34763; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT: u32 = 34764; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT: u32 = 34765; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT: u32 = 34766; -pub const GL_VERTEX_SHADER_INSTRUCTIONS_EXT: u32 = 34767; -pub const GL_VERTEX_SHADER_VARIANTS_EXT: u32 = 34768; -pub const GL_VERTEX_SHADER_INVARIANTS_EXT: u32 = 34769; -pub const GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT: u32 = 34770; -pub const GL_VERTEX_SHADER_LOCALS_EXT: u32 = 34771; -pub const GL_VERTEX_SHADER_OPTIMIZED_EXT: u32 = 34772; -pub const GL_X_EXT: u32 = 34773; -pub const GL_Y_EXT: u32 = 34774; -pub const GL_Z_EXT: u32 = 34775; -pub const GL_W_EXT: u32 = 34776; -pub const GL_NEGATIVE_X_EXT: u32 = 34777; -pub const GL_NEGATIVE_Y_EXT: u32 = 34778; -pub const GL_NEGATIVE_Z_EXT: u32 = 34779; -pub const GL_NEGATIVE_W_EXT: u32 = 34780; -pub const GL_ZERO_EXT: u32 = 34781; -pub const GL_ONE_EXT: u32 = 34782; -pub const GL_NEGATIVE_ONE_EXT: u32 = 34783; -pub const GL_NORMALIZED_RANGE_EXT: u32 = 34784; -pub const GL_FULL_RANGE_EXT: u32 = 34785; -pub const GL_CURRENT_VERTEX_EXT: u32 = 34786; -pub const GL_MVP_MATRIX_EXT: u32 = 34787; -pub const GL_VARIANT_VALUE_EXT: u32 = 34788; -pub const GL_VARIANT_DATATYPE_EXT: u32 = 34789; -pub const GL_VARIANT_ARRAY_STRIDE_EXT: u32 = 34790; -pub const GL_VARIANT_ARRAY_TYPE_EXT: u32 = 34791; -pub const GL_VARIANT_ARRAY_EXT: u32 = 34792; -pub const GL_VARIANT_ARRAY_POINTER_EXT: u32 = 34793; -pub const GL_INVARIANT_VALUE_EXT: u32 = 34794; -pub const GL_INVARIANT_DATATYPE_EXT: u32 = 34795; -pub const GL_LOCAL_CONSTANT_VALUE_EXT: u32 = 34796; -pub const GL_LOCAL_CONSTANT_DATATYPE_EXT: u32 = 34797; -pub const GL_AMD_debug_output: u32 = 1; -pub const GL_AMD_query_buffer_object: u32 = 1; -pub const GL_ARB_ES2_compatibility: u32 = 1; -pub const GL_ARB_ES3_compatibility: u32 = 1; -pub const GL_ARB_buffer_storage: u32 = 1; -pub const GL_ARB_compatibility: u32 = 1; -pub const GL_ARB_compressed_texture_pixel_storage: u32 = 1; -pub const GL_ARB_debug_output: u32 = 1; -pub const GL_ARB_depth_buffer_float: u32 = 1; -pub const GL_ARB_depth_clamp: u32 = 1; -pub const GL_ARB_depth_texture: u32 = 1; -pub const GL_ARB_draw_buffers: u32 = 1; -pub const GL_ARB_draw_buffers_blend: u32 = 1; -pub const GL_ARB_explicit_attrib_location: u32 = 1; -pub const GL_ARB_explicit_uniform_location: u32 = 1; -pub const GL_ARB_fragment_program: u32 = 1; -pub const GL_ARB_fragment_shader: u32 = 1; -pub const GL_ARB_framebuffer_object: u32 = 1; -pub const GL_ARB_framebuffer_sRGB: u32 = 1; -pub const GL_ARB_multisample: u32 = 1; -pub const GL_ARB_sample_locations: u32 = 1; -pub const GL_ARB_texture_compression: u32 = 1; -pub const GL_ARB_texture_float: u32 = 1; -pub const GL_ARB_texture_multisample: u32 = 1; -pub const GL_ARB_texture_non_power_of_two: u32 = 1; -pub const GL_ARB_texture_rg: u32 = 1; -pub const GL_ARB_texture_swizzle: u32 = 1; -pub const GL_ARB_uniform_buffer_object: u32 = 1; -pub const GL_ARB_vertex_array_object: u32 = 1; -pub const GL_ARB_vertex_attrib_binding: u32 = 1; -pub const GL_ARB_vertex_buffer_object: u32 = 1; -pub const GL_ARB_vertex_program: u32 = 1; -pub const GL_ARB_vertex_shader: u32 = 1; -pub const GL_ATI_element_array: u32 = 1; -pub const GL_ATI_fragment_shader: u32 = 1; -pub const GL_ATI_vertex_array_object: u32 = 1; -pub const GL_EXT_blend_color: u32 = 1; -pub const GL_EXT_blend_equation_separate: u32 = 1; -pub const GL_EXT_blend_func_separate: u32 = 1; -pub const GL_EXT_debug_marker: u32 = 1; -pub const GL_EXT_framebuffer_blit: u32 = 1; -pub const GL_EXT_framebuffer_multisample: u32 = 1; -pub const GL_EXT_framebuffer_multisample_blit_scaled: u32 = 1; -pub const GL_EXT_framebuffer_object: u32 = 1; -pub const GL_EXT_framebuffer_sRGB: u32 = 1; -pub const GL_EXT_index_array_formats: u32 = 1; -pub const GL_EXT_texture: u32 = 1; -pub const GL_EXT_texture_compression_s3tc: u32 = 1; -pub const GL_EXT_texture_sRGB: u32 = 1; -pub const GL_EXT_texture_swizzle: u32 = 1; -pub const GL_EXT_vertex_array: u32 = 1; -pub const GL_EXT_vertex_shader: u32 = 1; -pub const _STDIO_H: u32 = 1; -pub const _____fpos_t_defined: u32 = 1; -pub const ____mbstate_t_defined: u32 = 1; -pub const _____fpos64_t_defined: u32 = 1; -pub const ____FILE_defined: u32 = 1; -pub const __FILE_defined: u32 = 1; -pub const __struct_FILE_defined: u32 = 1; -pub const _IO_EOF_SEEN: u32 = 16; -pub const _IO_ERR_SEEN: u32 = 32; -pub const _IO_USER_LOCK: u32 = 32768; -pub const _IOFBF: u32 = 0; -pub const _IOLBF: u32 = 1; -pub const _IONBF: u32 = 2; -pub const BUFSIZ: u32 = 8192; -pub const EOF: i32 = -1; -pub const SEEK_SET: u32 = 0; -pub const SEEK_CUR: u32 = 1; -pub const SEEK_END: u32 = 2; -pub const _BITS_STDIO_LIM_H: u32 = 1; -pub const L_tmpnam: u32 = 20; -pub const TMP_MAX: u32 = 238328; -pub const FILENAME_MAX: u32 = 4096; -pub const FOPEN_MAX: u32 = 16; -pub const _GLAD_IS_SOME_NEW_VERSION: u32 = 1; -pub const GL_ETC1_RGB8_OES: u32 = 36196; -pub const GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG: u32 = 35840; -pub const GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: u32 = 35842; -pub const GL_COMPRESSED_RGBA_ASTC_4x4_KHR: u32 = 37808; -pub const GL_COMPRESSED_RGBA_ASTC_8x8_KHR: u32 = 37815; -pub const GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: u32 = 34047; -pub const GL_TEXTURE_MAX_ANISOTROPY_EXT: u32 = 34046; -pub const DEFAULT_SHADER_ATTRIB_NAME_POSITION: &'static [u8; 15usize] = b"vertexPosition\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD: &'static [u8; 15usize] = b"vertexTexCoord\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_NORMAL: &'static [u8; 13usize] = b"vertexNormal\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_COLOR: &'static [u8; 12usize] = b"vertexColor\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_TANGENT: &'static [u8; 14usize] = b"vertexTangent\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2: &'static [u8; 16usize] = b"vertexTexCoord2\0"; -pub const MAX_MIPMAP_LEVELS: u32 = 5; -pub const RAYGUI_VERSION: &'static [u8; 8usize] = b"2.6-dev\0"; -pub const NUM_CONTROLS: u32 = 16; -pub const NUM_PROPS_DEFAULT: u32 = 16; -pub const NUM_PROPS_EXTENDED: u32 = 8; -pub const TEXTEDIT_CURSOR_BLINK_FRAMES: u32 = 20; -pub const RICON_MAX_ICONS: u32 = 256; -pub const RICON_SIZE: u32 = 16; -pub const RICON_MAX_NAME_LENGTH: u32 = 32; -pub const RICON_DATA_ELEMENTS: u32 = 8; -pub const WINDOW_STATUSBAR_HEIGHT: u32 = 22; -pub const GROUPBOX_LINE_THICK: u32 = 1; -pub const GROUPBOX_TEXT_PADDING: u32 = 10; -pub const LINE_TEXT_PADDING: u32 = 10; -pub const PANEL_BORDER_WIDTH: u32 = 1; -pub const TOGGLEGROUP_MAX_ELEMENTS: u32 = 32; -pub const VALUEBOX_MAX_CHARS: u32 = 32; -pub const COLORBARALPHA_CHECKED_SIZE: u32 = 10; -pub const MESSAGEBOX_BUTTON_HEIGHT: u32 = 24; -pub const MESSAGEBOX_BUTTON_PADDING: u32 = 10; -pub const TEXTINPUTBOX_BUTTON_HEIGHT: u32 = 24; -pub const TEXTINPUTBOX_BUTTON_PADDING: u32 = 10; -pub const TEXTINPUTBOX_HEIGHT: u32 = 30; -pub const TEXTINPUTBOX_MAX_TEXT_LENGTH: u32 = 256; -pub const GRID_COLOR_ALPHA: f64 = 0.15; -pub const ICON_TEXT_PADDING: u32 = 4; -pub const TEXTSPLIT_MAX_TEXT_LENGTH: u32 = 1024; -pub const TEXTSPLIT_MAX_TEXT_ELEMENTS: u32 = 128; -pub const MAX_LIGHTS: u32 = 4; -pub type va_list = __builtin_va_list; -pub type __gnuc_va_list = __builtin_va_list; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector2 { - pub x: f32, - pub y: f32, -} -#[test] -fn bindgen_test_layout_Vector2() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(Vector2)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector2), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector2), - "::", - stringify!(y) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector3 { - pub x: f32, - pub y: f32, - pub z: f32, -} -#[test] -fn bindgen_test_layout_Vector3() { - assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!("Size of: ", stringify!(Vector3)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector3)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).z as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(z) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector4 { - pub x: f32, - pub y: f32, - pub z: f32, - pub w: f32, -} -#[test] -fn bindgen_test_layout_Vector4() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Vector4)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector4)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).z as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(z) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).w as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(w) - ) - ); -} -pub type Quaternion = Vector4; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Matrix { - pub m0: f32, - pub m4: f32, - pub m8: f32, - pub m12: f32, - pub m1: f32, - pub m5: f32, - pub m9: f32, - pub m13: f32, - pub m2: f32, - pub m6: f32, - pub m10: f32, - pub m14: f32, - pub m3: f32, - pub m7: f32, - pub m11: f32, - pub m15: f32, -} -#[test] -fn bindgen_test_layout_Matrix() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(Matrix)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Matrix)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m0 as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m0) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m4 as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m4) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m8 as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m8) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m12 as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m12) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m1 as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m1) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m5 as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m5) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m9 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m9) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m13 as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m13) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m2 as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m6 as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m6) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m10 as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m10) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m14 as *const _ as usize }, - 44usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m14) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m3 as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m3) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m7 as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m7) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m11 as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m11) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m15 as *const _ as usize }, - 60usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m15) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Color { - pub r: ::std::os::raw::c_uchar, - pub g: ::std::os::raw::c_uchar, - pub b: ::std::os::raw::c_uchar, - pub a: ::std::os::raw::c_uchar, -} -#[test] -fn bindgen_test_layout_Color() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(Color)) - ); - assert_eq!( - ::std::mem::align_of::(), - 1usize, - concat!("Alignment of ", stringify!(Color)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).r as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(r)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).g as *const _ as usize }, - 1usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(g)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).b as *const _ as usize }, - 2usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(b)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).a as *const _ as usize }, - 3usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(a)) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Rectangle { - pub x: f32, - pub y: f32, - pub width: f32, - pub height: f32, -} -#[test] -fn bindgen_test_layout_Rectangle() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Rectangle)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Rectangle)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(height) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Image { - pub data: *mut ::std::os::raw::c_void, - pub width: ::std::os::raw::c_int, - pub height: ::std::os::raw::c_int, - pub mipmaps: ::std::os::raw::c_int, - pub format: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Image() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Image)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Image)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).data as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(data) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(height) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mipmaps as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(mipmaps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).format as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(format) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Texture { - pub id: ::std::os::raw::c_uint, - pub width: ::std::os::raw::c_int, - pub height: ::std::os::raw::c_int, - pub mipmaps: ::std::os::raw::c_int, - pub format: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Texture() { - assert_eq!( - ::std::mem::size_of::(), - 20usize, - concat!("Size of: ", stringify!(Texture)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Texture)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(height) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mipmaps as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(mipmaps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).format as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(format) - ) - ); -} -pub type Texture2D = Texture; -pub type TextureCubemap = Texture; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RenderTexture { - pub id: ::std::os::raw::c_uint, - pub texture: Texture, - pub depth: Texture, -} -#[test] -fn bindgen_test_layout_RenderTexture() { - assert_eq!( - ::std::mem::size_of::(), - 44usize, - concat!("Size of: ", stringify!(RenderTexture)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(RenderTexture)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).depth as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(depth) - ) - ); -} -pub type RenderTexture2D = RenderTexture; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct NPatchInfo { - pub source: Rectangle, - pub left: ::std::os::raw::c_int, - pub top: ::std::os::raw::c_int, - pub right: ::std::os::raw::c_int, - pub bottom: ::std::os::raw::c_int, - pub type_: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_NPatchInfo() { - assert_eq!( - ::std::mem::size_of::(), - 36usize, - concat!("Size of: ", stringify!(NPatchInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(NPatchInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).source as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(source) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).left as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(left) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).top as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(top) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).right as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(right) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bottom as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(bottom) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).type_ as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(type_) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct CharInfo { - pub value: ::std::os::raw::c_int, - pub offsetX: ::std::os::raw::c_int, - pub offsetY: ::std::os::raw::c_int, - pub advanceX: ::std::os::raw::c_int, - pub image: Image, -} -#[test] -fn bindgen_test_layout_CharInfo() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(CharInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(CharInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).value as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(value) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offsetX as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(offsetX) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offsetY as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(offsetY) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).advanceX as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(advanceX) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).image as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(image) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Font { - pub baseSize: ::std::os::raw::c_int, - pub charsCount: ::std::os::raw::c_int, - pub charsPadding: ::std::os::raw::c_int, - pub texture: Texture2D, - pub recs: *mut Rectangle, - pub chars: *mut CharInfo, -} -#[test] -fn bindgen_test_layout_Font() { - assert_eq!( - ::std::mem::size_of::(), - 48usize, - concat!("Size of: ", stringify!(Font)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Font)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).baseSize as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(baseSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).charsCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(charsCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).charsPadding as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(charsPadding) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).recs as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(recs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).chars as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(chars) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Camera3D { - pub position: Vector3, - pub target: Vector3, - pub up: Vector3, - pub fovy: f32, - pub type_: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Camera3D() { - assert_eq!( - ::std::mem::size_of::(), - 44usize, - concat!("Size of: ", stringify!(Camera3D)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Camera3D)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).target as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).up as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(up) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).fovy as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(fovy) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).type_ as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(type_) - ) - ); -} -pub type Camera = Camera3D; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Camera2D { - pub offset: Vector2, - pub target: Vector2, - pub rotation: f32, - pub zoom: f32, -} -#[test] -fn bindgen_test_layout_Camera2D() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Camera2D)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Camera2D)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offset as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).target as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rotation as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(rotation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).zoom as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(zoom) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Mesh { - pub vertexCount: ::std::os::raw::c_int, - pub triangleCount: ::std::os::raw::c_int, - pub vertices: *mut f32, - pub texcoords: *mut f32, - pub texcoords2: *mut f32, - pub normals: *mut f32, - pub tangents: *mut f32, - pub colors: *mut ::std::os::raw::c_uchar, - pub indices: *mut ::std::os::raw::c_ushort, - pub animVertices: *mut f32, - pub animNormals: *mut f32, - pub boneIds: *mut ::std::os::raw::c_int, - pub boneWeights: *mut f32, - pub vaoId: ::std::os::raw::c_uint, - pub vboId: *mut ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_Mesh() { - assert_eq!( - ::std::mem::size_of::(), - 112usize, - concat!("Size of: ", stringify!(Mesh)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Mesh)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vertexCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).triangleCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(triangleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertices as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(texcoords) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords2 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(texcoords2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).normals as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(normals) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).tangents as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(tangents) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).colors as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(colors) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).indices as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(indices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).animVertices as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(animVertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).animNormals as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(animNormals) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneIds as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(boneIds) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneWeights as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(boneWeights) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vaoId as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vaoId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vboId as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vboId) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Shader { - pub id: ::std::os::raw::c_uint, - pub locs: *mut ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Shader() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Shader)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Shader)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Shader), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).locs as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Shader), - "::", - stringify!(locs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct MaterialMap { - pub texture: Texture2D, - pub color: Color, - pub value: f32, -} -#[test] -fn bindgen_test_layout_MaterialMap() { - assert_eq!( - ::std::mem::size_of::(), - 28usize, - concat!("Size of: ", stringify!(MaterialMap)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(MaterialMap)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).color as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(color) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).value as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(value) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Material { - pub shader: Shader, - pub maps: *mut MaterialMap, - pub params: *mut f32, -} -#[test] -fn bindgen_test_layout_Material() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(Material)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Material)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).shader as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(shader) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).maps as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(maps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).params as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(params) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Transform { - pub translation: Vector3, - pub rotation: Quaternion, - pub scale: Vector3, -} -#[test] -fn bindgen_test_layout_Transform() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(Transform)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Transform)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).translation as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(translation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rotation as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(rotation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scale as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(scale) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct BoneInfo { - pub name: [::std::os::raw::c_char; 32usize], - pub parent: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_BoneInfo() { - assert_eq!( - ::std::mem::size_of::(), - 36usize, - concat!("Size of: ", stringify!(BoneInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(BoneInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).name as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(BoneInfo), - "::", - stringify!(name) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).parent as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(BoneInfo), - "::", - stringify!(parent) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Model { - pub transform: Matrix, - pub meshCount: ::std::os::raw::c_int, - pub materialCount: ::std::os::raw::c_int, - pub meshes: *mut Mesh, - pub materials: *mut Material, - pub meshMaterial: *mut ::std::os::raw::c_int, - pub boneCount: ::std::os::raw::c_int, - pub bones: *mut BoneInfo, - pub bindPose: *mut Transform, -} -#[test] -fn bindgen_test_layout_Model() { - assert_eq!( - ::std::mem::size_of::(), - 120usize, - concat!("Size of: ", stringify!(Model)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Model)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).transform as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(transform) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshCount as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).materialCount as *const _ as usize }, - 68usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(materialCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshes as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshes) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).materials as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(materials) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshMaterial as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshMaterial) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneCount as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(boneCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bones as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(bones) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bindPose as *const _ as usize }, - 112usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(bindPose) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct ModelAnimation { - pub boneCount: ::std::os::raw::c_int, - pub frameCount: ::std::os::raw::c_int, - pub bones: *mut BoneInfo, - pub framePoses: *mut *mut Transform, -} -#[test] -fn bindgen_test_layout_ModelAnimation() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(ModelAnimation)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(ModelAnimation)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(boneCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).frameCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(frameCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bones as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(bones) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).framePoses as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(framePoses) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Ray { - pub position: Vector3, - pub direction: Vector3, -} -#[test] -fn bindgen_test_layout_Ray() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Ray)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Ray)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Ray), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).direction as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Ray), - "::", - stringify!(direction) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RayHitInfo { - pub hit: bool, - pub distance: f32, - pub position: Vector3, - pub normal: Vector3, -} -#[test] -fn bindgen_test_layout_RayHitInfo() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(RayHitInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(RayHitInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hit as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(hit) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).distance as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(distance) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).normal as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(normal) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct BoundingBox { - pub min: Vector3, - pub max: Vector3, -} -#[test] -fn bindgen_test_layout_BoundingBox() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(BoundingBox)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(BoundingBox)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).min as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(BoundingBox), - "::", - stringify!(min) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).max as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(BoundingBox), - "::", - stringify!(max) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Wave { - pub sampleCount: ::std::os::raw::c_uint, - pub sampleRate: ::std::os::raw::c_uint, - pub sampleSize: ::std::os::raw::c_uint, - pub channels: ::std::os::raw::c_uint, - pub data: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout_Wave() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Wave)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Wave)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleRate as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleRate) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleSize as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).channels as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(channels) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).data as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(data) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rAudioBuffer { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct AudioStream { - pub buffer: *mut rAudioBuffer, - pub sampleRate: ::std::os::raw::c_uint, - pub sampleSize: ::std::os::raw::c_uint, - pub channels: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_AudioStream() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(AudioStream)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(AudioStream)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).buffer as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(buffer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleRate as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(sampleRate) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleSize as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(sampleSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).channels as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(channels) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Sound { - pub stream: AudioStream, - pub sampleCount: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_Sound() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(Sound)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Sound)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stream as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Sound), - "::", - stringify!(stream) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Sound), - "::", - stringify!(sampleCount) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Music { - pub stream: AudioStream, - pub sampleCount: ::std::os::raw::c_uint, - pub looping: bool, - pub ctxType: ::std::os::raw::c_int, - pub ctxData: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout_Music() { - assert_eq!( - ::std::mem::size_of::(), - 48usize, - concat!("Size of: ", stringify!(Music)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Music)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stream as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(stream) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(sampleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).looping as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(looping) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ctxType as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(ctxType) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ctxData as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(ctxData) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VrDeviceInfo { - pub hResolution: ::std::os::raw::c_int, - pub vResolution: ::std::os::raw::c_int, - pub hScreenSize: f32, - pub vScreenSize: f32, - pub vScreenCenter: f32, - pub eyeToScreenDistance: f32, - pub lensSeparationDistance: f32, - pub interpupillaryDistance: f32, - pub lensDistortionValues: [f32; 4usize], - pub chromaAbCorrection: [f32; 4usize], -} -#[test] -fn bindgen_test_layout_VrDeviceInfo() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(VrDeviceInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(VrDeviceInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hResolution as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(hResolution) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vResolution as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vResolution) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hScreenSize as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(hScreenSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vScreenSize as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vScreenSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vScreenCenter as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vScreenCenter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).eyeToScreenDistance as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(eyeToScreenDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).lensSeparationDistance as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(lensSeparationDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).interpupillaryDistance as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(interpupillaryDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).lensDistortionValues as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(lensDistortionValues) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).chromaAbCorrection as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(chromaAbCorrection) - ) - ); -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum ConfigFlag { - FLAG_VSYNC_HINT = 64, - FLAG_FULLSCREEN_MODE = 2, - FLAG_WINDOW_RESIZABLE = 4, - FLAG_WINDOW_UNDECORATED = 8, - FLAG_WINDOW_HIDDEN = 128, - FLAG_WINDOW_MINIMIZED = 512, - FLAG_WINDOW_MAXIMIZED = 1024, - FLAG_WINDOW_UNFOCUSED = 2048, - FLAG_WINDOW_TOPMOST = 4096, - FLAG_WINDOW_ALWAYS_RUN = 256, - FLAG_WINDOW_TRANSPARENT = 16, - FLAG_WINDOW_HIGHDPI = 8192, - FLAG_MSAA_4X_HINT = 32, - FLAG_INTERLACED_HINT = 65536, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum TraceLogType { - LOG_ALL = 0, - LOG_TRACE = 1, - LOG_DEBUG = 2, - LOG_INFO = 3, - LOG_WARNING = 4, - LOG_ERROR = 5, - LOG_FATAL = 6, - LOG_NONE = 7, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum KeyboardKey { - KEY_APOSTROPHE = 39, - KEY_COMMA = 44, - KEY_MINUS = 45, - KEY_PERIOD = 46, - KEY_SLASH = 47, - KEY_ZERO = 48, - KEY_ONE = 49, - KEY_TWO = 50, - KEY_THREE = 51, - KEY_FOUR = 52, - KEY_FIVE = 53, - KEY_SIX = 54, - KEY_SEVEN = 55, - KEY_EIGHT = 56, - KEY_NINE = 57, - KEY_SEMICOLON = 59, - KEY_EQUAL = 61, - KEY_A = 65, - KEY_B = 66, - KEY_C = 67, - KEY_D = 68, - KEY_E = 69, - KEY_F = 70, - KEY_G = 71, - KEY_H = 72, - KEY_I = 73, - KEY_J = 74, - KEY_K = 75, - KEY_L = 76, - KEY_M = 77, - KEY_N = 78, - KEY_O = 79, - KEY_P = 80, - KEY_Q = 81, - KEY_R = 82, - KEY_S = 83, - KEY_T = 84, - KEY_U = 85, - KEY_V = 86, - KEY_W = 87, - KEY_X = 88, - KEY_Y = 89, - KEY_Z = 90, - KEY_SPACE = 32, - KEY_ESCAPE = 256, - KEY_ENTER = 257, - KEY_TAB = 258, - KEY_BACKSPACE = 259, - KEY_INSERT = 260, - KEY_DELETE = 261, - KEY_RIGHT = 262, - KEY_LEFT = 263, - KEY_DOWN = 264, - KEY_UP = 265, - KEY_PAGE_UP = 266, - KEY_PAGE_DOWN = 267, - KEY_HOME = 268, - KEY_END = 269, - KEY_CAPS_LOCK = 280, - KEY_SCROLL_LOCK = 281, - KEY_NUM_LOCK = 282, - KEY_PRINT_SCREEN = 283, - KEY_PAUSE = 284, - KEY_F1 = 290, - KEY_F2 = 291, - KEY_F3 = 292, - KEY_F4 = 293, - KEY_F5 = 294, - KEY_F6 = 295, - KEY_F7 = 296, - KEY_F8 = 297, - KEY_F9 = 298, - KEY_F10 = 299, - KEY_F11 = 300, - KEY_F12 = 301, - KEY_LEFT_SHIFT = 340, - KEY_LEFT_CONTROL = 341, - KEY_LEFT_ALT = 342, - KEY_LEFT_SUPER = 343, - KEY_RIGHT_SHIFT = 344, - KEY_RIGHT_CONTROL = 345, - KEY_RIGHT_ALT = 346, - KEY_RIGHT_SUPER = 347, - KEY_KB_MENU = 348, - KEY_LEFT_BRACKET = 91, - KEY_BACKSLASH = 92, - KEY_RIGHT_BRACKET = 93, - KEY_GRAVE = 96, - KEY_KP_0 = 320, - KEY_KP_1 = 321, - KEY_KP_2 = 322, - KEY_KP_3 = 323, - KEY_KP_4 = 324, - KEY_KP_5 = 325, - KEY_KP_6 = 326, - KEY_KP_7 = 327, - KEY_KP_8 = 328, - KEY_KP_9 = 329, - KEY_KP_DECIMAL = 330, - KEY_KP_DIVIDE = 331, - KEY_KP_MULTIPLY = 332, - KEY_KP_SUBTRACT = 333, - KEY_KP_ADD = 334, - KEY_KP_ENTER = 335, - KEY_KP_EQUAL = 336, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum AndroidButton { - KEY_BACK = 4, - KEY_MENU = 82, - KEY_VOLUME_UP = 24, - KEY_VOLUME_DOWN = 25, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum MouseButton { - MOUSE_LEFT_BUTTON = 0, - MOUSE_RIGHT_BUTTON = 1, - MOUSE_MIDDLE_BUTTON = 2, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum MouseCursor { - MOUSE_CURSOR_DEFAULT = 0, - MOUSE_CURSOR_ARROW = 1, - MOUSE_CURSOR_IBEAM = 2, - MOUSE_CURSOR_CROSSHAIR = 3, - MOUSE_CURSOR_POINTING_HAND = 4, - MOUSE_CURSOR_RESIZE_EW = 5, - MOUSE_CURSOR_RESIZE_NS = 6, - MOUSE_CURSOR_RESIZE_NWSE = 7, - MOUSE_CURSOR_RESIZE_NESW = 8, - MOUSE_CURSOR_RESIZE_ALL = 9, - MOUSE_CURSOR_NOT_ALLOWED = 10, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GamepadNumber { - GAMEPAD_PLAYER1 = 0, - GAMEPAD_PLAYER2 = 1, - GAMEPAD_PLAYER3 = 2, - GAMEPAD_PLAYER4 = 3, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GamepadButton { - GAMEPAD_BUTTON_UNKNOWN = 0, - GAMEPAD_BUTTON_LEFT_FACE_UP = 1, - GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2, - GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3, - GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4, - GAMEPAD_BUTTON_RIGHT_FACE_UP = 5, - GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6, - GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7, - GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8, - GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9, - GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10, - GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11, - GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12, - GAMEPAD_BUTTON_MIDDLE_LEFT = 13, - GAMEPAD_BUTTON_MIDDLE = 14, - GAMEPAD_BUTTON_MIDDLE_RIGHT = 15, - GAMEPAD_BUTTON_LEFT_THUMB = 16, - GAMEPAD_BUTTON_RIGHT_THUMB = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GamepadAxis { - GAMEPAD_AXIS_LEFT_X = 0, - GAMEPAD_AXIS_LEFT_Y = 1, - GAMEPAD_AXIS_RIGHT_X = 2, - GAMEPAD_AXIS_RIGHT_Y = 3, - GAMEPAD_AXIS_LEFT_TRIGGER = 4, - GAMEPAD_AXIS_RIGHT_TRIGGER = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum ShaderLocationIndex { - LOC_VERTEX_POSITION = 0, - LOC_VERTEX_TEXCOORD01 = 1, - LOC_VERTEX_TEXCOORD02 = 2, - LOC_VERTEX_NORMAL = 3, - LOC_VERTEX_TANGENT = 4, - LOC_VERTEX_COLOR = 5, - LOC_MATRIX_MVP = 6, - LOC_MATRIX_MODEL = 7, - LOC_MATRIX_VIEW = 8, - LOC_MATRIX_PROJECTION = 9, - LOC_VECTOR_VIEW = 10, - LOC_COLOR_DIFFUSE = 11, - LOC_COLOR_SPECULAR = 12, - LOC_COLOR_AMBIENT = 13, - LOC_MAP_ALBEDO = 14, - LOC_MAP_METALNESS = 15, - LOC_MAP_NORMAL = 16, - LOC_MAP_ROUGHNESS = 17, - LOC_MAP_OCCLUSION = 18, - LOC_MAP_EMISSION = 19, - LOC_MAP_HEIGHT = 20, - LOC_MAP_CUBEMAP = 21, - LOC_MAP_IRRADIANCE = 22, - LOC_MAP_PREFILTER = 23, - LOC_MAP_BRDF = 24, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum ShaderUniformDataType { - UNIFORM_FLOAT = 0, - UNIFORM_VEC2 = 1, - UNIFORM_VEC3 = 2, - UNIFORM_VEC4 = 3, - UNIFORM_INT = 4, - UNIFORM_IVEC2 = 5, - UNIFORM_IVEC3 = 6, - UNIFORM_IVEC4 = 7, - UNIFORM_SAMPLER2D = 8, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum MaterialMapType { - MAP_ALBEDO = 0, - MAP_METALNESS = 1, - MAP_NORMAL = 2, - MAP_ROUGHNESS = 3, - MAP_OCCLUSION = 4, - MAP_EMISSION = 5, - MAP_HEIGHT = 6, - MAP_CUBEMAP = 7, - MAP_IRRADIANCE = 8, - MAP_PREFILTER = 9, - MAP_BRDF = 10, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum PixelFormat { - UNCOMPRESSED_GRAYSCALE = 1, - UNCOMPRESSED_GRAY_ALPHA = 2, - UNCOMPRESSED_R5G6B5 = 3, - UNCOMPRESSED_R8G8B8 = 4, - UNCOMPRESSED_R5G5B5A1 = 5, - UNCOMPRESSED_R4G4B4A4 = 6, - UNCOMPRESSED_R8G8B8A8 = 7, - UNCOMPRESSED_R32 = 8, - UNCOMPRESSED_R32G32B32 = 9, - UNCOMPRESSED_R32G32B32A32 = 10, - COMPRESSED_DXT1_RGB = 11, - COMPRESSED_DXT1_RGBA = 12, - COMPRESSED_DXT3_RGBA = 13, - COMPRESSED_DXT5_RGBA = 14, - COMPRESSED_ETC1_RGB = 15, - COMPRESSED_ETC2_RGB = 16, - COMPRESSED_ETC2_EAC_RGBA = 17, - COMPRESSED_PVRT_RGB = 18, - COMPRESSED_PVRT_RGBA = 19, - COMPRESSED_ASTC_4x4_RGBA = 20, - COMPRESSED_ASTC_8x8_RGBA = 21, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum TextureFilterMode { - FILTER_POINT = 0, - FILTER_BILINEAR = 1, - FILTER_TRILINEAR = 2, - FILTER_ANISOTROPIC_4X = 3, - FILTER_ANISOTROPIC_8X = 4, - FILTER_ANISOTROPIC_16X = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum TextureWrapMode { - WRAP_REPEAT = 0, - WRAP_CLAMP = 1, - WRAP_MIRROR_REPEAT = 2, - WRAP_MIRROR_CLAMP = 3, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum CubemapLayoutType { - CUBEMAP_AUTO_DETECT = 0, - CUBEMAP_LINE_VERTICAL = 1, - CUBEMAP_LINE_HORIZONTAL = 2, - CUBEMAP_CROSS_THREE_BY_FOUR = 3, - CUBEMAP_CROSS_FOUR_BY_THREE = 4, - CUBEMAP_PANORAMA = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum FontType { - FONT_DEFAULT = 0, - FONT_BITMAP = 1, - FONT_SDF = 2, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum BlendMode { - BLEND_ALPHA = 0, - BLEND_ADDITIVE = 1, - BLEND_MULTIPLIED = 2, - BLEND_ADD_COLORS = 3, - BLEND_SUBTRACT_COLORS = 4, - BLEND_CUSTOM = 5, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GestureType { - GESTURE_NONE = 0, - GESTURE_TAP = 1, - GESTURE_DOUBLETAP = 2, - GESTURE_HOLD = 4, - GESTURE_DRAG = 8, - GESTURE_SWIPE_RIGHT = 16, - GESTURE_SWIPE_LEFT = 32, - GESTURE_SWIPE_UP = 64, - GESTURE_SWIPE_DOWN = 128, - GESTURE_PINCH_IN = 256, - GESTURE_PINCH_OUT = 512, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum CameraMode { - CAMERA_CUSTOM = 0, - CAMERA_FREE = 1, - CAMERA_ORBITAL = 2, - CAMERA_FIRST_PERSON = 3, - CAMERA_THIRD_PERSON = 4, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum CameraType { - CAMERA_PERSPECTIVE = 0, - CAMERA_ORTHOGRAPHIC = 1, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum NPatchType { - NPT_9PATCH = 0, - NPT_3PATCH_VERTICAL = 1, - NPT_3PATCH_HORIZONTAL = 2, -} -pub type TraceLogCallback = ::std::option::Option< - unsafe extern "C" fn( - logType: ::std::os::raw::c_int, - text: *const ::std::os::raw::c_char, - args: *mut __va_list_tag, - ), ->; -extern "C" { - pub fn InitWindow( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - title: *const ::std::os::raw::c_char, - ); -} -extern "C" { - pub fn WindowShouldClose() -> bool; -} -extern "C" { - pub fn CloseWindow(); -} -extern "C" { - pub fn IsWindowReady() -> bool; -} -extern "C" { - pub fn IsWindowFullscreen() -> bool; -} -extern "C" { - pub fn IsWindowHidden() -> bool; -} -extern "C" { - pub fn IsWindowMinimized() -> bool; -} -extern "C" { - pub fn IsWindowMaximized() -> bool; -} -extern "C" { - pub fn IsWindowFocused() -> bool; -} -extern "C" { - pub fn IsWindowResized() -> bool; -} -extern "C" { - pub fn IsWindowState(flag: ::std::os::raw::c_uint) -> bool; -} -extern "C" { - pub fn SetWindowState(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn ClearWindowState(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn ToggleFullscreen(); -} -extern "C" { - pub fn MaximizeWindow(); -} -extern "C" { - pub fn MinimizeWindow(); -} -extern "C" { - pub fn RestoreWindow(); -} -extern "C" { - pub fn SetWindowIcon(image: Image); -} -extern "C" { - pub fn SetWindowTitle(title: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn SetWindowPosition(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowMonitor(monitor: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowMinSize(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowSize(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetWindowHandle() -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn GetScreenWidth() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetScreenHeight() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorCount() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPosition(monitor: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn GetMonitorWidth(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorHeight(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPhysicalWidth(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPhysicalHeight(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorRefreshRate(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetWindowPosition() -> Vector2; -} -extern "C" { - pub fn GetWindowScaleDPI() -> Vector2; -} -extern "C" { - pub fn GetMonitorName(monitor: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn SetClipboardText(text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GetClipboardText() -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn ShowCursor(); -} -extern "C" { - pub fn HideCursor(); -} -extern "C" { - pub fn IsCursorHidden() -> bool; -} -extern "C" { - pub fn EnableCursor(); -} -extern "C" { - pub fn DisableCursor(); -} -extern "C" { - pub fn IsCursorOnScreen() -> bool; -} -extern "C" { - pub fn ClearBackground(color: Color); -} -extern "C" { - pub fn BeginDrawing(); -} -extern "C" { - pub fn EndDrawing(); -} -extern "C" { - pub fn BeginMode2D(camera: Camera2D); -} -extern "C" { - pub fn EndMode2D(); -} -extern "C" { - pub fn BeginMode3D(camera: Camera3D); -} -extern "C" { - pub fn EndMode3D(); -} -extern "C" { - pub fn BeginTextureMode(target: RenderTexture2D); -} -extern "C" { - pub fn EndTextureMode(); -} -extern "C" { - pub fn BeginScissorMode( - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn EndScissorMode(); -} -extern "C" { - pub fn GetMouseRay(mousePosition: Vector2, camera: Camera) -> Ray; -} -extern "C" { - pub fn GetCameraMatrix(camera: Camera) -> Matrix; -} -extern "C" { - pub fn GetCameraMatrix2D(camera: Camera2D) -> Matrix; -} -extern "C" { - pub fn GetWorldToScreen(position: Vector3, camera: Camera) -> Vector2; -} -extern "C" { - pub fn GetWorldToScreenEx( - position: Vector3, - camera: Camera, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> Vector2; -} -extern "C" { - pub fn GetWorldToScreen2D(position: Vector2, camera: Camera2D) -> Vector2; -} -extern "C" { - pub fn GetScreenToWorld2D(position: Vector2, camera: Camera2D) -> Vector2; -} -extern "C" { - pub fn SetTargetFPS(fps: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetFPS() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetFrameTime() -> f32; -} -extern "C" { - pub fn GetTime() -> f64; -} -extern "C" { - pub fn SetConfigFlags(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn SetTraceLogLevel(logType: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetTraceLogExit(logType: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetTraceLogCallback(callback: TraceLogCallback); -} -extern "C" { - pub fn TraceLog(logType: ::std::os::raw::c_int, text: *const ::std::os::raw::c_char, ...); -} -extern "C" { - pub fn MemAlloc(size: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn MemFree(ptr: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn TakeScreenshot(fileName: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GetRandomValue( - min: ::std::os::raw::c_int, - max: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn LoadFileData( - fileName: *const ::std::os::raw::c_char, - bytesRead: *mut ::std::os::raw::c_uint, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn UnloadFileData(data: *mut ::std::os::raw::c_uchar); -} -extern "C" { - pub fn SaveFileData( - fileName: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_void, - bytesToWrite: ::std::os::raw::c_uint, - ) -> bool; -} -extern "C" { - pub fn LoadFileText(fileName: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn UnloadFileText(text: *mut ::std::os::raw::c_uchar); -} -extern "C" { - pub fn SaveFileText( - fileName: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn FileExists(fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn DirectoryExists(dirPath: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn IsFileExtension( - fileName: *const ::std::os::raw::c_char, - ext: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn GetFileExtension( - fileName: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetFileName(filePath: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetFileNameWithoutExt( - filePath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetDirectoryPath( - filePath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetPrevDirectoryPath( - dirPath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetWorkingDirectory() -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetDirectoryFiles( - dirPath: *const ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ClearDirectoryFiles(); -} -extern "C" { - pub fn ChangeDirectory(dir: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn IsFileDropped() -> bool; -} -extern "C" { - pub fn GetDroppedFiles(count: *mut ::std::os::raw::c_int) -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ClearDroppedFiles(); -} -extern "C" { - pub fn GetFileModTime(fileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn CompressData( - data: *mut ::std::os::raw::c_uchar, - dataLength: ::std::os::raw::c_int, - compDataLength: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn DecompressData( - compData: *mut ::std::os::raw::c_uchar, - compDataLength: ::std::os::raw::c_int, - dataLength: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn SaveStorageValue(position: ::std::os::raw::c_uint, value: ::std::os::raw::c_int) - -> bool; -} -extern "C" { - pub fn LoadStorageValue(position: ::std::os::raw::c_uint) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn OpenURL(url: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn IsKeyPressed(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyDown(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyReleased(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyUp(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn SetExitKey(key: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetKeyPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCharPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsGamepadAvailable(gamepad: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsGamepadName( - gamepad: ::std::os::raw::c_int, - name: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn GetGamepadName(gamepad: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn IsGamepadButtonPressed( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonDown( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonReleased( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonUp(gamepad: ::std::os::raw::c_int, button: ::std::os::raw::c_int) - -> bool; -} -extern "C" { - pub fn GetGamepadButtonPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGamepadAxisCount(gamepad: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGamepadAxisMovement( - gamepad: ::std::os::raw::c_int, - axis: ::std::os::raw::c_int, - ) -> f32; -} -extern "C" { - pub fn IsMouseButtonPressed(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonDown(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonReleased(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonUp(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn GetMouseX() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMouseY() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMousePosition() -> Vector2; -} -extern "C" { - pub fn SetMousePosition(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetMouseOffset(offsetX: ::std::os::raw::c_int, offsetY: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetMouseScale(scaleX: f32, scaleY: f32); -} -extern "C" { - pub fn GetMouseWheelMove() -> f32; -} -extern "C" { - pub fn GetMouseCursor() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn SetMouseCursor(cursor: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetTouchX() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchY() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchPosition(index: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn SetGesturesEnabled(gestureFlags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn IsGestureDetected(gesture: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn GetGestureDetected() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchPointsCount() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGestureHoldDuration() -> f32; -} -extern "C" { - pub fn GetGestureDragVector() -> Vector2; -} -extern "C" { - pub fn GetGestureDragAngle() -> f32; -} -extern "C" { - pub fn GetGesturePinchVector() -> Vector2; -} -extern "C" { - pub fn GetGesturePinchAngle() -> f32; -} -extern "C" { - pub fn SetCameraMode(camera: Camera, mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn UpdateCamera(camera: *mut Camera); -} -extern "C" { - pub fn SetCameraPanControl(keyPan: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraAltControl(keyAlt: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraSmoothZoomControl(keySmoothZoom: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraMoveControls( - keyFront: ::std::os::raw::c_int, - keyBack: ::std::os::raw::c_int, - keyRight: ::std::os::raw::c_int, - keyLeft: ::std::os::raw::c_int, - keyUp: ::std::os::raw::c_int, - keyDown: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn DrawPixel(posX: ::std::os::raw::c_int, posY: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawPixelV(position: Vector2, color: Color); -} -extern "C" { - pub fn DrawLine( - startPosX: ::std::os::raw::c_int, - startPosY: ::std::os::raw::c_int, - endPosX: ::std::os::raw::c_int, - endPosY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawLineV(startPos: Vector2, endPos: Vector2, color: Color); -} -extern "C" { - pub fn DrawLineEx(startPos: Vector2, endPos: Vector2, thick: f32, color: Color); -} -extern "C" { - pub fn DrawLineBezier(startPos: Vector2, endPos: Vector2, thick: f32, color: Color); -} -extern "C" { - pub fn DrawLineStrip(points: *mut Vector2, pointsCount: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawCircle( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleSector( - center: Vector2, - radius: f32, - startAngle: ::std::os::raw::c_int, - endAngle: ::std::os::raw::c_int, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleSectorLines( - center: Vector2, - radius: f32, - startAngle: ::std::os::raw::c_int, - endAngle: ::std::os::raw::c_int, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleGradient( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawCircleV(center: Vector2, radius: f32, color: Color); -} -extern "C" { - pub fn DrawCircleLines( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawEllipse( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radiusH: f32, - radiusV: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawEllipseLines( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radiusH: f32, - radiusV: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawRing( - center: Vector2, - innerRadius: f32, - outerRadius: f32, - startAngle: ::std::os::raw::c_int, - endAngle: ::std::os::raw::c_int, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRingLines( - center: Vector2, - innerRadius: f32, - outerRadius: f32, - startAngle: ::std::os::raw::c_int, - endAngle: ::std::os::raw::c_int, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangle( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleV(position: Vector2, size: Vector2, color: Color); -} -extern "C" { - pub fn DrawRectangleRec(rec: Rectangle, color: Color); -} -extern "C" { - pub fn DrawRectanglePro(rec: Rectangle, origin: Vector2, rotation: f32, color: Color); -} -extern "C" { - pub fn DrawRectangleGradientV( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawRectangleGradientH( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawRectangleGradientEx( - rec: Rectangle, - col1: Color, - col2: Color, - col3: Color, - col4: Color, - ); -} -extern "C" { - pub fn DrawRectangleLines( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleLinesEx(rec: Rectangle, lineThick: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawRectangleRounded( - rec: Rectangle, - roundness: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleRoundedLines( - rec: Rectangle, - roundness: f32, - segments: ::std::os::raw::c_int, - lineThick: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawTriangle(v1: Vector2, v2: Vector2, v3: Vector2, color: Color); -} -extern "C" { - pub fn DrawTriangleLines(v1: Vector2, v2: Vector2, v3: Vector2, color: Color); -} -extern "C" { - pub fn DrawTriangleFan(points: *mut Vector2, pointsCount: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawTriangleStrip( - points: *mut Vector2, - pointsCount: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawPoly( - center: Vector2, - sides: ::std::os::raw::c_int, - radius: f32, - rotation: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawPolyLines( - center: Vector2, - sides: ::std::os::raw::c_int, - radius: f32, - rotation: f32, - color: Color, - ); -} -extern "C" { - pub fn CheckCollisionRecs(rec1: Rectangle, rec2: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionCircles( - center1: Vector2, - radius1: f32, - center2: Vector2, - radius2: f32, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionCircleRec(center: Vector2, radius: f32, rec: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionPointRec(point: Vector2, rec: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionPointCircle(point: Vector2, center: Vector2, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionPointTriangle( - point: Vector2, - p1: Vector2, - p2: Vector2, - p3: Vector2, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionLines( - startPos1: Vector2, - endPos1: Vector2, - startPos2: Vector2, - endPos2: Vector2, - collisionPoint: *mut Vector2, - ) -> bool; -} -extern "C" { - pub fn GetCollisionRec(rec1: Rectangle, rec2: Rectangle) -> Rectangle; -} -extern "C" { - pub fn LoadImage(fileName: *const ::std::os::raw::c_char) -> Image; -} -extern "C" { - pub fn LoadImageRaw( - fileName: *const ::std::os::raw::c_char, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - headerSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn LoadImageAnim( - fileName: *const ::std::os::raw::c_char, - frames: *mut ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn LoadImageFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn UnloadImage(image: Image); -} -extern "C" { - pub fn ExportImage(image: Image, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn ExportImageAsCode(image: Image, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GenImageColor( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientV( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - top: Color, - bottom: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientH( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - left: Color, - right: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientRadial( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - density: f32, - inner: Color, - outer: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageChecked( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - checksX: ::std::os::raw::c_int, - checksY: ::std::os::raw::c_int, - col1: Color, - col2: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageWhiteNoise( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - factor: f32, - ) -> Image; -} -extern "C" { - pub fn GenImagePerlinNoise( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - scale: f32, - ) -> Image; -} -extern "C" { - pub fn GenImageCellular( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - tileSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn ImageCopy(image: Image) -> Image; -} -extern "C" { - pub fn ImageFromImage(image: Image, rec: Rectangle) -> Image; -} -extern "C" { - pub fn ImageText( - text: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - color: Color, - ) -> Image; -} -extern "C" { - pub fn ImageTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - fontSize: f32, - spacing: f32, - tint: Color, - ) -> Image; -} -extern "C" { - pub fn ImageFormat(image: *mut Image, newFormat: ::std::os::raw::c_int); -} -extern "C" { - pub fn ImageToPOT(image: *mut Image, fill: Color); -} -extern "C" { - pub fn ImageCrop(image: *mut Image, crop: Rectangle); -} -extern "C" { - pub fn ImageAlphaCrop(image: *mut Image, threshold: f32); -} -extern "C" { - pub fn ImageAlphaClear(image: *mut Image, color: Color, threshold: f32); -} -extern "C" { - pub fn ImageAlphaMask(image: *mut Image, alphaMask: Image); -} -extern "C" { - pub fn ImageAlphaPremultiply(image: *mut Image); -} -extern "C" { - pub fn ImageResize( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageResizeNN( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageResizeCanvas( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - fill: Color, - ); -} -extern "C" { - pub fn ImageMipmaps(image: *mut Image); -} -extern "C" { - pub fn ImageDither( - image: *mut Image, - rBpp: ::std::os::raw::c_int, - gBpp: ::std::os::raw::c_int, - bBpp: ::std::os::raw::c_int, - aBpp: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageFlipVertical(image: *mut Image); -} -extern "C" { - pub fn ImageFlipHorizontal(image: *mut Image); -} -extern "C" { - pub fn ImageRotateCW(image: *mut Image); -} -extern "C" { - pub fn ImageRotateCCW(image: *mut Image); -} -extern "C" { - pub fn ImageColorTint(image: *mut Image, color: Color); -} -extern "C" { - pub fn ImageColorInvert(image: *mut Image); -} -extern "C" { - pub fn ImageColorGrayscale(image: *mut Image); -} -extern "C" { - pub fn ImageColorContrast(image: *mut Image, contrast: f32); -} -extern "C" { - pub fn ImageColorBrightness(image: *mut Image, brightness: ::std::os::raw::c_int); -} -extern "C" { - pub fn ImageColorReplace(image: *mut Image, color: Color, replace: Color); -} -extern "C" { - pub fn LoadImageColors(image: Image) -> *mut Color; -} -extern "C" { - pub fn LoadImagePalette( - image: Image, - maxPaletteSize: ::std::os::raw::c_int, - colorsCount: *mut ::std::os::raw::c_int, - ) -> *mut Color; -} -extern "C" { - pub fn UnloadImageColors(colors: *mut Color); -} -extern "C" { - pub fn UnloadImagePalette(colors: *mut Color); -} -extern "C" { - pub fn GetImageAlphaBorder(image: Image, threshold: f32) -> Rectangle; -} -extern "C" { - pub fn ImageClearBackground(dst: *mut Image, color: Color); -} -extern "C" { - pub fn ImageDrawPixel( - dst: *mut Image, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawPixelV(dst: *mut Image, position: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawLine( - dst: *mut Image, - startPosX: ::std::os::raw::c_int, - startPosY: ::std::os::raw::c_int, - endPosX: ::std::os::raw::c_int, - endPosY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawLineV(dst: *mut Image, start: Vector2, end: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawCircle( - dst: *mut Image, - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawCircleV( - dst: *mut Image, - center: Vector2, - radius: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawRectangle( - dst: *mut Image, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawRectangleV(dst: *mut Image, position: Vector2, size: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawRectangleRec(dst: *mut Image, rec: Rectangle, color: Color); -} -extern "C" { - pub fn ImageDrawRectangleLines( - dst: *mut Image, - rec: Rectangle, - thick: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDraw( - dst: *mut Image, - src: Image, - srcRec: Rectangle, - dstRec: Rectangle, - tint: Color, - ); -} -extern "C" { - pub fn ImageDrawText( - dst: *mut Image, - text: *const ::std::os::raw::c_char, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawTextEx( - dst: *mut Image, - font: Font, - text: *const ::std::os::raw::c_char, - position: Vector2, - fontSize: f32, - spacing: f32, - tint: Color, - ); -} -extern "C" { - pub fn LoadTexture(fileName: *const ::std::os::raw::c_char) -> Texture2D; -} -extern "C" { - pub fn LoadTextureFromImage(image: Image) -> Texture2D; -} -extern "C" { - pub fn LoadTextureCubemap(image: Image, layoutType: ::std::os::raw::c_int) -> TextureCubemap; -} -extern "C" { - pub fn LoadRenderTexture( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> RenderTexture2D; -} -extern "C" { - pub fn UnloadTexture(texture: Texture2D); -} -extern "C" { - pub fn UnloadRenderTexture(target: RenderTexture2D); -} -extern "C" { - pub fn UpdateTexture(texture: Texture2D, pixels: *const ::std::os::raw::c_void); -} -extern "C" { - pub fn UpdateTextureRec( - texture: Texture2D, - rec: Rectangle, - pixels: *const ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn GetTextureData(texture: Texture2D) -> Image; -} -extern "C" { - pub fn GetScreenData() -> Image; -} -extern "C" { - pub fn GenTextureMipmaps(texture: *mut Texture2D); -} -extern "C" { - pub fn SetTextureFilter(texture: Texture2D, filterMode: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetTextureWrap(texture: Texture2D, wrapMode: ::std::os::raw::c_int); -} -extern "C" { - pub fn DrawTexture( - texture: Texture2D, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureV(texture: Texture2D, position: Vector2, tint: Color); -} -extern "C" { - pub fn DrawTextureEx( - texture: Texture2D, - position: Vector2, - rotation: f32, - scale: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureRec(texture: Texture2D, source: Rectangle, position: Vector2, tint: Color); -} -extern "C" { - pub fn DrawTextureQuad( - texture: Texture2D, - tiling: Vector2, - offset: Vector2, - quad: Rectangle, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureTiled( - texture: Texture2D, - source: Rectangle, - dest: Rectangle, - origin: Vector2, - rotation: f32, - scale: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTexturePro( - texture: Texture2D, - source: Rectangle, - dest: Rectangle, - origin: Vector2, - rotation: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureNPatch( - texture: Texture2D, - nPatchInfo: NPatchInfo, - dest: Rectangle, - origin: Vector2, - rotation: f32, - tint: Color, - ); -} -extern "C" { - pub fn Fade(color: Color, alpha: f32) -> Color; -} -extern "C" { - pub fn ColorToInt(color: Color) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ColorNormalize(color: Color) -> Vector4; -} -extern "C" { - pub fn ColorFromNormalized(normalized: Vector4) -> Color; -} -extern "C" { - pub fn ColorToHSV(color: Color) -> Vector3; -} -extern "C" { - pub fn ColorFromHSV(hue: f32, saturation: f32, value: f32) -> Color; -} -extern "C" { - pub fn ColorAlpha(color: Color, alpha: f32) -> Color; -} -extern "C" { - pub fn ColorAlphaBlend(dst: Color, src: Color, tint: Color) -> Color; -} -extern "C" { - pub fn GetColor(hexValue: ::std::os::raw::c_int) -> Color; -} -extern "C" { - pub fn GetPixelColor( - srcPtr: *mut ::std::os::raw::c_void, - format: ::std::os::raw::c_int, - ) -> Color; -} -extern "C" { - pub fn SetPixelColor( - dstPtr: *mut ::std::os::raw::c_void, - color: Color, - format: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GetPixelDataSize( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetFontDefault() -> Font; -} -extern "C" { - pub fn LoadFont(fileName: *const ::std::os::raw::c_char) -> Font; -} -extern "C" { - pub fn LoadFontEx( - fileName: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - ) -> Font; -} -extern "C" { - pub fn LoadFontFromImage(image: Image, key: Color, firstChar: ::std::os::raw::c_int) -> Font; -} -extern "C" { - pub fn LoadFontFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - ) -> Font; -} -extern "C" { - pub fn LoadFontData( - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - type_: ::std::os::raw::c_int, - ) -> *mut CharInfo; -} -extern "C" { - pub fn GenImageFontAtlas( - chars: *const CharInfo, - recs: *mut *mut Rectangle, - charsCount: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - padding: ::std::os::raw::c_int, - packMethod: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn UnloadFontData(chars: *mut CharInfo, charsCount: ::std::os::raw::c_int); -} -extern "C" { - pub fn UnloadFont(font: Font); -} -extern "C" { - pub fn DrawFPS(posX: ::std::os::raw::c_int, posY: ::std::os::raw::c_int); -} -extern "C" { - pub fn DrawText( - text: *const ::std::os::raw::c_char, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - position: Vector2, - fontSize: f32, - spacing: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextRec( - font: Font, - text: *const ::std::os::raw::c_char, - rec: Rectangle, - fontSize: f32, - spacing: f32, - wordWrap: bool, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextRecEx( - font: Font, - text: *const ::std::os::raw::c_char, - rec: Rectangle, - fontSize: f32, - spacing: f32, - wordWrap: bool, - tint: Color, - selectStart: ::std::os::raw::c_int, - selectLength: ::std::os::raw::c_int, - selectTint: Color, - selectBackTint: Color, - ); -} -extern "C" { - pub fn DrawTextCodepoint( - font: Font, - codepoint: ::std::os::raw::c_int, - position: Vector2, - fontSize: f32, - tint: Color, - ); -} -extern "C" { - pub fn MeasureText( - text: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn MeasureTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - fontSize: f32, - spacing: f32, - ) -> Vector2; -} -extern "C" { - pub fn GetGlyphIndex(font: Font, codepoint: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextCopy( - dst: *mut ::std::os::raw::c_char, - src: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextIsEqual( - text1: *const ::std::os::raw::c_char, - text2: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn TextLength(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn TextFormat(text: *const ::std::os::raw::c_char, ...) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextSubtext( - text: *const ::std::os::raw::c_char, - position: ::std::os::raw::c_int, - length: ::std::os::raw::c_int, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextReplace( - text: *mut ::std::os::raw::c_char, - replace: *const ::std::os::raw::c_char, - by: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn TextInsert( - text: *const ::std::os::raw::c_char, - insert: *const ::std::os::raw::c_char, - position: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn TextJoin( - textList: *mut *const ::std::os::raw::c_char, - count: ::std::os::raw::c_int, - delimiter: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextSplit( - text: *const ::std::os::raw::c_char, - delimiter: ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextAppend( - text: *mut ::std::os::raw::c_char, - append: *const ::std::os::raw::c_char, - position: *mut ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn TextFindIndex( - text: *const ::std::os::raw::c_char, - find: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextToUpper(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToLower(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToPascal(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToInteger(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextToUtf8( - codepoints: *mut ::std::os::raw::c_int, - length: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn GetCodepoints( - text: *const ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCodepointsCount(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetNextCodepoint( - text: *const ::std::os::raw::c_char, - bytesProcessed: *mut ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn CodepointToUtf8( - codepoint: ::std::os::raw::c_int, - byteLength: *mut ::std::os::raw::c_int, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn DrawLine3D(startPos: Vector3, endPos: Vector3, color: Color); -} -extern "C" { - pub fn DrawPoint3D(position: Vector3, color: Color); -} -extern "C" { - pub fn DrawCircle3D( - center: Vector3, - radius: f32, - rotationAxis: Vector3, - rotationAngle: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawTriangle3D(v1: Vector3, v2: Vector3, v3: Vector3, color: Color); -} -extern "C" { - pub fn DrawTriangleStrip3D( - points: *mut Vector3, - pointsCount: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCube(position: Vector3, width: f32, height: f32, length: f32, color: Color); -} -extern "C" { - pub fn DrawCubeV(position: Vector3, size: Vector3, color: Color); -} -extern "C" { - pub fn DrawCubeWires(position: Vector3, width: f32, height: f32, length: f32, color: Color); -} -extern "C" { - pub fn DrawCubeWiresV(position: Vector3, size: Vector3, color: Color); -} -extern "C" { - pub fn DrawCubeTexture( - texture: Texture2D, - position: Vector3, - width: f32, - height: f32, - length: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawSphere(centerPos: Vector3, radius: f32, color: Color); -} -extern "C" { - pub fn DrawSphereEx( - centerPos: Vector3, - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawSphereWires( - centerPos: Vector3, - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCylinder( - position: Vector3, - radiusTop: f32, - radiusBottom: f32, - height: f32, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCylinderWires( - position: Vector3, - radiusTop: f32, - radiusBottom: f32, - height: f32, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawPlane(centerPos: Vector3, size: Vector2, color: Color); -} -extern "C" { - pub fn DrawRay(ray: Ray, color: Color); -} -extern "C" { - pub fn DrawGrid(slices: ::std::os::raw::c_int, spacing: f32); -} -extern "C" { - pub fn DrawGizmo(position: Vector3); -} -extern "C" { - pub fn LoadModel(fileName: *const ::std::os::raw::c_char) -> Model; -} -extern "C" { - pub fn LoadModelFromMesh(mesh: Mesh) -> Model; -} -extern "C" { - pub fn UnloadModel(model: Model); -} -extern "C" { - pub fn UnloadModelKeepMeshes(model: Model); -} -extern "C" { - pub fn LoadMeshes( - fileName: *const ::std::os::raw::c_char, - meshCount: *mut ::std::os::raw::c_int, - ) -> *mut Mesh; -} -extern "C" { - pub fn UnloadMesh(mesh: Mesh); -} -extern "C" { - pub fn ExportMesh(mesh: Mesh, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn LoadMaterials( - fileName: *const ::std::os::raw::c_char, - materialCount: *mut ::std::os::raw::c_int, - ) -> *mut Material; -} -extern "C" { - pub fn LoadMaterialDefault() -> Material; -} -extern "C" { - pub fn UnloadMaterial(material: Material); -} -extern "C" { - pub fn SetMaterialTexture( - material: *mut Material, - mapType: ::std::os::raw::c_int, - texture: Texture2D, - ); -} -extern "C" { - pub fn SetModelMeshMaterial( - model: *mut Model, - meshId: ::std::os::raw::c_int, - materialId: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn LoadModelAnimations( - fileName: *const ::std::os::raw::c_char, - animsCount: *mut ::std::os::raw::c_int, - ) -> *mut ModelAnimation; -} -extern "C" { - pub fn UpdateModelAnimation(model: Model, anim: ModelAnimation, frame: ::std::os::raw::c_int); -} -extern "C" { - pub fn UnloadModelAnimation(anim: ModelAnimation); -} -extern "C" { - pub fn IsModelAnimationValid(model: Model, anim: ModelAnimation) -> bool; -} -extern "C" { - pub fn GenMeshPoly(sides: ::std::os::raw::c_int, radius: f32) -> Mesh; -} -extern "C" { - pub fn GenMeshPlane( - width: f32, - length: f32, - resX: ::std::os::raw::c_int, - resZ: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshCube(width: f32, height: f32, length: f32) -> Mesh; -} -extern "C" { - pub fn GenMeshSphere( - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshHemiSphere( - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshCylinder(radius: f32, height: f32, slices: ::std::os::raw::c_int) -> Mesh; -} -extern "C" { - pub fn GenMeshTorus( - radius: f32, - size: f32, - radSeg: ::std::os::raw::c_int, - sides: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshKnot( - radius: f32, - size: f32, - radSeg: ::std::os::raw::c_int, - sides: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshHeightmap(heightmap: Image, size: Vector3) -> Mesh; -} -extern "C" { - pub fn GenMeshCubicmap(cubicmap: Image, cubeSize: Vector3) -> Mesh; -} -extern "C" { - pub fn MeshBoundingBox(mesh: Mesh) -> BoundingBox; -} -extern "C" { - pub fn MeshTangents(mesh: *mut Mesh); -} -extern "C" { - pub fn MeshBinormals(mesh: *mut Mesh); -} -extern "C" { - pub fn MeshNormalsSmooth(mesh: *mut Mesh); -} -extern "C" { - pub fn DrawModel(model: Model, position: Vector3, scale: f32, tint: Color); -} -extern "C" { - pub fn DrawModelEx( - model: Model, - position: Vector3, - rotationAxis: Vector3, - rotationAngle: f32, - scale: Vector3, - tint: Color, - ); -} -extern "C" { - pub fn DrawModelWires(model: Model, position: Vector3, scale: f32, tint: Color); -} -extern "C" { - pub fn DrawModelWiresEx( - model: Model, - position: Vector3, - rotationAxis: Vector3, - rotationAngle: f32, - scale: Vector3, - tint: Color, - ); -} -extern "C" { - pub fn DrawBoundingBox(box_: BoundingBox, color: Color); -} -extern "C" { - pub fn DrawBillboard( - camera: Camera, - texture: Texture2D, - center: Vector3, - size: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawBillboardRec( - camera: Camera, - texture: Texture2D, - source: Rectangle, - center: Vector3, - size: f32, - tint: Color, - ); -} -extern "C" { - pub fn CheckCollisionSpheres( - center1: Vector3, - radius1: f32, - center2: Vector3, - radius2: f32, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionBoxes(box1: BoundingBox, box2: BoundingBox) -> bool; -} -extern "C" { - pub fn CheckCollisionBoxSphere(box_: BoundingBox, center: Vector3, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionRaySphere(ray: Ray, center: Vector3, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionRaySphereEx( - ray: Ray, - center: Vector3, - radius: f32, - collisionPoint: *mut Vector3, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionRayBox(ray: Ray, box_: BoundingBox) -> bool; -} -extern "C" { - pub fn GetCollisionRayMesh(ray: Ray, mesh: Mesh, transform: Matrix) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayModel(ray: Ray, model: Model) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayTriangle(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayGround(ray: Ray, groundHeight: f32) -> RayHitInfo; -} -extern "C" { - pub fn LoadShader( - vsFileName: *const ::std::os::raw::c_char, - fsFileName: *const ::std::os::raw::c_char, - ) -> Shader; -} -extern "C" { - pub fn LoadShaderCode( - vsCode: *const ::std::os::raw::c_char, - fsCode: *const ::std::os::raw::c_char, - ) -> Shader; -} -extern "C" { - pub fn UnloadShader(shader: Shader); -} -extern "C" { - pub fn GetShaderDefault() -> Shader; -} -extern "C" { - pub fn GetTextureDefault() -> Texture2D; -} -extern "C" { - pub fn GetShapesTexture() -> Texture2D; -} -extern "C" { - pub fn GetShapesTextureRec() -> Rectangle; -} -extern "C" { - pub fn SetShapesTexture(texture: Texture2D, source: Rectangle); -} -extern "C" { - pub fn GetShaderLocation( - shader: Shader, - uniformName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetShaderLocationAttrib( - shader: Shader, - attribName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn SetShaderValue( - shader: Shader, - uniformLoc: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - uniformType: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShaderValueV( - shader: Shader, - uniformLoc: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - uniformType: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShaderValueMatrix(shader: Shader, uniformLoc: ::std::os::raw::c_int, mat: Matrix); -} -extern "C" { - pub fn SetShaderValueTexture( - shader: Shader, - uniformLoc: ::std::os::raw::c_int, - texture: Texture2D, - ); -} -extern "C" { - pub fn SetMatrixProjection(proj: Matrix); -} -extern "C" { - pub fn SetMatrixModelview(view: Matrix); -} -extern "C" { - pub fn GetMatrixModelview() -> Matrix; -} -extern "C" { - pub fn GetMatrixProjection() -> Matrix; -} -extern "C" { - pub fn GenTextureCubemap( - shader: Shader, - panorama: Texture2D, - size: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - ) -> TextureCubemap; -} -extern "C" { - pub fn GenTextureIrradiance( - shader: Shader, - cubemap: TextureCubemap, - size: ::std::os::raw::c_int, - ) -> TextureCubemap; -} -extern "C" { - pub fn GenTexturePrefilter( - shader: Shader, - cubemap: TextureCubemap, - size: ::std::os::raw::c_int, - ) -> TextureCubemap; -} -extern "C" { - pub fn GenTextureBRDF(shader: Shader, size: ::std::os::raw::c_int) -> Texture2D; -} -extern "C" { - pub fn BeginShaderMode(shader: Shader); -} -extern "C" { - pub fn EndShaderMode(); -} -extern "C" { - pub fn BeginBlendMode(mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn EndBlendMode(); -} -extern "C" { - pub fn InitVrSimulator(); -} -extern "C" { - pub fn CloseVrSimulator(); -} -extern "C" { - pub fn UpdateVrTracking(camera: *mut Camera); -} -extern "C" { - pub fn SetVrConfiguration(info: VrDeviceInfo, distortion: Shader); -} -extern "C" { - pub fn IsVrSimulatorReady() -> bool; -} -extern "C" { - pub fn ToggleVrMode(); -} -extern "C" { - pub fn BeginVrDrawing(); -} -extern "C" { - pub fn EndVrDrawing(); -} -extern "C" { - pub fn InitAudioDevice(); -} -extern "C" { - pub fn CloseAudioDevice(); -} -extern "C" { - pub fn IsAudioDeviceReady() -> bool; -} -extern "C" { - pub fn SetMasterVolume(volume: f32); -} -extern "C" { - pub fn LoadWave(fileName: *const ::std::os::raw::c_char) -> Wave; -} -extern "C" { - pub fn LoadWaveFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Wave; -} -extern "C" { - pub fn LoadSound(fileName: *const ::std::os::raw::c_char) -> Sound; -} -extern "C" { - pub fn LoadSoundFromWave(wave: Wave) -> Sound; -} -extern "C" { - pub fn UpdateSound( - sound: Sound, - data: *const ::std::os::raw::c_void, - samplesCount: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn UnloadWave(wave: Wave); -} -extern "C" { - pub fn UnloadSound(sound: Sound); -} -extern "C" { - pub fn ExportWave(wave: Wave, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn ExportWaveAsCode(wave: Wave, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn PlaySound(sound: Sound); -} -extern "C" { - pub fn StopSound(sound: Sound); -} -extern "C" { - pub fn PauseSound(sound: Sound); -} -extern "C" { - pub fn ResumeSound(sound: Sound); -} -extern "C" { - pub fn PlaySoundMulti(sound: Sound); -} -extern "C" { - pub fn StopSoundMulti(); -} -extern "C" { - pub fn GetSoundsPlaying() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsSoundPlaying(sound: Sound) -> bool; -} -extern "C" { - pub fn SetSoundVolume(sound: Sound, volume: f32); -} -extern "C" { - pub fn SetSoundPitch(sound: Sound, pitch: f32); -} -extern "C" { - pub fn WaveFormat( - wave: *mut Wave, - sampleRate: ::std::os::raw::c_int, - sampleSize: ::std::os::raw::c_int, - channels: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn WaveCopy(wave: Wave) -> Wave; -} -extern "C" { - pub fn WaveCrop( - wave: *mut Wave, - initSample: ::std::os::raw::c_int, - finalSample: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn LoadWaveSamples(wave: Wave) -> *mut f32; -} -extern "C" { - pub fn UnloadWaveSamples(samples: *mut f32); -} -extern "C" { - pub fn LoadMusicStream(fileName: *const ::std::os::raw::c_char) -> Music; -} -extern "C" { - pub fn UnloadMusicStream(music: Music); -} -extern "C" { - pub fn PlayMusicStream(music: Music); -} -extern "C" { - pub fn UpdateMusicStream(music: Music); -} -extern "C" { - pub fn StopMusicStream(music: Music); -} -extern "C" { - pub fn PauseMusicStream(music: Music); -} -extern "C" { - pub fn ResumeMusicStream(music: Music); -} -extern "C" { - pub fn IsMusicPlaying(music: Music) -> bool; -} -extern "C" { - pub fn SetMusicVolume(music: Music, volume: f32); -} -extern "C" { - pub fn SetMusicPitch(music: Music, pitch: f32); -} -extern "C" { - pub fn GetMusicTimeLength(music: Music) -> f32; -} -extern "C" { - pub fn GetMusicTimePlayed(music: Music) -> f32; -} -extern "C" { - pub fn InitAudioStream( - sampleRate: ::std::os::raw::c_uint, - sampleSize: ::std::os::raw::c_uint, - channels: ::std::os::raw::c_uint, - ) -> AudioStream; -} -extern "C" { - pub fn UpdateAudioStream( - stream: AudioStream, - data: *const ::std::os::raw::c_void, - samplesCount: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn CloseAudioStream(stream: AudioStream); -} -extern "C" { - pub fn IsAudioStreamProcessed(stream: AudioStream) -> bool; -} -extern "C" { - pub fn PlayAudioStream(stream: AudioStream); -} -extern "C" { - pub fn PauseAudioStream(stream: AudioStream); -} -extern "C" { - pub fn ResumeAudioStream(stream: AudioStream); -} -extern "C" { - pub fn IsAudioStreamPlaying(stream: AudioStream) -> bool; -} -extern "C" { - pub fn StopAudioStream(stream: AudioStream); -} -extern "C" { - pub fn SetAudioStreamVolume(stream: AudioStream, volume: f32); -} -extern "C" { - pub fn SetAudioStreamPitch(stream: AudioStream, pitch: f32); -} -extern "C" { - pub fn SetAudioStreamBufferSizeDefault(size: ::std::os::raw::c_int); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct float3 { - pub v: [f32; 3usize], -} -#[test] -fn bindgen_test_layout_float3() { - assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!("Size of: ", stringify!(float3)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(float3)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).v as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(float3), "::", stringify!(v)) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct float16 { - pub v: [f32; 16usize], -} -#[test] -fn bindgen_test_layout_float16() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(float16)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(float16)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).v as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(float16), - "::", - stringify!(v) - ) - ); -} -pub type __u_char = ::std::os::raw::c_uchar; -pub type __u_short = ::std::os::raw::c_ushort; -pub type __u_int = ::std::os::raw::c_uint; -pub type __u_long = ::std::os::raw::c_ulong; -pub type __int8_t = ::std::os::raw::c_schar; -pub type __uint8_t = ::std::os::raw::c_uchar; -pub type __int16_t = ::std::os::raw::c_short; -pub type __uint16_t = ::std::os::raw::c_ushort; -pub type __int32_t = ::std::os::raw::c_int; -pub type __uint32_t = ::std::os::raw::c_uint; -pub type __int64_t = ::std::os::raw::c_long; -pub type __uint64_t = ::std::os::raw::c_ulong; -pub type __int_least8_t = __int8_t; -pub type __uint_least8_t = __uint8_t; -pub type __int_least16_t = __int16_t; -pub type __uint_least16_t = __uint16_t; -pub type __int_least32_t = __int32_t; -pub type __uint_least32_t = __uint32_t; -pub type __int_least64_t = __int64_t; -pub type __uint_least64_t = __uint64_t; -pub type __quad_t = ::std::os::raw::c_long; -pub type __u_quad_t = ::std::os::raw::c_ulong; -pub type __intmax_t = ::std::os::raw::c_long; -pub type __uintmax_t = ::std::os::raw::c_ulong; -pub type __dev_t = ::std::os::raw::c_ulong; -pub type __uid_t = ::std::os::raw::c_uint; -pub type __gid_t = ::std::os::raw::c_uint; -pub type __ino_t = ::std::os::raw::c_ulong; -pub type __ino64_t = ::std::os::raw::c_ulong; -pub type __mode_t = ::std::os::raw::c_uint; -pub type __nlink_t = ::std::os::raw::c_ulong; -pub type __off_t = ::std::os::raw::c_long; -pub type __off64_t = ::std::os::raw::c_long; -pub type __pid_t = ::std::os::raw::c_int; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __fsid_t { - pub __val: [::std::os::raw::c_int; 2usize], -} -#[test] -fn bindgen_test_layout___fsid_t() { - assert_eq!( - ::std::mem::size_of::<__fsid_t>(), - 8usize, - concat!("Size of: ", stringify!(__fsid_t)) - ); - assert_eq!( - ::std::mem::align_of::<__fsid_t>(), - 4usize, - concat!("Alignment of ", stringify!(__fsid_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__fsid_t>())).__val as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__fsid_t), - "::", - stringify!(__val) - ) - ); -} -pub type __clock_t = ::std::os::raw::c_long; -pub type __rlim_t = ::std::os::raw::c_ulong; -pub type __rlim64_t = ::std::os::raw::c_ulong; -pub type __id_t = ::std::os::raw::c_uint; -pub type __time_t = ::std::os::raw::c_long; -pub type __useconds_t = ::std::os::raw::c_uint; -pub type __suseconds_t = ::std::os::raw::c_long; -pub type __daddr_t = ::std::os::raw::c_int; -pub type __key_t = ::std::os::raw::c_int; -pub type __clockid_t = ::std::os::raw::c_int; -pub type __timer_t = *mut ::std::os::raw::c_void; -pub type __blksize_t = ::std::os::raw::c_long; -pub type __blkcnt_t = ::std::os::raw::c_long; -pub type __blkcnt64_t = ::std::os::raw::c_long; -pub type __fsblkcnt_t = ::std::os::raw::c_ulong; -pub type __fsblkcnt64_t = ::std::os::raw::c_ulong; -pub type __fsfilcnt_t = ::std::os::raw::c_ulong; -pub type __fsfilcnt64_t = ::std::os::raw::c_ulong; -pub type __fsword_t = ::std::os::raw::c_long; -pub type __ssize_t = ::std::os::raw::c_long; -pub type __syscall_slong_t = ::std::os::raw::c_long; -pub type __syscall_ulong_t = ::std::os::raw::c_ulong; -pub type __loff_t = __off64_t; -pub type __caddr_t = *mut ::std::os::raw::c_char; -pub type __intptr_t = ::std::os::raw::c_long; -pub type __socklen_t = ::std::os::raw::c_uint; -pub type __sig_atomic_t = ::std::os::raw::c_int; -pub type _Float32 = f32; -pub type _Float64 = f64; -pub type _Float32x = f64; -pub type _Float64x = u128; -pub type float_t = f32; -pub type double_t = f64; -extern "C" { - pub fn __fpclassify(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __signbit(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isinf(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __finite(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isnan(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __iseqsig(__x: f64, __y: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __issignaling(__value: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn acos(__x: f64) -> f64; -} -extern "C" { - pub fn __acos(__x: f64) -> f64; -} -extern "C" { - pub fn asin(__x: f64) -> f64; -} -extern "C" { - pub fn __asin(__x: f64) -> f64; -} -extern "C" { - pub fn atan(__x: f64) -> f64; -} -extern "C" { - pub fn __atan(__x: f64) -> f64; -} -extern "C" { - pub fn atan2(__y: f64, __x: f64) -> f64; -} -extern "C" { - pub fn __atan2(__y: f64, __x: f64) -> f64; -} -extern "C" { - pub fn cos(__x: f64) -> f64; -} -extern "C" { - pub fn __cos(__x: f64) -> f64; -} -extern "C" { - pub fn sin(__x: f64) -> f64; -} -extern "C" { - pub fn __sin(__x: f64) -> f64; -} -extern "C" { - pub fn tan(__x: f64) -> f64; -} -extern "C" { - pub fn __tan(__x: f64) -> f64; -} -extern "C" { - pub fn cosh(__x: f64) -> f64; -} -extern "C" { - pub fn __cosh(__x: f64) -> f64; -} -extern "C" { - pub fn sinh(__x: f64) -> f64; -} -extern "C" { - pub fn __sinh(__x: f64) -> f64; -} -extern "C" { - pub fn tanh(__x: f64) -> f64; -} -extern "C" { - pub fn __tanh(__x: f64) -> f64; -} -extern "C" { - pub fn acosh(__x: f64) -> f64; -} -extern "C" { - pub fn __acosh(__x: f64) -> f64; -} -extern "C" { - pub fn asinh(__x: f64) -> f64; -} -extern "C" { - pub fn __asinh(__x: f64) -> f64; -} -extern "C" { - pub fn atanh(__x: f64) -> f64; -} -extern "C" { - pub fn __atanh(__x: f64) -> f64; -} -extern "C" { - pub fn exp(__x: f64) -> f64; -} -extern "C" { - pub fn __exp(__x: f64) -> f64; -} -extern "C" { - pub fn frexp(__x: f64, __exponent: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn __frexp(__x: f64, __exponent: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn ldexp(__x: f64, __exponent: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn __ldexp(__x: f64, __exponent: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn log(__x: f64) -> f64; -} -extern "C" { - pub fn __log(__x: f64) -> f64; -} -extern "C" { - pub fn log10(__x: f64) -> f64; -} -extern "C" { - pub fn __log10(__x: f64) -> f64; -} -extern "C" { - pub fn modf(__x: f64, __iptr: *mut f64) -> f64; -} -extern "C" { - pub fn __modf(__x: f64, __iptr: *mut f64) -> f64; -} -extern "C" { - pub fn expm1(__x: f64) -> f64; -} -extern "C" { - pub fn __expm1(__x: f64) -> f64; -} -extern "C" { - pub fn log1p(__x: f64) -> f64; -} -extern "C" { - pub fn __log1p(__x: f64) -> f64; -} -extern "C" { - pub fn logb(__x: f64) -> f64; -} -extern "C" { - pub fn __logb(__x: f64) -> f64; -} -extern "C" { - pub fn exp2(__x: f64) -> f64; -} -extern "C" { - pub fn __exp2(__x: f64) -> f64; -} -extern "C" { - pub fn log2(__x: f64) -> f64; -} -extern "C" { - pub fn __log2(__x: f64) -> f64; -} -extern "C" { - pub fn pow(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __pow(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn sqrt(__x: f64) -> f64; -} -extern "C" { - pub fn __sqrt(__x: f64) -> f64; -} -extern "C" { - pub fn hypot(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __hypot(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn cbrt(__x: f64) -> f64; -} -extern "C" { - pub fn __cbrt(__x: f64) -> f64; -} -extern "C" { - pub fn ceil(__x: f64) -> f64; -} -extern "C" { - pub fn __ceil(__x: f64) -> f64; -} -extern "C" { - pub fn fabs(__x: f64) -> f64; -} -extern "C" { - pub fn __fabs(__x: f64) -> f64; -} -extern "C" { - pub fn floor(__x: f64) -> f64; -} -extern "C" { - pub fn __floor(__x: f64) -> f64; -} -extern "C" { - pub fn fmod(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __fmod(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn copysign(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __copysign(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn nan(__tagb: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn __nan(__tagb: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn erf(arg1: f64) -> f64; -} -extern "C" { - pub fn __erf(arg1: f64) -> f64; -} -extern "C" { - pub fn erfc(arg1: f64) -> f64; -} -extern "C" { - pub fn __erfc(arg1: f64) -> f64; -} -extern "C" { - pub fn lgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn __lgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn tgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn __tgamma(arg1: f64) -> f64; -} -extern "C" { - pub fn rint(__x: f64) -> f64; -} -extern "C" { - pub fn __rint(__x: f64) -> f64; -} -extern "C" { - pub fn nextafter(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __nextafter(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn nexttoward(__x: f64, __y: u128) -> f64; -} -extern "C" { - pub fn __nexttoward(__x: f64, __y: u128) -> f64; -} -extern "C" { - pub fn remainder(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __remainder(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn scalbn(__x: f64, __n: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn __scalbn(__x: f64, __n: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn ilogb(__x: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __ilogb(__x: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn scalbln(__x: f64, __n: ::std::os::raw::c_long) -> f64; -} -extern "C" { - pub fn __scalbln(__x: f64, __n: ::std::os::raw::c_long) -> f64; -} -extern "C" { - pub fn nearbyint(__x: f64) -> f64; -} -extern "C" { - pub fn __nearbyint(__x: f64) -> f64; -} -extern "C" { - pub fn round(__x: f64) -> f64; -} -extern "C" { - pub fn __round(__x: f64) -> f64; -} -extern "C" { - pub fn trunc(__x: f64) -> f64; -} -extern "C" { - pub fn __trunc(__x: f64) -> f64; -} -extern "C" { - pub fn remquo(__x: f64, __y: f64, __quo: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn __remquo(__x: f64, __y: f64, __quo: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn lrint(__x: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lrint(__x: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llrint(__x: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llrint(__x: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn lround(__x: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lround(__x: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llround(__x: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llround(__x: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn fdim(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __fdim(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn fmax(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __fmax(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn fmin(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn __fmin(__x: f64, __y: f64) -> f64; -} -extern "C" { - pub fn fma(__x: f64, __y: f64, __z: f64) -> f64; -} -extern "C" { - pub fn __fma(__x: f64, __y: f64, __z: f64) -> f64; -} -extern "C" { - pub fn __fpclassifyf(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __signbitf(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isinff(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __finitef(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isnanf(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __iseqsigf(__x: f32, __y: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __issignalingf(__value: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn acosf(__x: f32) -> f32; -} -extern "C" { - pub fn __acosf(__x: f32) -> f32; -} -extern "C" { - pub fn asinf(__x: f32) -> f32; -} -extern "C" { - pub fn __asinf(__x: f32) -> f32; -} -extern "C" { - pub fn atanf(__x: f32) -> f32; -} -extern "C" { - pub fn __atanf(__x: f32) -> f32; -} -extern "C" { - pub fn atan2f(__y: f32, __x: f32) -> f32; -} -extern "C" { - pub fn __atan2f(__y: f32, __x: f32) -> f32; -} -extern "C" { - pub fn cosf(__x: f32) -> f32; -} -extern "C" { - pub fn __cosf(__x: f32) -> f32; -} -extern "C" { - pub fn sinf(__x: f32) -> f32; -} -extern "C" { - pub fn __sinf(__x: f32) -> f32; -} -extern "C" { - pub fn tanf(__x: f32) -> f32; -} -extern "C" { - pub fn __tanf(__x: f32) -> f32; -} -extern "C" { - pub fn coshf(__x: f32) -> f32; -} -extern "C" { - pub fn __coshf(__x: f32) -> f32; -} -extern "C" { - pub fn sinhf(__x: f32) -> f32; -} -extern "C" { - pub fn __sinhf(__x: f32) -> f32; -} -extern "C" { - pub fn tanhf(__x: f32) -> f32; -} -extern "C" { - pub fn __tanhf(__x: f32) -> f32; -} -extern "C" { - pub fn acoshf(__x: f32) -> f32; -} -extern "C" { - pub fn __acoshf(__x: f32) -> f32; -} -extern "C" { - pub fn asinhf(__x: f32) -> f32; -} -extern "C" { - pub fn __asinhf(__x: f32) -> f32; -} -extern "C" { - pub fn atanhf(__x: f32) -> f32; -} -extern "C" { - pub fn __atanhf(__x: f32) -> f32; -} -extern "C" { - pub fn expf(__x: f32) -> f32; -} -extern "C" { - pub fn __expf(__x: f32) -> f32; -} -extern "C" { - pub fn frexpf(__x: f32, __exponent: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn __frexpf(__x: f32, __exponent: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn ldexpf(__x: f32, __exponent: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn __ldexpf(__x: f32, __exponent: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn logf(__x: f32) -> f32; -} -extern "C" { - pub fn __logf(__x: f32) -> f32; -} -extern "C" { - pub fn log10f(__x: f32) -> f32; -} -extern "C" { - pub fn __log10f(__x: f32) -> f32; -} -extern "C" { - pub fn modff(__x: f32, __iptr: *mut f32) -> f32; -} -extern "C" { - pub fn __modff(__x: f32, __iptr: *mut f32) -> f32; -} -extern "C" { - pub fn expm1f(__x: f32) -> f32; -} -extern "C" { - pub fn __expm1f(__x: f32) -> f32; -} -extern "C" { - pub fn log1pf(__x: f32) -> f32; -} -extern "C" { - pub fn __log1pf(__x: f32) -> f32; -} -extern "C" { - pub fn logbf(__x: f32) -> f32; -} -extern "C" { - pub fn __logbf(__x: f32) -> f32; -} -extern "C" { - pub fn exp2f(__x: f32) -> f32; -} -extern "C" { - pub fn __exp2f(__x: f32) -> f32; -} -extern "C" { - pub fn log2f(__x: f32) -> f32; -} -extern "C" { - pub fn __log2f(__x: f32) -> f32; -} -extern "C" { - pub fn powf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __powf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn sqrtf(__x: f32) -> f32; -} -extern "C" { - pub fn __sqrtf(__x: f32) -> f32; -} -extern "C" { - pub fn hypotf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __hypotf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn cbrtf(__x: f32) -> f32; -} -extern "C" { - pub fn __cbrtf(__x: f32) -> f32; -} -extern "C" { - pub fn ceilf(__x: f32) -> f32; -} -extern "C" { - pub fn __ceilf(__x: f32) -> f32; -} -extern "C" { - pub fn fabsf(__x: f32) -> f32; -} -extern "C" { - pub fn __fabsf(__x: f32) -> f32; -} -extern "C" { - pub fn floorf(__x: f32) -> f32; -} -extern "C" { - pub fn __floorf(__x: f32) -> f32; -} -extern "C" { - pub fn fmodf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __fmodf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn copysignf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __copysignf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn nanf(__tagb: *const ::std::os::raw::c_char) -> f32; -} -extern "C" { - pub fn __nanf(__tagb: *const ::std::os::raw::c_char) -> f32; -} -extern "C" { - pub fn erff(arg1: f32) -> f32; -} -extern "C" { - pub fn __erff(arg1: f32) -> f32; -} -extern "C" { - pub fn erfcf(arg1: f32) -> f32; -} -extern "C" { - pub fn __erfcf(arg1: f32) -> f32; -} -extern "C" { - pub fn lgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn __lgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn tgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn __tgammaf(arg1: f32) -> f32; -} -extern "C" { - pub fn rintf(__x: f32) -> f32; -} -extern "C" { - pub fn __rintf(__x: f32) -> f32; -} -extern "C" { - pub fn nextafterf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __nextafterf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn nexttowardf(__x: f32, __y: u128) -> f32; -} -extern "C" { - pub fn __nexttowardf(__x: f32, __y: u128) -> f32; -} -extern "C" { - pub fn remainderf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __remainderf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn scalbnf(__x: f32, __n: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn __scalbnf(__x: f32, __n: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn ilogbf(__x: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __ilogbf(__x: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn scalblnf(__x: f32, __n: ::std::os::raw::c_long) -> f32; -} -extern "C" { - pub fn __scalblnf(__x: f32, __n: ::std::os::raw::c_long) -> f32; -} -extern "C" { - pub fn nearbyintf(__x: f32) -> f32; -} -extern "C" { - pub fn __nearbyintf(__x: f32) -> f32; -} -extern "C" { - pub fn roundf(__x: f32) -> f32; -} -extern "C" { - pub fn __roundf(__x: f32) -> f32; -} -extern "C" { - pub fn truncf(__x: f32) -> f32; -} -extern "C" { - pub fn __truncf(__x: f32) -> f32; -} -extern "C" { - pub fn remquof(__x: f32, __y: f32, __quo: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn __remquof(__x: f32, __y: f32, __quo: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn lrintf(__x: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lrintf(__x: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llrintf(__x: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llrintf(__x: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn lroundf(__x: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lroundf(__x: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llroundf(__x: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llroundf(__x: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn fdimf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __fdimf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn fmaxf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __fmaxf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn fminf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn __fminf(__x: f32, __y: f32) -> f32; -} -extern "C" { - pub fn fmaf(__x: f32, __y: f32, __z: f32) -> f32; -} -extern "C" { - pub fn __fmaf(__x: f32, __y: f32, __z: f32) -> f32; -} -extern "C" { - pub fn __fpclassifyl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __signbitl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isinfl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __finitel(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __isnanl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __iseqsigl(__x: u128, __y: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __issignalingl(__value: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn acosl(__x: u128) -> u128; -} -extern "C" { - pub fn __acosl(__x: u128) -> u128; -} -extern "C" { - pub fn asinl(__x: u128) -> u128; -} -extern "C" { - pub fn __asinl(__x: u128) -> u128; -} -extern "C" { - pub fn atanl(__x: u128) -> u128; -} -extern "C" { - pub fn __atanl(__x: u128) -> u128; -} -extern "C" { - pub fn atan2l(__y: u128, __x: u128) -> u128; -} -extern "C" { - pub fn __atan2l(__y: u128, __x: u128) -> u128; -} -extern "C" { - pub fn cosl(__x: u128) -> u128; -} -extern "C" { - pub fn __cosl(__x: u128) -> u128; -} -extern "C" { - pub fn sinl(__x: u128) -> u128; -} -extern "C" { - pub fn __sinl(__x: u128) -> u128; -} -extern "C" { - pub fn tanl(__x: u128) -> u128; -} -extern "C" { - pub fn __tanl(__x: u128) -> u128; -} -extern "C" { - pub fn coshl(__x: u128) -> u128; -} -extern "C" { - pub fn __coshl(__x: u128) -> u128; -} -extern "C" { - pub fn sinhl(__x: u128) -> u128; -} -extern "C" { - pub fn __sinhl(__x: u128) -> u128; -} -extern "C" { - pub fn tanhl(__x: u128) -> u128; -} -extern "C" { - pub fn __tanhl(__x: u128) -> u128; -} -extern "C" { - pub fn acoshl(__x: u128) -> u128; -} -extern "C" { - pub fn __acoshl(__x: u128) -> u128; -} -extern "C" { - pub fn asinhl(__x: u128) -> u128; -} -extern "C" { - pub fn __asinhl(__x: u128) -> u128; -} -extern "C" { - pub fn atanhl(__x: u128) -> u128; -} -extern "C" { - pub fn __atanhl(__x: u128) -> u128; -} -extern "C" { - pub fn expl(__x: u128) -> u128; -} -extern "C" { - pub fn __expl(__x: u128) -> u128; -} -extern "C" { - pub fn frexpl(__x: u128, __exponent: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn __frexpl(__x: u128, __exponent: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn ldexpl(__x: u128, __exponent: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn __ldexpl(__x: u128, __exponent: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn logl(__x: u128) -> u128; -} -extern "C" { - pub fn __logl(__x: u128) -> u128; -} -extern "C" { - pub fn log10l(__x: u128) -> u128; -} -extern "C" { - pub fn __log10l(__x: u128) -> u128; -} -extern "C" { - pub fn modfl(__x: u128, __iptr: *mut u128) -> u128; -} -extern "C" { - pub fn __modfl(__x: u128, __iptr: *mut u128) -> u128; -} -extern "C" { - pub fn expm1l(__x: u128) -> u128; -} -extern "C" { - pub fn __expm1l(__x: u128) -> u128; -} -extern "C" { - pub fn log1pl(__x: u128) -> u128; -} -extern "C" { - pub fn __log1pl(__x: u128) -> u128; -} -extern "C" { - pub fn logbl(__x: u128) -> u128; -} -extern "C" { - pub fn __logbl(__x: u128) -> u128; -} -extern "C" { - pub fn exp2l(__x: u128) -> u128; -} -extern "C" { - pub fn __exp2l(__x: u128) -> u128; -} -extern "C" { - pub fn log2l(__x: u128) -> u128; -} -extern "C" { - pub fn __log2l(__x: u128) -> u128; -} -extern "C" { - pub fn powl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __powl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn sqrtl(__x: u128) -> u128; -} -extern "C" { - pub fn __sqrtl(__x: u128) -> u128; -} -extern "C" { - pub fn hypotl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __hypotl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn cbrtl(__x: u128) -> u128; -} -extern "C" { - pub fn __cbrtl(__x: u128) -> u128; -} -extern "C" { - pub fn ceill(__x: u128) -> u128; -} -extern "C" { - pub fn __ceill(__x: u128) -> u128; -} -extern "C" { - pub fn fabsl(__x: u128) -> u128; -} -extern "C" { - pub fn __fabsl(__x: u128) -> u128; -} -extern "C" { - pub fn floorl(__x: u128) -> u128; -} -extern "C" { - pub fn __floorl(__x: u128) -> u128; -} -extern "C" { - pub fn fmodl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __fmodl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn copysignl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __copysignl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn nanl(__tagb: *const ::std::os::raw::c_char) -> u128; -} -extern "C" { - pub fn __nanl(__tagb: *const ::std::os::raw::c_char) -> u128; -} -extern "C" { - pub fn erfl(arg1: u128) -> u128; -} -extern "C" { - pub fn __erfl(arg1: u128) -> u128; -} -extern "C" { - pub fn erfcl(arg1: u128) -> u128; -} -extern "C" { - pub fn __erfcl(arg1: u128) -> u128; -} -extern "C" { - pub fn lgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn __lgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn tgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn __tgammal(arg1: u128) -> u128; -} -extern "C" { - pub fn rintl(__x: u128) -> u128; -} -extern "C" { - pub fn __rintl(__x: u128) -> u128; -} -extern "C" { - pub fn nextafterl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __nextafterl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn nexttowardl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __nexttowardl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn remainderl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __remainderl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn scalbnl(__x: u128, __n: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn __scalbnl(__x: u128, __n: ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn ilogbl(__x: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __ilogbl(__x: u128) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn scalblnl(__x: u128, __n: ::std::os::raw::c_long) -> u128; -} -extern "C" { - pub fn __scalblnl(__x: u128, __n: ::std::os::raw::c_long) -> u128; -} -extern "C" { - pub fn nearbyintl(__x: u128) -> u128; -} -extern "C" { - pub fn __nearbyintl(__x: u128) -> u128; -} -extern "C" { - pub fn roundl(__x: u128) -> u128; -} -extern "C" { - pub fn __roundl(__x: u128) -> u128; -} -extern "C" { - pub fn truncl(__x: u128) -> u128; -} -extern "C" { - pub fn __truncl(__x: u128) -> u128; -} -extern "C" { - pub fn remquol(__x: u128, __y: u128, __quo: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn __remquol(__x: u128, __y: u128, __quo: *mut ::std::os::raw::c_int) -> u128; -} -extern "C" { - pub fn lrintl(__x: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lrintl(__x: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llrintl(__x: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llrintl(__x: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn lroundl(__x: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn __lroundl(__x: u128) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llroundl(__x: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn __llroundl(__x: u128) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn fdiml(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __fdiml(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn fmaxl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __fmaxl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn fminl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn __fminl(__x: u128, __y: u128) -> u128; -} -extern "C" { - pub fn fmal(__x: u128, __y: u128, __z: u128) -> u128; -} -extern "C" { - pub fn __fmal(__x: u128, __y: u128, __z: u128) -> u128; -} - -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum _bindgen_ty_1 { - FP_NAN = 0, - FP_INFINITE = 1, - FP_ZERO = 2, - FP_SUBNORMAL = 3, - FP_NORMAL = 4, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GlVersion { - OPENGL_11 = 1, - OPENGL_21 = 2, - OPENGL_33 = 3, - OPENGL_ES_20 = 4, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum FramebufferAttachType { - RL_ATTACHMENT_COLOR_CHANNEL0 = 0, - RL_ATTACHMENT_COLOR_CHANNEL1 = 1, - RL_ATTACHMENT_COLOR_CHANNEL2 = 2, - RL_ATTACHMENT_COLOR_CHANNEL3 = 3, - RL_ATTACHMENT_COLOR_CHANNEL4 = 4, - RL_ATTACHMENT_COLOR_CHANNEL5 = 5, - RL_ATTACHMENT_COLOR_CHANNEL6 = 6, - RL_ATTACHMENT_COLOR_CHANNEL7 = 7, - RL_ATTACHMENT_DEPTH = 100, - RL_ATTACHMENT_STENCIL = 200, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum FramebufferTexType { - RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0, - RL_ATTACHMENT_CUBEMAP_NEGATIVE_X = 1, - RL_ATTACHMENT_CUBEMAP_POSITIVE_Y = 2, - RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y = 3, - RL_ATTACHMENT_CUBEMAP_POSITIVE_Z = 4, - RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z = 5, - RL_ATTACHMENT_TEXTURE2D = 100, - RL_ATTACHMENT_RENDERBUFFER = 200, -} -extern "C" { - pub fn rlMatrixMode(mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlPushMatrix(); -} -extern "C" { - pub fn rlPopMatrix(); -} -extern "C" { - pub fn rlLoadIdentity(); -} -extern "C" { - pub fn rlTranslatef(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlRotatef(angleDeg: f32, x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlScalef(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlMultMatrixf(matf: *mut f32); -} -extern "C" { - pub fn rlFrustum(left: f64, right: f64, bottom: f64, top: f64, znear: f64, zfar: f64); -} -extern "C" { - pub fn rlOrtho(left: f64, right: f64, bottom: f64, top: f64, znear: f64, zfar: f64); -} -extern "C" { - pub fn rlViewport( - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlBegin(mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlEnd(); -} -extern "C" { - pub fn rlVertex2i(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlVertex2f(x: f32, y: f32); -} -extern "C" { - pub fn rlVertex3f(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlTexCoord2f(x: f32, y: f32); -} -extern "C" { - pub fn rlNormal3f(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlColor4ub( - r: ::std::os::raw::c_uchar, - g: ::std::os::raw::c_uchar, - b: ::std::os::raw::c_uchar, - a: ::std::os::raw::c_uchar, - ); -} -extern "C" { - pub fn rlColor3f(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlColor4f(x: f32, y: f32, z: f32, w: f32); -} -extern "C" { - pub fn rlEnableTexture(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableTexture(); -} -extern "C" { - pub fn rlTextureParameters( - id: ::std::os::raw::c_uint, - param: ::std::os::raw::c_int, - value: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlEnableShader(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableShader(); -} -extern "C" { - pub fn rlEnableFramebuffer(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableFramebuffer(); -} -extern "C" { - pub fn rlEnableDepthTest(); -} -extern "C" { - pub fn rlDisableDepthTest(); -} -extern "C" { - pub fn rlEnableDepthMask(); -} -extern "C" { - pub fn rlDisableDepthMask(); -} -extern "C" { - pub fn rlEnableBackfaceCulling(); -} -extern "C" { - pub fn rlDisableBackfaceCulling(); -} -extern "C" { - pub fn rlEnableScissorTest(); -} -extern "C" { - pub fn rlDisableScissorTest(); -} -extern "C" { - pub fn rlScissor( - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlEnableWireMode(); -} -extern "C" { - pub fn rlDisableWireMode(); -} -extern "C" { - pub fn rlSetLineWidth(width: f32); -} -extern "C" { - pub fn rlGetLineWidth() -> f32; -} -extern "C" { - pub fn rlEnableSmoothLines(); -} -extern "C" { - pub fn rlDisableSmoothLines(); -} -extern "C" { - pub fn rlClearColor( - r: ::std::os::raw::c_uchar, - g: ::std::os::raw::c_uchar, - b: ::std::os::raw::c_uchar, - a: ::std::os::raw::c_uchar, - ); -} -extern "C" { - pub fn rlClearScreenBuffers(); -} -extern "C" { - pub fn rlUpdateBuffer( - bufferId: ::std::os::raw::c_int, - data: *mut ::std::os::raw::c_void, - dataSize: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlLoadAttribBuffer( - vaoId: ::std::os::raw::c_uint, - shaderLoc: ::std::os::raw::c_int, - buffer: *mut ::std::os::raw::c_void, - size: ::std::os::raw::c_int, - dynamic: bool, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlglInit(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlglClose(); -} -extern "C" { - pub fn rlglDraw(); -} -extern "C" { - pub fn rlCheckErrors(); -} -extern "C" { - pub fn rlGetVersion() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rlCheckBufferLimit(vCount: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn rlSetDebugMarker(text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn rlSetBlendMode( - glSrcFactor: ::std::os::raw::c_int, - glDstFactor: ::std::os::raw::c_int, - glEquation: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlLoadExtensions(loader: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn rlLoadTexture( - data: *mut ::std::os::raw::c_void, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - mipmapCount: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlLoadTextureDepth( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - useRenderBuffer: bool, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlLoadTextureCubemap( - data: *mut ::std::os::raw::c_void, - size: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlUpdateTexture( - id: ::std::os::raw::c_uint, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - data: *const ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn rlGetGlTextureFormats( - format: ::std::os::raw::c_int, - glInternalFormat: *mut ::std::os::raw::c_uint, - glFormat: *mut ::std::os::raw::c_uint, - glType: *mut ::std::os::raw::c_uint, - ); -} -extern "C" { - pub fn rlUnloadTexture(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlGenerateMipmaps(texture: *mut Texture2D); -} -extern "C" { - pub fn rlReadTexturePixels(texture: Texture2D) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn rlReadScreenPixels( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn rlLoadFramebuffer( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlFramebufferAttach( - fboId: ::std::os::raw::c_uint, - texId: ::std::os::raw::c_uint, - attachType: ::std::os::raw::c_int, - texType: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlFramebufferComplete(id: ::std::os::raw::c_uint) -> bool; -} -extern "C" { - pub fn rlUnloadFramebuffer(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlLoadMesh(mesh: *mut Mesh, dynamic: bool); -} -extern "C" { - pub fn rlUpdateMesh(mesh: Mesh, buffer: ::std::os::raw::c_int, count: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlUpdateMeshAt( - mesh: Mesh, - buffer: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - index: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlDrawMesh(mesh: Mesh, material: Material, transform: Matrix); -} -extern "C" { - pub fn rlDrawMeshInstanced( - mesh: Mesh, - material: Material, - transforms: *mut Matrix, - count: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlUnloadMesh(mesh: Mesh); -} -pub type size_t = ::std::os::raw::c_ulong; -pub type wchar_t = ::std::os::raw::c_int; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct div_t { - pub quot: ::std::os::raw::c_int, - pub rem: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_div_t() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(div_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(div_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(div_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(div_t), - "::", - stringify!(rem) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct ldiv_t { - pub quot: ::std::os::raw::c_long, - pub rem: ::std::os::raw::c_long, -} -#[test] -fn bindgen_test_layout_ldiv_t() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(ldiv_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(ldiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(ldiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(ldiv_t), - "::", - stringify!(rem) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct lldiv_t { - pub quot: ::std::os::raw::c_longlong, - pub rem: ::std::os::raw::c_longlong, -} -#[test] -fn bindgen_test_layout_lldiv_t() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(lldiv_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(lldiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(lldiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(lldiv_t), - "::", - stringify!(rem) - ) - ); -} -extern "C" { - pub fn __ctype_get_mb_cur_max() -> size_t; -} -extern "C" { - pub fn atof(__nptr: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn atoi(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn atol(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn atoll(__nptr: *const ::std::os::raw::c_char) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn strtod( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - ) -> f64; -} -extern "C" { - pub fn strtof( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - ) -> f32; -} -extern "C" { - pub fn strtold( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - ) -> u128; -} -extern "C" { - pub fn strtol( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn strtoul( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strtoll( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn strtoull( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn rand() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn srand(__seed: ::std::os::raw::c_uint); -} -extern "C" { - pub fn malloc(__size: ::std::os::raw::c_ulong) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn calloc( - __nmemb: ::std::os::raw::c_ulong, - __size: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn realloc( - __ptr: *mut ::std::os::raw::c_void, - __size: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn free(__ptr: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn aligned_alloc(__alignment: size_t, __size: size_t) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn abort(); -} -extern "C" { - pub fn atexit(__func: ::std::option::Option) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn at_quick_exit( - __func: ::std::option::Option, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn exit(__status: ::std::os::raw::c_int); -} -extern "C" { - pub fn quick_exit(__status: ::std::os::raw::c_int); -} -extern "C" { - pub fn _Exit(__status: ::std::os::raw::c_int); -} -extern "C" { - pub fn getenv(__name: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn system(__command: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -pub type __compar_fn_t = ::std::option::Option< - unsafe extern "C" fn( - arg1: *const ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, ->; -extern "C" { - pub fn bsearch( - __key: *const ::std::os::raw::c_void, - __base: *const ::std::os::raw::c_void, - __nmemb: size_t, - __size: size_t, - __compar: __compar_fn_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn qsort( - __base: *mut ::std::os::raw::c_void, - __nmemb: size_t, - __size: size_t, - __compar: __compar_fn_t, - ); -} -extern "C" { - pub fn abs(__x: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn labs(__x: ::std::os::raw::c_long) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llabs(__x: ::std::os::raw::c_longlong) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn div(__numer: ::std::os::raw::c_int, __denom: ::std::os::raw::c_int) -> div_t; -} -extern "C" { - pub fn ldiv(__numer: ::std::os::raw::c_long, __denom: ::std::os::raw::c_long) -> ldiv_t; -} -extern "C" { - pub fn lldiv( - __numer: ::std::os::raw::c_longlong, - __denom: ::std::os::raw::c_longlong, - ) -> lldiv_t; -} -extern "C" { - pub fn mblen(__s: *const ::std::os::raw::c_char, __n: size_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mbtowc( - __pwc: *mut wchar_t, - __s: *const ::std::os::raw::c_char, - __n: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wctomb(__s: *mut ::std::os::raw::c_char, __wchar: wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mbstowcs( - __pwcs: *mut wchar_t, - __s: *const ::std::os::raw::c_char, - __n: size_t, - ) -> size_t; -} -extern "C" { - pub fn wcstombs( - __s: *mut ::std::os::raw::c_char, - __pwcs: *const wchar_t, - __n: size_t, - ) -> size_t; -} -extern "C" { - pub fn memcpy( - __dest: *mut ::std::os::raw::c_void, - __src: *const ::std::os::raw::c_void, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memmove( - __dest: *mut ::std::os::raw::c_void, - __src: *const ::std::os::raw::c_void, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memset( - __s: *mut ::std::os::raw::c_void, - __c: ::std::os::raw::c_int, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memcmp( - __s1: *const ::std::os::raw::c_void, - __s2: *const ::std::os::raw::c_void, - __n: ::std::os::raw::c_ulong, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn memchr( - __s: *const ::std::os::raw::c_void, - __c: ::std::os::raw::c_int, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn strcpy( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strncpy( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcat( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strncat( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcmp( - __s1: *const ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strncmp( - __s1: *const ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strcoll( - __s1: *const ::std::os::raw::c_char, - __s2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strxfrm( - __dest: *mut ::std::os::raw::c_char, - __src: *const ::std::os::raw::c_char, - __n: ::std::os::raw::c_ulong, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strchr( - __s: *const ::std::os::raw::c_char, - __c: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strrchr( - __s: *const ::std::os::raw::c_char, - __c: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcspn( - __s: *const ::std::os::raw::c_char, - __reject: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strspn( - __s: *const ::std::os::raw::c_char, - __accept: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strpbrk( - __s: *const ::std::os::raw::c_char, - __accept: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strstr( - __haystack: *const ::std::os::raw::c_char, - __needle: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strtok( - __s: *mut ::std::os::raw::c_char, - __delim: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn __strtok_r( - __s: *mut ::std::os::raw::c_char, - __delim: *const ::std::os::raw::c_char, - __save_ptr: *mut *mut ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strlen(__s: *const ::std::os::raw::c_char) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strerror(__errnum: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct gladGLversionStruct { - pub major: ::std::os::raw::c_int, - pub minor: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_gladGLversionStruct() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(gladGLversionStruct)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(gladGLversionStruct)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).major as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(gladGLversionStruct), - "::", - stringify!(major) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).minor as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(gladGLversionStruct), - "::", - stringify!(minor) - ) - ); -} -pub type GLADloadproc = ::std::option::Option< - unsafe extern "C" fn(name: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_void, ->; -extern "C" { - pub static mut GLVersion: gladGLversionStruct; -} -extern "C" { - pub fn gladLoadGLLoader(arg1: GLADloadproc) -> ::std::os::raw::c_int; -} -#[repr(C)] -#[repr(align(16))] -#[derive(Debug, Copy, Clone)] -pub struct max_align_t { - pub __clang_max_align_nonce1: ::std::os::raw::c_longlong, - pub __bindgen_padding_0: u64, - pub __clang_max_align_nonce2: u128, -} -#[test] -fn bindgen_test_layout_max_align_t() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(max_align_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 16usize, - concat!("Alignment of ", stringify!(max_align_t)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).__clang_max_align_nonce1 as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(max_align_t), - "::", - stringify!(__clang_max_align_nonce1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).__clang_max_align_nonce2 as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(max_align_t), - "::", - stringify!(__clang_max_align_nonce2) - ) - ); -} -pub type int_least8_t = __int_least8_t; -pub type int_least16_t = __int_least16_t; -pub type int_least32_t = __int_least32_t; -pub type int_least64_t = __int_least64_t; -pub type uint_least8_t = __uint_least8_t; -pub type uint_least16_t = __uint_least16_t; -pub type uint_least32_t = __uint_least32_t; -pub type uint_least64_t = __uint_least64_t; -pub type int_fast8_t = ::std::os::raw::c_schar; -pub type int_fast16_t = ::std::os::raw::c_long; -pub type int_fast32_t = ::std::os::raw::c_long; -pub type int_fast64_t = ::std::os::raw::c_long; -pub type uint_fast8_t = ::std::os::raw::c_uchar; -pub type uint_fast16_t = ::std::os::raw::c_ulong; -pub type uint_fast32_t = ::std::os::raw::c_ulong; -pub type uint_fast64_t = ::std::os::raw::c_ulong; -pub type intmax_t = __intmax_t; -pub type uintmax_t = __uintmax_t; -pub type __gwchar_t = ::std::os::raw::c_int; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct imaxdiv_t { - pub quot: ::std::os::raw::c_long, - pub rem: ::std::os::raw::c_long, -} -#[test] -fn bindgen_test_layout_imaxdiv_t() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(imaxdiv_t)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(imaxdiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(imaxdiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rem as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(imaxdiv_t), - "::", - stringify!(rem) - ) - ); -} -extern "C" { - pub fn imaxabs(__n: intmax_t) -> intmax_t; -} -extern "C" { - pub fn imaxdiv(__numer: intmax_t, __denom: intmax_t) -> imaxdiv_t; -} -extern "C" { - pub fn strtoimax( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> intmax_t; -} -extern "C" { - pub fn strtoumax( - __nptr: *const ::std::os::raw::c_char, - __endptr: *mut *mut ::std::os::raw::c_char, - __base: ::std::os::raw::c_int, - ) -> uintmax_t; -} -extern "C" { - pub fn wcstoimax( - __nptr: *const __gwchar_t, - __endptr: *mut *mut __gwchar_t, - __base: ::std::os::raw::c_int, - ) -> intmax_t; -} -extern "C" { - pub fn wcstoumax( - __nptr: *const __gwchar_t, - __endptr: *mut *mut __gwchar_t, - __base: ::std::os::raw::c_int, - ) -> uintmax_t; -} -pub type GLenum = ::std::os::raw::c_uint; -pub type GLboolean = ::std::os::raw::c_uchar; -pub type GLbitfield = ::std::os::raw::c_uint; -pub type GLvoid = ::std::os::raw::c_void; -pub type GLbyte = ::std::os::raw::c_schar; -pub type GLshort = ::std::os::raw::c_short; -pub type GLint = ::std::os::raw::c_int; -pub type GLclampx = ::std::os::raw::c_int; -pub type GLubyte = ::std::os::raw::c_uchar; -pub type GLushort = ::std::os::raw::c_ushort; -pub type GLuint = ::std::os::raw::c_uint; -pub type GLsizei = ::std::os::raw::c_int; -pub type GLfloat = f32; -pub type GLclampf = f32; -pub type GLdouble = f64; -pub type GLclampd = f64; -pub type GLeglImageOES = *mut ::std::os::raw::c_void; -pub type GLchar = ::std::os::raw::c_char; -pub type GLcharARB = ::std::os::raw::c_char; -pub type GLhandleARB = ::std::os::raw::c_uint; -pub type GLhalfARB = ::std::os::raw::c_ushort; -pub type GLhalf = ::std::os::raw::c_ushort; -pub type GLfixed = GLint; -pub type GLintptr = isize; -pub type GLsizeiptr = isize; -pub type GLint64 = i64; -pub type GLuint64 = u64; -pub type GLintptrARB = isize; -pub type GLsizeiptrARB = isize; -pub type GLint64EXT = i64; -pub type GLuint64EXT = u64; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __GLsync { - _unused: [u8; 0], -} -pub type GLsync = *mut __GLsync; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _cl_context { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _cl_event { - _unused: [u8; 0], -} -pub type GLDEBUGPROC = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - id: GLuint, - severity: GLenum, - length: GLsizei, - message: *const GLchar, - userParam: *const ::std::os::raw::c_void, - ), ->; -pub type GLDEBUGPROCARB = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - id: GLuint, - severity: GLenum, - length: GLsizei, - message: *const GLchar, - userParam: *const ::std::os::raw::c_void, - ), ->; -pub type GLDEBUGPROCKHR = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - id: GLuint, - severity: GLenum, - length: GLsizei, - message: *const GLchar, - userParam: *const ::std::os::raw::c_void, - ), ->; -pub type GLDEBUGPROCAMD = ::std::option::Option< - unsafe extern "C" fn( - id: GLuint, - category: GLenum, - severity: GLenum, - length: GLsizei, - message: *const GLchar, - userParam: *mut ::std::os::raw::c_void, - ), ->; -pub type GLhalfNV = ::std::os::raw::c_ushort; -pub type GLvdpauSurfaceNV = GLintptr; -extern "C" { - pub static mut GLAD_GL_VERSION_1_0: ::std::os::raw::c_int; -} -pub type PFNGLCULLFACEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glCullFace: PFNGLCULLFACEPROC; -} -pub type PFNGLFRONTFACEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glFrontFace: PFNGLFRONTFACEPROC; -} -pub type PFNGLHINTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glHint: PFNGLHINTPROC; -} -pub type PFNGLLINEWIDTHPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glLineWidth: PFNGLLINEWIDTHPROC; -} -pub type PFNGLPOINTSIZEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glPointSize: PFNGLPOINTSIZEPROC; -} -pub type PFNGLPOLYGONMODEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPolygonMode: PFNGLPOLYGONMODEPROC; -} -pub type PFNGLSCISSORPROC = ::std::option::Option< - unsafe extern "C" fn(x: GLint, y: GLint, width: GLsizei, height: GLsizei), ->; -extern "C" { - pub static mut glad_glScissor: PFNGLSCISSORPROC; -} -pub type PFNGLTEXPARAMETERFPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexParameterf: PFNGLTEXPARAMETERFPROC; -} -pub type PFNGLTEXPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLfloat), ->; -extern "C" { - pub static mut glad_glTexParameterfv: PFNGLTEXPARAMETERFVPROC; -} -pub type PFNGLTEXPARAMETERIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexParameteri: PFNGLTEXPARAMETERIPROC; -} -pub type PFNGLTEXPARAMETERIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLint), ->; -extern "C" { - pub static mut glad_glTexParameteriv: PFNGLTEXPARAMETERIVPROC; -} -pub type PFNGLTEXIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLint, - width: GLsizei, - border: GLint, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexImage1D: PFNGLTEXIMAGE1DPROC; -} -pub type PFNGLTEXIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLint, - width: GLsizei, - height: GLsizei, - border: GLint, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexImage2D: PFNGLTEXIMAGE2DPROC; -} -pub type PFNGLDRAWBUFFERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDrawBuffer: PFNGLDRAWBUFFERPROC; -} -pub type PFNGLCLEARPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glClear: PFNGLCLEARPROC; -} -pub type PFNGLCLEARCOLORPROC = ::std::option::Option< - unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), ->; -extern "C" { - pub static mut glad_glClearColor: PFNGLCLEARCOLORPROC; -} -pub type PFNGLCLEARSTENCILPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glClearStencil: PFNGLCLEARSTENCILPROC; -} -pub type PFNGLCLEARDEPTHPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glClearDepth: PFNGLCLEARDEPTHPROC; -} -pub type PFNGLSTENCILMASKPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glStencilMask: PFNGLSTENCILMASKPROC; -} -pub type PFNGLCOLORMASKPROC = ::std::option::Option< - unsafe extern "C" fn(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean), ->; -extern "C" { - pub static mut glad_glColorMask: PFNGLCOLORMASKPROC; -} -pub type PFNGLDEPTHMASKPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDepthMask: PFNGLDEPTHMASKPROC; -} -pub type PFNGLDISABLEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDisable: PFNGLDISABLEPROC; -} -pub type PFNGLENABLEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEnable: PFNGLENABLEPROC; -} -pub type PFNGLFINISHPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glFinish: PFNGLFINISHPROC; -} -pub type PFNGLFLUSHPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glFlush: PFNGLFLUSHPROC; -} -pub type PFNGLBLENDFUNCPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendFunc: PFNGLBLENDFUNCPROC; -} -pub type PFNGLLOGICOPPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glLogicOp: PFNGLLOGICOPPROC; -} -pub type PFNGLSTENCILFUNCPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glStencilFunc: PFNGLSTENCILFUNCPROC; -} -pub type PFNGLSTENCILOPPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glStencilOp: PFNGLSTENCILOPPROC; -} -pub type PFNGLDEPTHFUNCPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDepthFunc: PFNGLDEPTHFUNCPROC; -} -pub type PFNGLPIXELSTOREFPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPixelStoref: PFNGLPIXELSTOREFPROC; -} -pub type PFNGLPIXELSTOREIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPixelStorei: PFNGLPIXELSTOREIPROC; -} -pub type PFNGLREADBUFFERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glReadBuffer: PFNGLREADBUFFERPROC; -} -pub type PFNGLREADPIXELSPROC = ::std::option::Option< - unsafe extern "C" fn( - x: GLint, - y: GLint, - width: GLsizei, - height: GLsizei, - format: GLenum, - type_: GLenum, - pixels: *mut ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glReadPixels: PFNGLREADPIXELSPROC; -} -pub type PFNGLGETBOOLEANVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetBooleanv: PFNGLGETBOOLEANVPROC; -} -pub type PFNGLGETDOUBLEVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetDoublev: PFNGLGETDOUBLEVPROC; -} -pub type PFNGLGETERRORPROC = ::std::option::Option GLenum>; -extern "C" { - pub static mut glad_glGetError: PFNGLGETERRORPROC; -} -pub type PFNGLGETFLOATVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetFloatv: PFNGLGETFLOATVPROC; -} -pub type PFNGLGETINTEGERVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetIntegerv: PFNGLGETINTEGERVPROC; -} -pub type PFNGLGETSTRINGPROC = - ::std::option::Option *const GLubyte>; -extern "C" { - pub static mut glad_glGetString: PFNGLGETSTRINGPROC; -} -pub type PFNGLGETTEXIMAGEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - format: GLenum, - type_: GLenum, - pixels: *mut ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glGetTexImage: PFNGLGETTEXIMAGEPROC; -} -pub type PFNGLGETTEXPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetTexParameterfv: PFNGLGETTEXPARAMETERFVPROC; -} -pub type PFNGLGETTEXPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetTexParameteriv: PFNGLGETTEXPARAMETERIVPROC; -} -pub type PFNGLGETTEXLEVELPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, level: GLint, pname: GLenum, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetTexLevelParameterfv: PFNGLGETTEXLEVELPARAMETERFVPROC; -} -pub type PFNGLGETTEXLEVELPARAMETERIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, level: GLint, pname: GLenum, params: *mut GLint), ->; -extern "C" { - pub static mut glad_glGetTexLevelParameteriv: PFNGLGETTEXLEVELPARAMETERIVPROC; -} -pub type PFNGLISENABLEDPROC = ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsEnabled: PFNGLISENABLEDPROC; -} -pub type PFNGLDEPTHRANGEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDepthRange: PFNGLDEPTHRANGEPROC; -} -pub type PFNGLVIEWPORTPROC = ::std::option::Option< - unsafe extern "C" fn(x: GLint, y: GLint, width: GLsizei, height: GLsizei), ->; -extern "C" { - pub static mut glad_glViewport: PFNGLVIEWPORTPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_1: ::std::os::raw::c_int; -} -pub type PFNGLDRAWARRAYSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawArrays: PFNGLDRAWARRAYSPROC; -} -pub type PFNGLDRAWELEMENTSPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glDrawElements: PFNGLDRAWELEMENTSPROC; -} -pub type PFNGLPOLYGONOFFSETPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPolygonOffset: PFNGLPOLYGONOFFSETPROC; -} -pub type PFNGLCOPYTEXIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - x: GLint, - y: GLint, - width: GLsizei, - border: GLint, - ), ->; -extern "C" { - pub static mut glad_glCopyTexImage1D: PFNGLCOPYTEXIMAGE1DPROC; -} -pub type PFNGLCOPYTEXIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - x: GLint, - y: GLint, - width: GLsizei, - height: GLsizei, - border: GLint, - ), ->; -extern "C" { - pub static mut glad_glCopyTexImage2D: PFNGLCOPYTEXIMAGE2DPROC; -} -pub type PFNGLCOPYTEXSUBIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - x: GLint, - y: GLint, - width: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glCopyTexSubImage1D: PFNGLCOPYTEXSUBIMAGE1DPROC; -} -pub type PFNGLCOPYTEXSUBIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - x: GLint, - y: GLint, - width: GLsizei, - height: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glCopyTexSubImage2D: PFNGLCOPYTEXSUBIMAGE2DPROC; -} -pub type PFNGLTEXSUBIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - width: GLsizei, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexSubImage1D: PFNGLTEXSUBIMAGE1DPROC; -} -pub type PFNGLTEXSUBIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - width: GLsizei, - height: GLsizei, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexSubImage2D: PFNGLTEXSUBIMAGE2DPROC; -} -pub type PFNGLBINDTEXTUREPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindTexture: PFNGLBINDTEXTUREPROC; -} -pub type PFNGLDELETETEXTURESPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteTextures: PFNGLDELETETEXTURESPROC; -} -pub type PFNGLGENTEXTURESPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenTextures: PFNGLGENTEXTURESPROC; -} -pub type PFNGLISTEXTUREPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsTexture: PFNGLISTEXTUREPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_2: ::std::os::raw::c_int; -} -pub type PFNGLDRAWRANGEELEMENTSPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - start: GLuint, - end: GLuint, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glDrawRangeElements: PFNGLDRAWRANGEELEMENTSPROC; -} -pub type PFNGLTEXIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - border: GLint, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexImage3D: PFNGLTEXIMAGE3DPROC; -} -pub type PFNGLTEXSUBIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - zoffset: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexSubImage3D: PFNGLTEXSUBIMAGE3DPROC; -} -pub type PFNGLCOPYTEXSUBIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - zoffset: GLint, - x: GLint, - y: GLint, - width: GLsizei, - height: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glCopyTexSubImage3D: PFNGLCOPYTEXSUBIMAGE3DPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_3: ::std::os::raw::c_int; -} -pub type PFNGLACTIVETEXTUREPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glActiveTexture: PFNGLACTIVETEXTUREPROC; -} -pub type PFNGLSAMPLECOVERAGEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSampleCoverage: PFNGLSAMPLECOVERAGEPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage3D: PFNGLCOMPRESSEDTEXIMAGE3DPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage2D: PFNGLCOMPRESSEDTEXIMAGE2DPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage1D: PFNGLCOMPRESSEDTEXIMAGE1DPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - zoffset: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage3D: PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - width: GLsizei, - height: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage2D: PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - width: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage1D: PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC; -} -pub type PFNGLGETCOMPRESSEDTEXIMAGEPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, level: GLint, img: *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetCompressedTexImage: PFNGLGETCOMPRESSEDTEXIMAGEPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_4: ::std::os::raw::c_int; -} -pub type PFNGLBLENDFUNCSEPARATEPROC = ::std::option::Option< - unsafe extern "C" fn( - sfactorRGB: GLenum, - dfactorRGB: GLenum, - sfactorAlpha: GLenum, - dfactorAlpha: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlendFuncSeparate: PFNGLBLENDFUNCSEPARATEPROC; -} -pub type PFNGLMULTIDRAWARRAYSPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - first: *const GLint, - count: *const GLsizei, - drawcount: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glMultiDrawArrays: PFNGLMULTIDRAWARRAYSPROC; -} -pub type PFNGLMULTIDRAWELEMENTSPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: *const GLsizei, - type_: GLenum, - indices: *mut *const ::std::os::raw::c_void, - drawcount: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glMultiDrawElements: PFNGLMULTIDRAWELEMENTSPROC; -} -pub type PFNGLPOINTPARAMETERFPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPointParameterf: PFNGLPOINTPARAMETERFPROC; -} -pub type PFNGLPOINTPARAMETERFVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPointParameterfv: PFNGLPOINTPARAMETERFVPROC; -} -pub type PFNGLPOINTPARAMETERIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPointParameteri: PFNGLPOINTPARAMETERIPROC; -} -pub type PFNGLPOINTPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPointParameteriv: PFNGLPOINTPARAMETERIVPROC; -} -pub type PFNGLBLENDCOLORPROC = ::std::option::Option< - unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), ->; -extern "C" { - pub static mut glad_glBlendColor: PFNGLBLENDCOLORPROC; -} -pub type PFNGLBLENDEQUATIONPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquation: PFNGLBLENDEQUATIONPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_5: ::std::os::raw::c_int; -} -pub type PFNGLGENQUERIESPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenQueries: PFNGLGENQUERIESPROC; -} -pub type PFNGLDELETEQUERIESPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteQueries: PFNGLDELETEQUERIESPROC; -} -pub type PFNGLISQUERYPROC = ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsQuery: PFNGLISQUERYPROC; -} -pub type PFNGLBEGINQUERYPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBeginQuery: PFNGLBEGINQUERYPROC; -} -pub type PFNGLENDQUERYPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndQuery: PFNGLENDQUERYPROC; -} -pub type PFNGLGETQUERYIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryiv: PFNGLGETQUERYIVPROC; -} -pub type PFNGLGETQUERYOBJECTIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryObjectiv: PFNGLGETQUERYOBJECTIVPROC; -} -pub type PFNGLGETQUERYOBJECTUIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryObjectuiv: PFNGLGETQUERYOBJECTUIVPROC; -} -pub type PFNGLBINDBUFFERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindBuffer: PFNGLBINDBUFFERPROC; -} -pub type PFNGLDELETEBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteBuffers: PFNGLDELETEBUFFERSPROC; -} -pub type PFNGLGENBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenBuffers: PFNGLGENBUFFERSPROC; -} -pub type PFNGLISBUFFERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsBuffer: PFNGLISBUFFERPROC; -} -pub type PFNGLBUFFERDATAPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - size: GLsizeiptr, - data: *const ::std::os::raw::c_void, - usage: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBufferData: PFNGLBUFFERDATAPROC; -} -pub type PFNGLBUFFERSUBDATAPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptr, - size: GLsizeiptr, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glBufferSubData: PFNGLBUFFERSUBDATAPROC; -} -pub type PFNGLGETBUFFERSUBDATAPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptr, - size: GLsizeiptr, - data: *mut ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glGetBufferSubData: PFNGLGETBUFFERSUBDATAPROC; -} -pub type PFNGLMAPBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, access: GLenum) -> *mut ::std::os::raw::c_void, ->; -extern "C" { - pub static mut glad_glMapBuffer: PFNGLMAPBUFFERPROC; -} -pub type PFNGLUNMAPBUFFERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glUnmapBuffer: PFNGLUNMAPBUFFERPROC; -} -pub type PFNGLGETBUFFERPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetBufferParameteriv: PFNGLGETBUFFERPARAMETERIVPROC; -} -pub type PFNGLGETBUFFERPOINTERVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetBufferPointerv: PFNGLGETBUFFERPOINTERVPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_2_0: ::std::os::raw::c_int; -} -pub type PFNGLBLENDEQUATIONSEPARATEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquationSeparate: PFNGLBLENDEQUATIONSEPARATEPROC; -} -pub type PFNGLDRAWBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawBuffers: PFNGLDRAWBUFFERSPROC; -} -pub type PFNGLSTENCILOPSEPARATEPROC = ::std::option::Option< - unsafe extern "C" fn(face: GLenum, sfail: GLenum, dpfail: GLenum, dppass: GLenum), ->; -extern "C" { - pub static mut glad_glStencilOpSeparate: PFNGLSTENCILOPSEPARATEPROC; -} -pub type PFNGLSTENCILFUNCSEPARATEPROC = ::std::option::Option< - unsafe extern "C" fn(face: GLenum, func: GLenum, ref_: GLint, mask: GLuint), ->; -extern "C" { - pub static mut glad_glStencilFuncSeparate: PFNGLSTENCILFUNCSEPARATEPROC; -} -pub type PFNGLSTENCILMASKSEPARATEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glStencilMaskSeparate: PFNGLSTENCILMASKSEPARATEPROC; -} -pub type PFNGLATTACHSHADERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glAttachShader: PFNGLATTACHSHADERPROC; -} -pub type PFNGLBINDATTRIBLOCATIONPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, index: GLuint, name: *const GLchar), ->; -extern "C" { - pub static mut glad_glBindAttribLocation: PFNGLBINDATTRIBLOCATIONPROC; -} -pub type PFNGLCOMPILESHADERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glCompileShader: PFNGLCOMPILESHADERPROC; -} -pub type PFNGLCREATEPROGRAMPROC = ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glCreateProgram: PFNGLCREATEPROGRAMPROC; -} -pub type PFNGLCREATESHADERPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glCreateShader: PFNGLCREATESHADERPROC; -} -pub type PFNGLDELETEPROGRAMPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteProgram: PFNGLDELETEPROGRAMPROC; -} -pub type PFNGLDELETESHADERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteShader: PFNGLDELETESHADERPROC; -} -pub type PFNGLDETACHSHADERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDetachShader: PFNGLDETACHSHADERPROC; -} -pub type PFNGLDISABLEVERTEXATTRIBARRAYPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDisableVertexAttribArray: PFNGLDISABLEVERTEXATTRIBARRAYPROC; -} -pub type PFNGLENABLEVERTEXATTRIBARRAYPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glEnableVertexAttribArray: PFNGLENABLEVERTEXATTRIBARRAYPROC; -} -pub type PFNGLGETACTIVEATTRIBPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - index: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - size: *mut GLint, - type_: *mut GLenum, - name: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetActiveAttrib: PFNGLGETACTIVEATTRIBPROC; -} -pub type PFNGLGETACTIVEUNIFORMPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - index: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - size: *mut GLint, - type_: *mut GLenum, - name: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniform: PFNGLGETACTIVEUNIFORMPROC; -} -pub type PFNGLGETATTACHEDSHADERSPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - maxCount: GLsizei, - count: *mut GLsizei, - shaders: *mut GLuint, - ), ->; -extern "C" { - pub static mut glad_glGetAttachedShaders: PFNGLGETATTACHEDSHADERSPROC; -} -pub type PFNGLGETATTRIBLOCATIONPROC = - ::std::option::Option GLint>; -extern "C" { - pub static mut glad_glGetAttribLocation: PFNGLGETATTRIBLOCATIONPROC; -} -pub type PFNGLGETPROGRAMIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetProgramiv: PFNGLGETPROGRAMIVPROC; -} -pub type PFNGLGETPROGRAMINFOLOGPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - infoLog: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetProgramInfoLog: PFNGLGETPROGRAMINFOLOGPROC; -} -pub type PFNGLGETSHADERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetShaderiv: PFNGLGETSHADERIVPROC; -} -pub type PFNGLGETSHADERINFOLOGPROC = ::std::option::Option< - unsafe extern "C" fn( - shader: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - infoLog: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetShaderInfoLog: PFNGLGETSHADERINFOLOGPROC; -} -pub type PFNGLGETSHADERSOURCEPROC = ::std::option::Option< - unsafe extern "C" fn( - shader: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - source: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetShaderSource: PFNGLGETSHADERSOURCEPROC; -} -pub type PFNGLGETUNIFORMLOCATIONPROC = - ::std::option::Option GLint>; -extern "C" { - pub static mut glad_glGetUniformLocation: PFNGLGETUNIFORMLOCATIONPROC; -} -pub type PFNGLGETUNIFORMFVPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetUniformfv: PFNGLGETUNIFORMFVPROC; -} -pub type PFNGLGETUNIFORMIVPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLint), ->; -extern "C" { - pub static mut glad_glGetUniformiv: PFNGLGETUNIFORMIVPROC; -} -pub type PFNGLGETVERTEXATTRIBDVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, pname: GLenum, params: *mut GLdouble), ->; -extern "C" { - pub static mut glad_glGetVertexAttribdv: PFNGLGETVERTEXATTRIBDVPROC; -} -pub type PFNGLGETVERTEXATTRIBFVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribfv: PFNGLGETVERTEXATTRIBFVPROC; -} -pub type PFNGLGETVERTEXATTRIBIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribiv: PFNGLGETVERTEXATTRIBIVPROC; -} -pub type PFNGLGETVERTEXATTRIBPOINTERVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, pname: GLenum, pointer: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetVertexAttribPointerv: PFNGLGETVERTEXATTRIBPOINTERVPROC; -} -pub type PFNGLISPROGRAMPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsProgram: PFNGLISPROGRAMPROC; -} -pub type PFNGLISSHADERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsShader: PFNGLISSHADERPROC; -} -pub type PFNGLLINKPROGRAMPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glLinkProgram: PFNGLLINKPROGRAMPROC; -} -pub type PFNGLSHADERSOURCEPROC = ::std::option::Option< - unsafe extern "C" fn( - shader: GLuint, - count: GLsizei, - string: *mut *const GLchar, - length: *const GLint, - ), ->; -extern "C" { - pub static mut glad_glShaderSource: PFNGLSHADERSOURCEPROC; -} -pub type PFNGLUSEPROGRAMPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glUseProgram: PFNGLUSEPROGRAMPROC; -} -pub type PFNGLUNIFORM1FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform1f: PFNGLUNIFORM1FPROC; -} -pub type PFNGLUNIFORM2FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform2f: PFNGLUNIFORM2FPROC; -} -pub type PFNGLUNIFORM3FPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat), ->; -extern "C" { - pub static mut glad_glUniform3f: PFNGLUNIFORM3FPROC; -} -pub type PFNGLUNIFORM4FPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat), ->; -extern "C" { - pub static mut glad_glUniform4f: PFNGLUNIFORM4FPROC; -} -pub type PFNGLUNIFORM1IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform1i: PFNGLUNIFORM1IPROC; -} -pub type PFNGLUNIFORM2IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform2i: PFNGLUNIFORM2IPROC; -} -pub type PFNGLUNIFORM3IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform3i: PFNGLUNIFORM3IPROC; -} -pub type PFNGLUNIFORM4IPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint), ->; -extern "C" { - pub static mut glad_glUniform4i: PFNGLUNIFORM4IPROC; -} -pub type PFNGLUNIFORM1FVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glUniform1fv: PFNGLUNIFORM1FVPROC; -} -pub type PFNGLUNIFORM2FVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glUniform2fv: PFNGLUNIFORM2FVPROC; -} -pub type PFNGLUNIFORM3FVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glUniform3fv: PFNGLUNIFORM3FVPROC; -} -pub type PFNGLUNIFORM4FVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glUniform4fv: PFNGLUNIFORM4FVPROC; -} -pub type PFNGLUNIFORM1IVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), ->; -extern "C" { - pub static mut glad_glUniform1iv: PFNGLUNIFORM1IVPROC; -} -pub type PFNGLUNIFORM2IVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), ->; -extern "C" { - pub static mut glad_glUniform2iv: PFNGLUNIFORM2IVPROC; -} -pub type PFNGLUNIFORM3IVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), ->; -extern "C" { - pub static mut glad_glUniform3iv: PFNGLUNIFORM3IVPROC; -} -pub type PFNGLUNIFORM4IVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), ->; -extern "C" { - pub static mut glad_glUniform4iv: PFNGLUNIFORM4IVPROC; -} -pub type PFNGLUNIFORMMATRIX2FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix2fv: PFNGLUNIFORMMATRIX2FVPROC; -} -pub type PFNGLUNIFORMMATRIX3FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix3fv: PFNGLUNIFORMMATRIX3FVPROC; -} -pub type PFNGLUNIFORMMATRIX4FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix4fv: PFNGLUNIFORMMATRIX4FVPROC; -} -pub type PFNGLVALIDATEPROGRAMPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glValidateProgram: PFNGLVALIDATEPROGRAMPROC; -} -pub type PFNGLVERTEXATTRIB1DPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1d: PFNGLVERTEXATTRIB1DPROC; -} -pub type PFNGLVERTEXATTRIB1DVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1dv: PFNGLVERTEXATTRIB1DVPROC; -} -pub type PFNGLVERTEXATTRIB1FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1f: PFNGLVERTEXATTRIB1FPROC; -} -pub type PFNGLVERTEXATTRIB1FVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1fv: PFNGLVERTEXATTRIB1FVPROC; -} -pub type PFNGLVERTEXATTRIB1SPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1s: PFNGLVERTEXATTRIB1SPROC; -} -pub type PFNGLVERTEXATTRIB1SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1sv: PFNGLVERTEXATTRIB1SVPROC; -} -pub type PFNGLVERTEXATTRIB2DPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2d: PFNGLVERTEXATTRIB2DPROC; -} -pub type PFNGLVERTEXATTRIB2DVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2dv: PFNGLVERTEXATTRIB2DVPROC; -} -pub type PFNGLVERTEXATTRIB2FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2f: PFNGLVERTEXATTRIB2FPROC; -} -pub type PFNGLVERTEXATTRIB2FVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2fv: PFNGLVERTEXATTRIB2FVPROC; -} -pub type PFNGLVERTEXATTRIB2SPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2s: PFNGLVERTEXATTRIB2SPROC; -} -pub type PFNGLVERTEXATTRIB2SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2sv: PFNGLVERTEXATTRIB2SVPROC; -} -pub type PFNGLVERTEXATTRIB3DPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble), ->; -extern "C" { - pub static mut glad_glVertexAttrib3d: PFNGLVERTEXATTRIB3DPROC; -} -pub type PFNGLVERTEXATTRIB3DVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3dv: PFNGLVERTEXATTRIB3DVPROC; -} -pub type PFNGLVERTEXATTRIB3FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3f: PFNGLVERTEXATTRIB3FPROC; -} -pub type PFNGLVERTEXATTRIB3FVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3fv: PFNGLVERTEXATTRIB3FVPROC; -} -pub type PFNGLVERTEXATTRIB3SPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3s: PFNGLVERTEXATTRIB3SPROC; -} -pub type PFNGLVERTEXATTRIB3SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3sv: PFNGLVERTEXATTRIB3SVPROC; -} -pub type PFNGLVERTEXATTRIB4NBVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nbv: PFNGLVERTEXATTRIB4NBVPROC; -} -pub type PFNGLVERTEXATTRIB4NIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Niv: PFNGLVERTEXATTRIB4NIVPROC; -} -pub type PFNGLVERTEXATTRIB4NSVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nsv: PFNGLVERTEXATTRIB4NSVPROC; -} -pub type PFNGLVERTEXATTRIB4NUBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLubyte, y: GLubyte, z: GLubyte, w: GLubyte), ->; -extern "C" { - pub static mut glad_glVertexAttrib4Nub: PFNGLVERTEXATTRIB4NUBPROC; -} -pub type PFNGLVERTEXATTRIB4NUBVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nubv: PFNGLVERTEXATTRIB4NUBVPROC; -} -pub type PFNGLVERTEXATTRIB4NUIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nuiv: PFNGLVERTEXATTRIB4NUIVPROC; -} -pub type PFNGLVERTEXATTRIB4NUSVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nusv: PFNGLVERTEXATTRIB4NUSVPROC; -} -pub type PFNGLVERTEXATTRIB4BVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4bv: PFNGLVERTEXATTRIB4BVPROC; -} -pub type PFNGLVERTEXATTRIB4DPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), ->; -extern "C" { - pub static mut glad_glVertexAttrib4d: PFNGLVERTEXATTRIB4DPROC; -} -pub type PFNGLVERTEXATTRIB4DVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4dv: PFNGLVERTEXATTRIB4DVPROC; -} -pub type PFNGLVERTEXATTRIB4FPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat), ->; -extern "C" { - pub static mut glad_glVertexAttrib4f: PFNGLVERTEXATTRIB4FPROC; -} -pub type PFNGLVERTEXATTRIB4FVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4fv: PFNGLVERTEXATTRIB4FVPROC; -} -pub type PFNGLVERTEXATTRIB4IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4iv: PFNGLVERTEXATTRIB4IVPROC; -} -pub type PFNGLVERTEXATTRIB4SPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLshort, y: GLshort, z: GLshort, w: GLshort), ->; -extern "C" { - pub static mut glad_glVertexAttrib4s: PFNGLVERTEXATTRIB4SPROC; -} -pub type PFNGLVERTEXATTRIB4SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4sv: PFNGLVERTEXATTRIB4SVPROC; -} -pub type PFNGLVERTEXATTRIB4UBVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4ubv: PFNGLVERTEXATTRIB4UBVPROC; -} -pub type PFNGLVERTEXATTRIB4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4uiv: PFNGLVERTEXATTRIB4UIVPROC; -} -pub type PFNGLVERTEXATTRIB4USVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4usv: PFNGLVERTEXATTRIB4USVPROC; -} -pub type PFNGLVERTEXATTRIBPOINTERPROC = ::std::option::Option< - unsafe extern "C" fn( - index: GLuint, - size: GLint, - type_: GLenum, - normalized: GLboolean, - stride: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVertexAttribPointer: PFNGLVERTEXATTRIBPOINTERPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_2_1: ::std::os::raw::c_int; -} -pub type PFNGLUNIFORMMATRIX2X3FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix2x3fv: PFNGLUNIFORMMATRIX2X3FVPROC; -} -pub type PFNGLUNIFORMMATRIX3X2FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix3x2fv: PFNGLUNIFORMMATRIX3X2FVPROC; -} -pub type PFNGLUNIFORMMATRIX2X4FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix2x4fv: PFNGLUNIFORMMATRIX2X4FVPROC; -} -pub type PFNGLUNIFORMMATRIX4X2FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix4x2fv: PFNGLUNIFORMMATRIX4X2FVPROC; -} -pub type PFNGLUNIFORMMATRIX3X4FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix3x4fv: PFNGLUNIFORMMATRIX3X4FVPROC; -} -pub type PFNGLUNIFORMMATRIX4X3FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix4x3fv: PFNGLUNIFORMMATRIX4X3FVPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_3_0: ::std::os::raw::c_int; -} -pub type PFNGLCOLORMASKIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean), ->; -extern "C" { - pub static mut glad_glColorMaski: PFNGLCOLORMASKIPROC; -} -pub type PFNGLGETBOOLEANI_VPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, data: *mut GLboolean), ->; -extern "C" { - pub static mut glad_glGetBooleani_v: PFNGLGETBOOLEANI_VPROC; -} -pub type PFNGLGETINTEGERI_VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetIntegeri_v: PFNGLGETINTEGERI_VPROC; -} -pub type PFNGLENABLEIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glEnablei: PFNGLENABLEIPROC; -} -pub type PFNGLDISABLEIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDisablei: PFNGLDISABLEIPROC; -} -pub type PFNGLISENABLEDIPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsEnabledi: PFNGLISENABLEDIPROC; -} -pub type PFNGLBEGINTRANSFORMFEEDBACKPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBeginTransformFeedback: PFNGLBEGINTRANSFORMFEEDBACKPROC; -} -pub type PFNGLENDTRANSFORMFEEDBACKPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndTransformFeedback: PFNGLENDTRANSFORMFEEDBACKPROC; -} -pub type PFNGLBINDBUFFERRANGEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - buffer: GLuint, - offset: GLintptr, - size: GLsizeiptr, - ), ->; -extern "C" { - pub static mut glad_glBindBufferRange: PFNGLBINDBUFFERRANGEPROC; -} -pub type PFNGLBINDBUFFERBASEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindBufferBase: PFNGLBINDBUFFERBASEPROC; -} -pub type PFNGLTRANSFORMFEEDBACKVARYINGSPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - count: GLsizei, - varyings: *mut *const GLchar, - bufferMode: GLenum, - ), ->; -extern "C" { - pub static mut glad_glTransformFeedbackVaryings: PFNGLTRANSFORMFEEDBACKVARYINGSPROC; -} -pub type PFNGLGETTRANSFORMFEEDBACKVARYINGPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - index: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - size: *mut GLsizei, - type_: *mut GLenum, - name: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetTransformFeedbackVarying: PFNGLGETTRANSFORMFEEDBACKVARYINGPROC; -} -pub type PFNGLCLAMPCOLORPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glClampColor: PFNGLCLAMPCOLORPROC; -} -pub type PFNGLBEGINCONDITIONALRENDERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBeginConditionalRender: PFNGLBEGINCONDITIONALRENDERPROC; -} -pub type PFNGLENDCONDITIONALRENDERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndConditionalRender: PFNGLENDCONDITIONALRENDERPROC; -} -pub type PFNGLVERTEXATTRIBIPOINTERPROC = ::std::option::Option< - unsafe extern "C" fn( - index: GLuint, - size: GLint, - type_: GLenum, - stride: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVertexAttribIPointer: PFNGLVERTEXATTRIBIPOINTERPROC; -} -pub type PFNGLGETVERTEXATTRIBIIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribIiv: PFNGLGETVERTEXATTRIBIIVPROC; -} -pub type PFNGLGETVERTEXATTRIBIUIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribIuiv: PFNGLGETVERTEXATTRIBIUIVPROC; -} -pub type PFNGLVERTEXATTRIBI1IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI1i: PFNGLVERTEXATTRIBI1IPROC; -} -pub type PFNGLVERTEXATTRIBI2IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI2i: PFNGLVERTEXATTRIBI2IPROC; -} -pub type PFNGLVERTEXATTRIBI3IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI3i: PFNGLVERTEXATTRIBI3IPROC; -} -pub type PFNGLVERTEXATTRIBI4IPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint), ->; -extern "C" { - pub static mut glad_glVertexAttribI4i: PFNGLVERTEXATTRIBI4IPROC; -} -pub type PFNGLVERTEXATTRIBI1UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI1ui: PFNGLVERTEXATTRIBI1UIPROC; -} -pub type PFNGLVERTEXATTRIBI2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI2ui: PFNGLVERTEXATTRIBI2UIPROC; -} -pub type PFNGLVERTEXATTRIBI3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI3ui: PFNGLVERTEXATTRIBI3UIPROC; -} -pub type PFNGLVERTEXATTRIBI4UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribI4ui: PFNGLVERTEXATTRIBI4UIPROC; -} -pub type PFNGLVERTEXATTRIBI1IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI1iv: PFNGLVERTEXATTRIBI1IVPROC; -} -pub type PFNGLVERTEXATTRIBI2IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI2iv: PFNGLVERTEXATTRIBI2IVPROC; -} -pub type PFNGLVERTEXATTRIBI3IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI3iv: PFNGLVERTEXATTRIBI3IVPROC; -} -pub type PFNGLVERTEXATTRIBI4IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4iv: PFNGLVERTEXATTRIBI4IVPROC; -} -pub type PFNGLVERTEXATTRIBI1UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI1uiv: PFNGLVERTEXATTRIBI1UIVPROC; -} -pub type PFNGLVERTEXATTRIBI2UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI2uiv: PFNGLVERTEXATTRIBI2UIVPROC; -} -pub type PFNGLVERTEXATTRIBI3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI3uiv: PFNGLVERTEXATTRIBI3UIVPROC; -} -pub type PFNGLVERTEXATTRIBI4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4uiv: PFNGLVERTEXATTRIBI4UIVPROC; -} -pub type PFNGLVERTEXATTRIBI4BVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4bv: PFNGLVERTEXATTRIBI4BVPROC; -} -pub type PFNGLVERTEXATTRIBI4SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4sv: PFNGLVERTEXATTRIBI4SVPROC; -} -pub type PFNGLVERTEXATTRIBI4UBVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4ubv: PFNGLVERTEXATTRIBI4UBVPROC; -} -pub type PFNGLVERTEXATTRIBI4USVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4usv: PFNGLVERTEXATTRIBI4USVPROC; -} -pub type PFNGLGETUNIFORMUIVPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLuint), ->; -extern "C" { - pub static mut glad_glGetUniformuiv: PFNGLGETUNIFORMUIVPROC; -} -pub type PFNGLBINDFRAGDATALOCATIONPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, color: GLuint, name: *const GLchar), ->; -extern "C" { - pub static mut glad_glBindFragDataLocation: PFNGLBINDFRAGDATALOCATIONPROC; -} -pub type PFNGLGETFRAGDATALOCATIONPROC = - ::std::option::Option GLint>; -extern "C" { - pub static mut glad_glGetFragDataLocation: PFNGLGETFRAGDATALOCATIONPROC; -} -pub type PFNGLUNIFORM1UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform1ui: PFNGLUNIFORM1UIPROC; -} -pub type PFNGLUNIFORM2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform2ui: PFNGLUNIFORM2UIPROC; -} -pub type PFNGLUNIFORM3UIPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLuint, v1: GLuint, v2: GLuint), ->; -extern "C" { - pub static mut glad_glUniform3ui: PFNGLUNIFORM3UIPROC; -} -pub type PFNGLUNIFORM4UIPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint), ->; -extern "C" { - pub static mut glad_glUniform4ui: PFNGLUNIFORM4UIPROC; -} -pub type PFNGLUNIFORM1UIVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glUniform1uiv: PFNGLUNIFORM1UIVPROC; -} -pub type PFNGLUNIFORM2UIVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glUniform2uiv: PFNGLUNIFORM2UIVPROC; -} -pub type PFNGLUNIFORM3UIVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glUniform3uiv: PFNGLUNIFORM3UIVPROC; -} -pub type PFNGLUNIFORM4UIVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glUniform4uiv: PFNGLUNIFORM4UIVPROC; -} -pub type PFNGLTEXPARAMETERIIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLint), ->; -extern "C" { - pub static mut glad_glTexParameterIiv: PFNGLTEXPARAMETERIIVPROC; -} -pub type PFNGLTEXPARAMETERIUIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLuint), ->; -extern "C" { - pub static mut glad_glTexParameterIuiv: PFNGLTEXPARAMETERIUIVPROC; -} -pub type PFNGLGETTEXPARAMETERIIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetTexParameterIiv: PFNGLGETTEXPARAMETERIIVPROC; -} -pub type PFNGLGETTEXPARAMETERIUIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetTexParameterIuiv: PFNGLGETTEXPARAMETERIUIVPROC; -} -pub type PFNGLCLEARBUFFERIVPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLint), ->; -extern "C" { - pub static mut glad_glClearBufferiv: PFNGLCLEARBUFFERIVPROC; -} -pub type PFNGLCLEARBUFFERUIVPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glClearBufferuiv: PFNGLCLEARBUFFERUIVPROC; -} -pub type PFNGLCLEARBUFFERFVPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glClearBufferfv: PFNGLCLEARBUFFERFVPROC; -} -pub type PFNGLCLEARBUFFERFIPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint), ->; -extern "C" { - pub static mut glad_glClearBufferfi: PFNGLCLEARBUFFERFIPROC; -} -pub type PFNGLGETSTRINGIPROC = - ::std::option::Option *const GLubyte>; -extern "C" { - pub static mut glad_glGetStringi: PFNGLGETSTRINGIPROC; -} -pub type PFNGLISRENDERBUFFERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsRenderbuffer: PFNGLISRENDERBUFFERPROC; -} -pub type PFNGLBINDRENDERBUFFERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindRenderbuffer: PFNGLBINDRENDERBUFFERPROC; -} -pub type PFNGLDELETERENDERBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteRenderbuffers: PFNGLDELETERENDERBUFFERSPROC; -} -pub type PFNGLGENRENDERBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenRenderbuffers: PFNGLGENRENDERBUFFERSPROC; -} -pub type PFNGLRENDERBUFFERSTORAGEPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei), ->; -extern "C" { - pub static mut glad_glRenderbufferStorage: PFNGLRENDERBUFFERSTORAGEPROC; -} -pub type PFNGLGETRENDERBUFFERPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetRenderbufferParameteriv: PFNGLGETRENDERBUFFERPARAMETERIVPROC; -} -pub type PFNGLISFRAMEBUFFERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsFramebuffer: PFNGLISFRAMEBUFFERPROC; -} -pub type PFNGLBINDFRAMEBUFFERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindFramebuffer: PFNGLBINDFRAMEBUFFERPROC; -} -pub type PFNGLDELETEFRAMEBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteFramebuffers: PFNGLDELETEFRAMEBUFFERSPROC; -} -pub type PFNGLGENFRAMEBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenFramebuffers: PFNGLGENFRAMEBUFFERSPROC; -} -pub type PFNGLCHECKFRAMEBUFFERSTATUSPROC = - ::std::option::Option GLenum>; -extern "C" { - pub static mut glad_glCheckFramebufferStatus: PFNGLCHECKFRAMEBUFFERSTATUSPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture1D: PFNGLFRAMEBUFFERTEXTURE1DPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture2D: PFNGLFRAMEBUFFERTEXTURE2DPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - zoffset: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture3D: PFNGLFRAMEBUFFERTEXTURE3DPROC; -} -pub type PFNGLFRAMEBUFFERRENDERBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - renderbuffertarget: GLenum, - renderbuffer: GLuint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferRenderbuffer: PFNGLFRAMEBUFFERRENDERBUFFERPROC; -} -pub type PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, attachment: GLenum, pname: GLenum, params: *mut GLint), ->; -extern "C" { - pub static mut glad_glGetFramebufferAttachmentParameteriv: - PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC; -} -pub type PFNGLGENERATEMIPMAPPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glGenerateMipmap: PFNGLGENERATEMIPMAPPROC; -} -pub type PFNGLBLITFRAMEBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn( - srcX0: GLint, - srcY0: GLint, - srcX1: GLint, - srcY1: GLint, - dstX0: GLint, - dstY0: GLint, - dstX1: GLint, - dstY1: GLint, - mask: GLbitfield, - filter: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlitFramebuffer: PFNGLBLITFRAMEBUFFERPROC; -} -pub type PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - samples: GLsizei, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glRenderbufferStorageMultisample: PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURELAYERPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - texture: GLuint, - level: GLint, - layer: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTextureLayer: PFNGLFRAMEBUFFERTEXTURELAYERPROC; -} -pub type PFNGLMAPBUFFERRANGEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptr, - length: GLsizeiptr, - access: GLbitfield, - ) -> *mut ::std::os::raw::c_void, ->; -extern "C" { - pub static mut glad_glMapBufferRange: PFNGLMAPBUFFERRANGEPROC; -} -pub type PFNGLFLUSHMAPPEDBUFFERRANGEPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, offset: GLintptr, length: GLsizeiptr), ->; -extern "C" { - pub static mut glad_glFlushMappedBufferRange: PFNGLFLUSHMAPPEDBUFFERRANGEPROC; -} -pub type PFNGLBINDVERTEXARRAYPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBindVertexArray: PFNGLBINDVERTEXARRAYPROC; -} -pub type PFNGLDELETEVERTEXARRAYSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteVertexArrays: PFNGLDELETEVERTEXARRAYSPROC; -} -pub type PFNGLGENVERTEXARRAYSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenVertexArrays: PFNGLGENVERTEXARRAYSPROC; -} -pub type PFNGLISVERTEXARRAYPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsVertexArray: PFNGLISVERTEXARRAYPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_3_1: ::std::os::raw::c_int; -} -pub type PFNGLDRAWARRAYSINSTANCEDPROC = ::std::option::Option< - unsafe extern "C" fn(mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei), ->; -extern "C" { - pub static mut glad_glDrawArraysInstanced: PFNGLDRAWARRAYSINSTANCEDPROC; -} -pub type PFNGLDRAWELEMENTSINSTANCEDPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - instancecount: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glDrawElementsInstanced: PFNGLDRAWELEMENTSINSTANCEDPROC; -} -pub type PFNGLTEXBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, internalformat: GLenum, buffer: GLuint), ->; -extern "C" { - pub static mut glad_glTexBuffer: PFNGLTEXBUFFERPROC; -} -pub type PFNGLPRIMITIVERESTARTINDEXPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPrimitiveRestartIndex: PFNGLPRIMITIVERESTARTINDEXPROC; -} -pub type PFNGLCOPYBUFFERSUBDATAPROC = ::std::option::Option< - unsafe extern "C" fn( - readTarget: GLenum, - writeTarget: GLenum, - readOffset: GLintptr, - writeOffset: GLintptr, - size: GLsizeiptr, - ), ->; -extern "C" { - pub static mut glad_glCopyBufferSubData: PFNGLCOPYBUFFERSUBDATAPROC; -} -pub type PFNGLGETUNIFORMINDICESPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformCount: GLsizei, - uniformNames: *mut *const GLchar, - uniformIndices: *mut GLuint, - ), ->; -extern "C" { - pub static mut glad_glGetUniformIndices: PFNGLGETUNIFORMINDICESPROC; -} -pub type PFNGLGETACTIVEUNIFORMSIVPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformCount: GLsizei, - uniformIndices: *const GLuint, - pname: GLenum, - params: *mut GLint, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniformsiv: PFNGLGETACTIVEUNIFORMSIVPROC; -} -pub type PFNGLGETACTIVEUNIFORMNAMEPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformIndex: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - uniformName: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniformName: PFNGLGETACTIVEUNIFORMNAMEPROC; -} -pub type PFNGLGETUNIFORMBLOCKINDEXPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, uniformBlockName: *const GLchar) -> GLuint, ->; -extern "C" { - pub static mut glad_glGetUniformBlockIndex: PFNGLGETUNIFORMBLOCKINDEXPROC; -} -pub type PFNGLGETACTIVEUNIFORMBLOCKIVPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformBlockIndex: GLuint, - pname: GLenum, - params: *mut GLint, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniformBlockiv: PFNGLGETACTIVEUNIFORMBLOCKIVPROC; -} -pub type PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformBlockIndex: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - uniformBlockName: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniformBlockName: PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC; -} -pub type PFNGLUNIFORMBLOCKBINDINGPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint), ->; -extern "C" { - pub static mut glad_glUniformBlockBinding: PFNGLUNIFORMBLOCKBINDINGPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_3_2: ::std::os::raw::c_int; -} -pub type PFNGLDRAWELEMENTSBASEVERTEXPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - basevertex: GLint, - ), ->; -extern "C" { - pub static mut glad_glDrawElementsBaseVertex: PFNGLDRAWELEMENTSBASEVERTEXPROC; -} -pub type PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - start: GLuint, - end: GLuint, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - basevertex: GLint, - ), ->; -extern "C" { - pub static mut glad_glDrawRangeElementsBaseVertex: PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC; -} -pub type PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - instancecount: GLsizei, - basevertex: GLint, - ), ->; -extern "C" { - pub static mut glad_glDrawElementsInstancedBaseVertex: PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC; -} -pub type PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: *const GLsizei, - type_: GLenum, - indices: *mut *const ::std::os::raw::c_void, - drawcount: GLsizei, - basevertex: *const GLint, - ), ->; -extern "C" { - pub static mut glad_glMultiDrawElementsBaseVertex: PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC; -} -pub type PFNGLPROVOKINGVERTEXPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glProvokingVertex: PFNGLPROVOKINGVERTEXPROC; -} -pub type PFNGLFENCESYNCPROC = - ::std::option::Option GLsync>; -extern "C" { - pub static mut glad_glFenceSync: PFNGLFENCESYNCPROC; -} -pub type PFNGLISSYNCPROC = ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsSync: PFNGLISSYNCPROC; -} -pub type PFNGLDELETESYNCPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteSync: PFNGLDELETESYNCPROC; -} -pub type PFNGLCLIENTWAITSYNCPROC = ::std::option::Option< - unsafe extern "C" fn(sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> GLenum, ->; -extern "C" { - pub static mut glad_glClientWaitSync: PFNGLCLIENTWAITSYNCPROC; -} -pub type PFNGLWAITSYNCPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glWaitSync: PFNGLWAITSYNCPROC; -} -pub type PFNGLGETINTEGER64VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInteger64v: PFNGLGETINTEGER64VPROC; -} -pub type PFNGLGETSYNCIVPROC = ::std::option::Option< - unsafe extern "C" fn( - sync: GLsync, - pname: GLenum, - bufSize: GLsizei, - length: *mut GLsizei, - values: *mut GLint, - ), ->; -extern "C" { - pub static mut glad_glGetSynciv: PFNGLGETSYNCIVPROC; -} -pub type PFNGLGETINTEGER64I_VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInteger64i_v: PFNGLGETINTEGER64I_VPROC; -} -pub type PFNGLGETBUFFERPARAMETERI64VPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut GLint64), ->; -extern "C" { - pub static mut glad_glGetBufferParameteri64v: PFNGLGETBUFFERPARAMETERI64VPROC; -} -pub type PFNGLFRAMEBUFFERTEXTUREPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, attachment: GLenum, texture: GLuint, level: GLint), ->; -extern "C" { - pub static mut glad_glFramebufferTexture: PFNGLFRAMEBUFFERTEXTUREPROC; -} -pub type PFNGLTEXIMAGE2DMULTISAMPLEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - samples: GLsizei, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - fixedsamplelocations: GLboolean, - ), ->; -extern "C" { - pub static mut glad_glTexImage2DMultisample: PFNGLTEXIMAGE2DMULTISAMPLEPROC; -} -pub type PFNGLTEXIMAGE3DMULTISAMPLEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - samples: GLsizei, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - fixedsamplelocations: GLboolean, - ), ->; -extern "C" { - pub static mut glad_glTexImage3DMultisample: PFNGLTEXIMAGE3DMULTISAMPLEPROC; -} -pub type PFNGLGETMULTISAMPLEFVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetMultisamplefv: PFNGLGETMULTISAMPLEFVPROC; -} -pub type PFNGLSAMPLEMASKIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSampleMaski: PFNGLSAMPLEMASKIPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_3_3: ::std::os::raw::c_int; -} -pub type PFNGLBINDFRAGDATALOCATIONINDEXEDPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, colorNumber: GLuint, index: GLuint, name: *const GLchar), ->; -extern "C" { - pub static mut glad_glBindFragDataLocationIndexed: PFNGLBINDFRAGDATALOCATIONINDEXEDPROC; -} -pub type PFNGLGETFRAGDATAINDEXPROC = - ::std::option::Option GLint>; -extern "C" { - pub static mut glad_glGetFragDataIndex: PFNGLGETFRAGDATAINDEXPROC; -} -pub type PFNGLGENSAMPLERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenSamplers: PFNGLGENSAMPLERSPROC; -} -pub type PFNGLDELETESAMPLERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteSamplers: PFNGLDELETESAMPLERSPROC; -} -pub type PFNGLISSAMPLERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsSampler: PFNGLISSAMPLERPROC; -} -pub type PFNGLBINDSAMPLERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindSampler: PFNGLBINDSAMPLERPROC; -} -pub type PFNGLSAMPLERPARAMETERIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSamplerParameteri: PFNGLSAMPLERPARAMETERIPROC; -} -pub type PFNGLSAMPLERPARAMETERIVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLint), ->; -extern "C" { - pub static mut glad_glSamplerParameteriv: PFNGLSAMPLERPARAMETERIVPROC; -} -pub type PFNGLSAMPLERPARAMETERFPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSamplerParameterf: PFNGLSAMPLERPARAMETERFPROC; -} -pub type PFNGLSAMPLERPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLfloat), ->; -extern "C" { - pub static mut glad_glSamplerParameterfv: PFNGLSAMPLERPARAMETERFVPROC; -} -pub type PFNGLSAMPLERPARAMETERIIVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLint), ->; -extern "C" { - pub static mut glad_glSamplerParameterIiv: PFNGLSAMPLERPARAMETERIIVPROC; -} -pub type PFNGLSAMPLERPARAMETERIUIVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLuint), ->; -extern "C" { - pub static mut glad_glSamplerParameterIuiv: PFNGLSAMPLERPARAMETERIUIVPROC; -} -pub type PFNGLGETSAMPLERPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetSamplerParameteriv: PFNGLGETSAMPLERPARAMETERIVPROC; -} -pub type PFNGLGETSAMPLERPARAMETERIIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetSamplerParameterIiv: PFNGLGETSAMPLERPARAMETERIIVPROC; -} -pub type PFNGLGETSAMPLERPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetSamplerParameterfv: PFNGLGETSAMPLERPARAMETERFVPROC; -} -pub type PFNGLGETSAMPLERPARAMETERIUIVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, params: *mut GLuint), ->; -extern "C" { - pub static mut glad_glGetSamplerParameterIuiv: PFNGLGETSAMPLERPARAMETERIUIVPROC; -} -pub type PFNGLQUERYCOUNTERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glQueryCounter: PFNGLQUERYCOUNTERPROC; -} -pub type PFNGLGETQUERYOBJECTI64VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryObjecti64v: PFNGLGETQUERYOBJECTI64VPROC; -} -pub type PFNGLGETQUERYOBJECTUI64VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryObjectui64v: PFNGLGETQUERYOBJECTUI64VPROC; -} -pub type PFNGLVERTEXATTRIBDIVISORPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribDivisor: PFNGLVERTEXATTRIBDIVISORPROC; -} -pub type PFNGLVERTEXATTRIBP1UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP1ui: PFNGLVERTEXATTRIBP1UIPROC; -} -pub type PFNGLVERTEXATTRIBP1UIVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP1uiv: PFNGLVERTEXATTRIBP1UIVPROC; -} -pub type PFNGLVERTEXATTRIBP2UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP2ui: PFNGLVERTEXATTRIBP2UIPROC; -} -pub type PFNGLVERTEXATTRIBP2UIVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP2uiv: PFNGLVERTEXATTRIBP2UIVPROC; -} -pub type PFNGLVERTEXATTRIBP3UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP3ui: PFNGLVERTEXATTRIBP3UIPROC; -} -pub type PFNGLVERTEXATTRIBP3UIVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP3uiv: PFNGLVERTEXATTRIBP3UIVPROC; -} -pub type PFNGLVERTEXATTRIBP4UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP4ui: PFNGLVERTEXATTRIBP4UIPROC; -} -pub type PFNGLVERTEXATTRIBP4UIVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP4uiv: PFNGLVERTEXATTRIBP4UIVPROC; -} -pub type PFNGLVERTEXP2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP2ui: PFNGLVERTEXP2UIPROC; -} -pub type PFNGLVERTEXP2UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP2uiv: PFNGLVERTEXP2UIVPROC; -} -pub type PFNGLVERTEXP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP3ui: PFNGLVERTEXP3UIPROC; -} -pub type PFNGLVERTEXP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP3uiv: PFNGLVERTEXP3UIVPROC; -} -pub type PFNGLVERTEXP4UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP4ui: PFNGLVERTEXP4UIPROC; -} -pub type PFNGLVERTEXP4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP4uiv: PFNGLVERTEXP4UIVPROC; -} -pub type PFNGLTEXCOORDP1UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP1ui: PFNGLTEXCOORDP1UIPROC; -} -pub type PFNGLTEXCOORDP1UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP1uiv: PFNGLTEXCOORDP1UIVPROC; -} -pub type PFNGLTEXCOORDP2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP2ui: PFNGLTEXCOORDP2UIPROC; -} -pub type PFNGLTEXCOORDP2UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP2uiv: PFNGLTEXCOORDP2UIVPROC; -} -pub type PFNGLTEXCOORDP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP3ui: PFNGLTEXCOORDP3UIPROC; -} -pub type PFNGLTEXCOORDP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP3uiv: PFNGLTEXCOORDP3UIVPROC; -} -pub type PFNGLTEXCOORDP4UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP4ui: PFNGLTEXCOORDP4UIPROC; -} -pub type PFNGLTEXCOORDP4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP4uiv: PFNGLTEXCOORDP4UIVPROC; -} -pub type PFNGLMULTITEXCOORDP1UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glMultiTexCoordP1ui: PFNGLMULTITEXCOORDP1UIPROC; -} -pub type PFNGLMULTITEXCOORDP1UIVPROC = ::std::option::Option< - unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), ->; -extern "C" { - pub static mut glad_glMultiTexCoordP1uiv: PFNGLMULTITEXCOORDP1UIVPROC; -} -pub type PFNGLMULTITEXCOORDP2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glMultiTexCoordP2ui: PFNGLMULTITEXCOORDP2UIPROC; -} -pub type PFNGLMULTITEXCOORDP2UIVPROC = ::std::option::Option< - unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), ->; -extern "C" { - pub static mut glad_glMultiTexCoordP2uiv: PFNGLMULTITEXCOORDP2UIVPROC; -} -pub type PFNGLMULTITEXCOORDP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glMultiTexCoordP3ui: PFNGLMULTITEXCOORDP3UIPROC; -} -pub type PFNGLMULTITEXCOORDP3UIVPROC = ::std::option::Option< - unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), ->; -extern "C" { - pub static mut glad_glMultiTexCoordP3uiv: PFNGLMULTITEXCOORDP3UIVPROC; -} -pub type PFNGLMULTITEXCOORDP4UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glMultiTexCoordP4ui: PFNGLMULTITEXCOORDP4UIPROC; -} -pub type PFNGLMULTITEXCOORDP4UIVPROC = ::std::option::Option< - unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), ->; -extern "C" { - pub static mut glad_glMultiTexCoordP4uiv: PFNGLMULTITEXCOORDP4UIVPROC; -} -pub type PFNGLNORMALP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glNormalP3ui: PFNGLNORMALP3UIPROC; -} -pub type PFNGLNORMALP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glNormalP3uiv: PFNGLNORMALP3UIVPROC; -} -pub type PFNGLCOLORP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glColorP3ui: PFNGLCOLORP3UIPROC; -} -pub type PFNGLCOLORP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glColorP3uiv: PFNGLCOLORP3UIVPROC; -} -pub type PFNGLCOLORP4UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glColorP4ui: PFNGLCOLORP4UIPROC; -} -pub type PFNGLCOLORP4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glColorP4uiv: PFNGLCOLORP4UIVPROC; -} -pub type PFNGLSECONDARYCOLORP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSecondaryColorP3ui: PFNGLSECONDARYCOLORP3UIPROC; -} -pub type PFNGLSECONDARYCOLORP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSecondaryColorP3uiv: PFNGLSECONDARYCOLORP3UIVPROC; -} -extern "C" { - pub static mut GLAD_GL_AMD_debug_output: ::std::os::raw::c_int; -} -pub type PFNGLDEBUGMESSAGEENABLEAMDPROC = ::std::option::Option< - unsafe extern "C" fn( - category: GLenum, - severity: GLenum, - count: GLsizei, - ids: *const GLuint, - enabled: GLboolean, - ), ->; -extern "C" { - pub static mut glad_glDebugMessageEnableAMD: PFNGLDEBUGMESSAGEENABLEAMDPROC; -} -pub type PFNGLDEBUGMESSAGEINSERTAMDPROC = ::std::option::Option< - unsafe extern "C" fn( - category: GLenum, - severity: GLenum, - id: GLuint, - length: GLsizei, - buf: *const GLchar, - ), ->; -extern "C" { - pub static mut glad_glDebugMessageInsertAMD: PFNGLDEBUGMESSAGEINSERTAMDPROC; -} -pub type PFNGLDEBUGMESSAGECALLBACKAMDPROC = ::std::option::Option< - unsafe extern "C" fn(callback: GLDEBUGPROCAMD, userParam: *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glDebugMessageCallbackAMD: PFNGLDEBUGMESSAGECALLBACKAMDPROC; -} -pub type PFNGLGETDEBUGMESSAGELOGAMDPROC = ::std::option::Option< - unsafe extern "C" fn( - count: GLuint, - bufsize: GLsizei, - categories: *mut GLenum, - severities: *mut GLuint, - ids: *mut GLuint, - lengths: *mut GLsizei, - message: *mut GLchar, - ) -> GLuint, ->; -extern "C" { - pub static mut glad_glGetDebugMessageLogAMD: PFNGLGETDEBUGMESSAGELOGAMDPROC; -} -extern "C" { - pub static mut GLAD_GL_AMD_query_buffer_object: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_ES2_compatibility: ::std::os::raw::c_int; -} -pub type PFNGLRELEASESHADERCOMPILERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glReleaseShaderCompiler: PFNGLRELEASESHADERCOMPILERPROC; -} -pub type PFNGLSHADERBINARYPROC = ::std::option::Option< - unsafe extern "C" fn( - count: GLsizei, - shaders: *const GLuint, - binaryformat: GLenum, - binary: *const ::std::os::raw::c_void, - length: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glShaderBinary: PFNGLSHADERBINARYPROC; -} -pub type PFNGLGETSHADERPRECISIONFORMATPROC = ::std::option::Option< - unsafe extern "C" fn( - shadertype: GLenum, - precisiontype: GLenum, - range: *mut GLint, - precision: *mut GLint, - ), ->; -extern "C" { - pub static mut glad_glGetShaderPrecisionFormat: PFNGLGETSHADERPRECISIONFORMATPROC; -} -pub type PFNGLDEPTHRANGEFPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDepthRangef: PFNGLDEPTHRANGEFPROC; -} -pub type PFNGLCLEARDEPTHFPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glClearDepthf: PFNGLCLEARDEPTHFPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_ES3_compatibility: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_buffer_storage: ::std::os::raw::c_int; -} -pub type PFNGLBUFFERSTORAGEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - size: GLsizeiptr, - data: *const ::std::os::raw::c_void, - flags: GLbitfield, - ), ->; -extern "C" { - pub static mut glad_glBufferStorage: PFNGLBUFFERSTORAGEPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_compatibility: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_compressed_texture_pixel_storage: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_debug_output: ::std::os::raw::c_int; -} -pub type PFNGLDEBUGMESSAGECONTROLARBPROC = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - severity: GLenum, - count: GLsizei, - ids: *const GLuint, - enabled: GLboolean, - ), ->; -extern "C" { - pub static mut glad_glDebugMessageControlARB: PFNGLDEBUGMESSAGECONTROLARBPROC; -} -pub type PFNGLDEBUGMESSAGEINSERTARBPROC = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - id: GLuint, - severity: GLenum, - length: GLsizei, - buf: *const GLchar, - ), ->; -extern "C" { - pub static mut glad_glDebugMessageInsertARB: PFNGLDEBUGMESSAGEINSERTARBPROC; -} -pub type PFNGLDEBUGMESSAGECALLBACKARBPROC = ::std::option::Option< - unsafe extern "C" fn(callback: GLDEBUGPROCARB, userParam: *const ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glDebugMessageCallbackARB: PFNGLDEBUGMESSAGECALLBACKARBPROC; -} -pub type PFNGLGETDEBUGMESSAGELOGARBPROC = ::std::option::Option< - unsafe extern "C" fn( - count: GLuint, - bufSize: GLsizei, - sources: *mut GLenum, - types: *mut GLenum, - ids: *mut GLuint, - severities: *mut GLenum, - lengths: *mut GLsizei, - messageLog: *mut GLchar, - ) -> GLuint, ->; -extern "C" { - pub static mut glad_glGetDebugMessageLogARB: PFNGLGETDEBUGMESSAGELOGARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_depth_buffer_float: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_depth_clamp: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_depth_texture: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_draw_buffers: ::std::os::raw::c_int; -} -pub type PFNGLDRAWBUFFERSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawBuffersARB: PFNGLDRAWBUFFERSARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_draw_buffers_blend: ::std::os::raw::c_int; -} -pub type PFNGLBLENDEQUATIONIARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquationiARB: PFNGLBLENDEQUATIONIARBPROC; -} -pub type PFNGLBLENDEQUATIONSEPARATEIARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquationSeparateiARB: PFNGLBLENDEQUATIONSEPARATEIARBPROC; -} -pub type PFNGLBLENDFUNCIARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendFunciARB: PFNGLBLENDFUNCIARBPROC; -} -pub type PFNGLBLENDFUNCSEPARATEIARBPROC = ::std::option::Option< - unsafe extern "C" fn( - buf: GLuint, - srcRGB: GLenum, - dstRGB: GLenum, - srcAlpha: GLenum, - dstAlpha: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlendFuncSeparateiARB: PFNGLBLENDFUNCSEPARATEIARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_explicit_attrib_location: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_explicit_uniform_location: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_fragment_program: ::std::os::raw::c_int; -} -pub type PFNGLPROGRAMSTRINGARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - format: GLenum, - len: GLsizei, - string: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glProgramStringARB: PFNGLPROGRAMSTRINGARBPROC; -} -pub type PFNGLBINDPROGRAMARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindProgramARB: PFNGLBINDPROGRAMARBPROC; -} -pub type PFNGLDELETEPROGRAMSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteProgramsARB: PFNGLDELETEPROGRAMSARBPROC; -} -pub type PFNGLGENPROGRAMSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenProgramsARB: PFNGLGENPROGRAMSARBPROC; -} -pub type PFNGLPROGRAMENVPARAMETER4DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - x: GLdouble, - y: GLdouble, - z: GLdouble, - w: GLdouble, - ), ->; -extern "C" { - pub static mut glad_glProgramEnvParameter4dARB: PFNGLPROGRAMENVPARAMETER4DARBPROC; -} -pub type PFNGLPROGRAMENVPARAMETER4DVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *const GLdouble), ->; -extern "C" { - pub static mut glad_glProgramEnvParameter4dvARB: PFNGLPROGRAMENVPARAMETER4DVARBPROC; -} -pub type PFNGLPROGRAMENVPARAMETER4FARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - x: GLfloat, - y: GLfloat, - z: GLfloat, - w: GLfloat, - ), ->; -extern "C" { - pub static mut glad_glProgramEnvParameter4fARB: PFNGLPROGRAMENVPARAMETER4FARBPROC; -} -pub type PFNGLPROGRAMENVPARAMETER4FVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *const GLfloat), ->; -extern "C" { - pub static mut glad_glProgramEnvParameter4fvARB: PFNGLPROGRAMENVPARAMETER4FVARBPROC; -} -pub type PFNGLPROGRAMLOCALPARAMETER4DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - x: GLdouble, - y: GLdouble, - z: GLdouble, - w: GLdouble, - ), ->; -extern "C" { - pub static mut glad_glProgramLocalParameter4dARB: PFNGLPROGRAMLOCALPARAMETER4DARBPROC; -} -pub type PFNGLPROGRAMLOCALPARAMETER4DVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *const GLdouble), ->; -extern "C" { - pub static mut glad_glProgramLocalParameter4dvARB: PFNGLPROGRAMLOCALPARAMETER4DVARBPROC; -} -pub type PFNGLPROGRAMLOCALPARAMETER4FARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - x: GLfloat, - y: GLfloat, - z: GLfloat, - w: GLfloat, - ), ->; -extern "C" { - pub static mut glad_glProgramLocalParameter4fARB: PFNGLPROGRAMLOCALPARAMETER4FARBPROC; -} -pub type PFNGLPROGRAMLOCALPARAMETER4FVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *const GLfloat), ->; -extern "C" { - pub static mut glad_glProgramLocalParameter4fvARB: PFNGLPROGRAMLOCALPARAMETER4FVARBPROC; -} -pub type PFNGLGETPROGRAMENVPARAMETERDVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *mut GLdouble), ->; -extern "C" { - pub static mut glad_glGetProgramEnvParameterdvARB: PFNGLGETPROGRAMENVPARAMETERDVARBPROC; -} -pub type PFNGLGETPROGRAMENVPARAMETERFVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetProgramEnvParameterfvARB: PFNGLGETPROGRAMENVPARAMETERFVARBPROC; -} -pub type PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *mut GLdouble), ->; -extern "C" { - pub static mut glad_glGetProgramLocalParameterdvARB: PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC; -} -pub type PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetProgramLocalParameterfvARB: PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC; -} -pub type PFNGLGETPROGRAMIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetProgramivARB: PFNGLGETPROGRAMIVARBPROC; -} -pub type PFNGLGETPROGRAMSTRINGARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, string: *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetProgramStringARB: PFNGLGETPROGRAMSTRINGARBPROC; -} -pub type PFNGLISPROGRAMARBPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsProgramARB: PFNGLISPROGRAMARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_fragment_shader: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_framebuffer_object: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_framebuffer_sRGB: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_multisample: ::std::os::raw::c_int; -} -pub type PFNGLSAMPLECOVERAGEARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSampleCoverageARB: PFNGLSAMPLECOVERAGEARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_sample_locations: ::std::os::raw::c_int; -} -pub type PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, start: GLuint, count: GLsizei, v: *const GLfloat), ->; -extern "C" { - pub static mut glad_glFramebufferSampleLocationsfvARB: PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC; -} -pub type PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC = ::std::option::Option< - unsafe extern "C" fn(framebuffer: GLuint, start: GLuint, count: GLsizei, v: *const GLfloat), ->; -extern "C" { - pub static mut glad_glNamedFramebufferSampleLocationsfvARB: - PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC; -} -pub type PFNGLEVALUATEDEPTHVALUESARBPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEvaluateDepthValuesARB: PFNGLEVALUATEDEPTHVALUESARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_compression: ::std::os::raw::c_int; -} -pub type PFNGLCOMPRESSEDTEXIMAGE3DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage3DARB: PFNGLCOMPRESSEDTEXIMAGE3DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE2DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage2DARB: PFNGLCOMPRESSEDTEXIMAGE2DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE1DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage1DARB: PFNGLCOMPRESSEDTEXIMAGE1DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - zoffset: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage3DARB: PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - width: GLsizei, - height: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage2DARB: PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - width: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage1DARB: PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC; -} -pub type PFNGLGETCOMPRESSEDTEXIMAGEARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, level: GLint, img: *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetCompressedTexImageARB: PFNGLGETCOMPRESSEDTEXIMAGEARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_float: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_multisample: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_non_power_of_two: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_rg: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_swizzle: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_uniform_buffer_object: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_array_object: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_attrib_binding: ::std::os::raw::c_int; -} -pub type PFNGLBINDVERTEXBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn(bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei), ->; -extern "C" { - pub static mut glad_glBindVertexBuffer: PFNGLBINDVERTEXBUFFERPROC; -} -pub type PFNGLVERTEXATTRIBFORMATPROC = ::std::option::Option< - unsafe extern "C" fn( - attribindex: GLuint, - size: GLint, - type_: GLenum, - normalized: GLboolean, - relativeoffset: GLuint, - ), ->; -extern "C" { - pub static mut glad_glVertexAttribFormat: PFNGLVERTEXATTRIBFORMATPROC; -} -pub type PFNGLVERTEXATTRIBIFORMATPROC = ::std::option::Option< - unsafe extern "C" fn(attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribIFormat: PFNGLVERTEXATTRIBIFORMATPROC; -} -pub type PFNGLVERTEXATTRIBLFORMATPROC = ::std::option::Option< - unsafe extern "C" fn(attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribLFormat: PFNGLVERTEXATTRIBLFORMATPROC; -} -pub type PFNGLVERTEXATTRIBBINDINGPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribBinding: PFNGLVERTEXATTRIBBINDINGPROC; -} -pub type PFNGLVERTEXBINDINGDIVISORPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexBindingDivisor: PFNGLVERTEXBINDINGDIVISORPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_buffer_object: ::std::os::raw::c_int; -} -pub type PFNGLBINDBUFFERARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindBufferARB: PFNGLBINDBUFFERARBPROC; -} -pub type PFNGLDELETEBUFFERSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteBuffersARB: PFNGLDELETEBUFFERSARBPROC; -} -pub type PFNGLGENBUFFERSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenBuffersARB: PFNGLGENBUFFERSARBPROC; -} -pub type PFNGLISBUFFERARBPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsBufferARB: PFNGLISBUFFERARBPROC; -} -pub type PFNGLBUFFERDATAARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - size: GLsizeiptrARB, - data: *const ::std::os::raw::c_void, - usage: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBufferDataARB: PFNGLBUFFERDATAARBPROC; -} -pub type PFNGLBUFFERSUBDATAARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptrARB, - size: GLsizeiptrARB, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glBufferSubDataARB: PFNGLBUFFERSUBDATAARBPROC; -} -pub type PFNGLGETBUFFERSUBDATAARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptrARB, - size: GLsizeiptrARB, - data: *mut ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glGetBufferSubDataARB: PFNGLGETBUFFERSUBDATAARBPROC; -} -pub type PFNGLMAPBUFFERARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, access: GLenum) -> *mut ::std::os::raw::c_void, ->; -extern "C" { - pub static mut glad_glMapBufferARB: PFNGLMAPBUFFERARBPROC; -} -pub type PFNGLUNMAPBUFFERARBPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glUnmapBufferARB: PFNGLUNMAPBUFFERARBPROC; -} -pub type PFNGLGETBUFFERPARAMETERIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetBufferParameterivARB: PFNGLGETBUFFERPARAMETERIVARBPROC; -} -pub type PFNGLGETBUFFERPOINTERVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetBufferPointervARB: PFNGLGETBUFFERPOINTERVARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_program: ::std::os::raw::c_int; -} -pub type PFNGLVERTEXATTRIB1DARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1dARB: PFNGLVERTEXATTRIB1DARBPROC; -} -pub type PFNGLVERTEXATTRIB1DVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1dvARB: PFNGLVERTEXATTRIB1DVARBPROC; -} -pub type PFNGLVERTEXATTRIB1FARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1fARB: PFNGLVERTEXATTRIB1FARBPROC; -} -pub type PFNGLVERTEXATTRIB1FVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1fvARB: PFNGLVERTEXATTRIB1FVARBPROC; -} -pub type PFNGLVERTEXATTRIB1SARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1sARB: PFNGLVERTEXATTRIB1SARBPROC; -} -pub type PFNGLVERTEXATTRIB1SVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1svARB: PFNGLVERTEXATTRIB1SVARBPROC; -} -pub type PFNGLVERTEXATTRIB2DARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2dARB: PFNGLVERTEXATTRIB2DARBPROC; -} -pub type PFNGLVERTEXATTRIB2DVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2dvARB: PFNGLVERTEXATTRIB2DVARBPROC; -} -pub type PFNGLVERTEXATTRIB2FARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2fARB: PFNGLVERTEXATTRIB2FARBPROC; -} -pub type PFNGLVERTEXATTRIB2FVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2fvARB: PFNGLVERTEXATTRIB2FVARBPROC; -} -pub type PFNGLVERTEXATTRIB2SARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2sARB: PFNGLVERTEXATTRIB2SARBPROC; -} -pub type PFNGLVERTEXATTRIB2SVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2svARB: PFNGLVERTEXATTRIB2SVARBPROC; -} -pub type PFNGLVERTEXATTRIB3DARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble), ->; -extern "C" { - pub static mut glad_glVertexAttrib3dARB: PFNGLVERTEXATTRIB3DARBPROC; -} -pub type PFNGLVERTEXATTRIB3DVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3dvARB: PFNGLVERTEXATTRIB3DVARBPROC; -} -pub type PFNGLVERTEXATTRIB3FARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3fARB: PFNGLVERTEXATTRIB3FARBPROC; -} -pub type PFNGLVERTEXATTRIB3FVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3fvARB: PFNGLVERTEXATTRIB3FVARBPROC; -} -pub type PFNGLVERTEXATTRIB3SARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3sARB: PFNGLVERTEXATTRIB3SARBPROC; -} -pub type PFNGLVERTEXATTRIB3SVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3svARB: PFNGLVERTEXATTRIB3SVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NBVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NbvARB: PFNGLVERTEXATTRIB4NBVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NivARB: PFNGLVERTEXATTRIB4NIVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NSVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NsvARB: PFNGLVERTEXATTRIB4NSVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NUBARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLubyte, y: GLubyte, z: GLubyte, w: GLubyte), ->; -extern "C" { - pub static mut glad_glVertexAttrib4NubARB: PFNGLVERTEXATTRIB4NUBARBPROC; -} -pub type PFNGLVERTEXATTRIB4NUBVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NubvARB: PFNGLVERTEXATTRIB4NUBVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NUIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NuivARB: PFNGLVERTEXATTRIB4NUIVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NUSVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NusvARB: PFNGLVERTEXATTRIB4NUSVARBPROC; -} -pub type PFNGLVERTEXATTRIB4BVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4bvARB: PFNGLVERTEXATTRIB4BVARBPROC; -} -pub type PFNGLVERTEXATTRIB4DARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), ->; -extern "C" { - pub static mut glad_glVertexAttrib4dARB: PFNGLVERTEXATTRIB4DARBPROC; -} -pub type PFNGLVERTEXATTRIB4DVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4dvARB: PFNGLVERTEXATTRIB4DVARBPROC; -} -pub type PFNGLVERTEXATTRIB4FARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat), ->; -extern "C" { - pub static mut glad_glVertexAttrib4fARB: PFNGLVERTEXATTRIB4FARBPROC; -} -pub type PFNGLVERTEXATTRIB4FVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4fvARB: PFNGLVERTEXATTRIB4FVARBPROC; -} -pub type PFNGLVERTEXATTRIB4IVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4ivARB: PFNGLVERTEXATTRIB4IVARBPROC; -} -pub type PFNGLVERTEXATTRIB4SARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLshort, y: GLshort, z: GLshort, w: GLshort), ->; -extern "C" { - pub static mut glad_glVertexAttrib4sARB: PFNGLVERTEXATTRIB4SARBPROC; -} -pub type PFNGLVERTEXATTRIB4SVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4svARB: PFNGLVERTEXATTRIB4SVARBPROC; -} -pub type PFNGLVERTEXATTRIB4UBVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4ubvARB: PFNGLVERTEXATTRIB4UBVARBPROC; -} -pub type PFNGLVERTEXATTRIB4UIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4uivARB: PFNGLVERTEXATTRIB4UIVARBPROC; -} -pub type PFNGLVERTEXATTRIB4USVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4usvARB: PFNGLVERTEXATTRIB4USVARBPROC; -} -pub type PFNGLVERTEXATTRIBPOINTERARBPROC = ::std::option::Option< - unsafe extern "C" fn( - index: GLuint, - size: GLint, - type_: GLenum, - normalized: GLboolean, - stride: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVertexAttribPointerARB: PFNGLVERTEXATTRIBPOINTERARBPROC; -} -pub type PFNGLENABLEVERTEXATTRIBARRAYARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glEnableVertexAttribArrayARB: PFNGLENABLEVERTEXATTRIBARRAYARBPROC; -} -pub type PFNGLDISABLEVERTEXATTRIBARRAYARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDisableVertexAttribArrayARB: PFNGLDISABLEVERTEXATTRIBARRAYARBPROC; -} -pub type PFNGLGETVERTEXATTRIBDVARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, pname: GLenum, params: *mut GLdouble), ->; -extern "C" { - pub static mut glad_glGetVertexAttribdvARB: PFNGLGETVERTEXATTRIBDVARBPROC; -} -pub type PFNGLGETVERTEXATTRIBFVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribfvARB: PFNGLGETVERTEXATTRIBFVARBPROC; -} -pub type PFNGLGETVERTEXATTRIBIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribivARB: PFNGLGETVERTEXATTRIBIVARBPROC; -} -pub type PFNGLGETVERTEXATTRIBPOINTERVARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, pname: GLenum, pointer: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetVertexAttribPointervARB: PFNGLGETVERTEXATTRIBPOINTERVARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_shader: ::std::os::raw::c_int; -} -pub type PFNGLBINDATTRIBLOCATIONARBPROC = ::std::option::Option< - unsafe extern "C" fn(programObj: GLhandleARB, index: GLuint, name: *const GLcharARB), ->; -extern "C" { - pub static mut glad_glBindAttribLocationARB: PFNGLBINDATTRIBLOCATIONARBPROC; -} -pub type PFNGLGETACTIVEATTRIBARBPROC = ::std::option::Option< - unsafe extern "C" fn( - programObj: GLhandleARB, - index: GLuint, - maxLength: GLsizei, - length: *mut GLsizei, - size: *mut GLint, - type_: *mut GLenum, - name: *mut GLcharARB, - ), ->; -extern "C" { - pub static mut glad_glGetActiveAttribARB: PFNGLGETACTIVEATTRIBARBPROC; -} -pub type PFNGLGETATTRIBLOCATIONARBPROC = ::std::option::Option< - unsafe extern "C" fn(programObj: GLhandleARB, name: *const GLcharARB) -> GLint, ->; -extern "C" { - pub static mut glad_glGetAttribLocationARB: PFNGLGETATTRIBLOCATIONARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ATI_element_array: ::std::os::raw::c_int; -} -pub type PFNGLELEMENTPOINTERATIPROC = ::std::option::Option< - unsafe extern "C" fn(type_: GLenum, pointer: *const ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glElementPointerATI: PFNGLELEMENTPOINTERATIPROC; -} -pub type PFNGLDRAWELEMENTARRAYATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawElementArrayATI: PFNGLDRAWELEMENTARRAYATIPROC; -} -pub type PFNGLDRAWRANGEELEMENTARRAYATIPROC = ::std::option::Option< - unsafe extern "C" fn(mode: GLenum, start: GLuint, end: GLuint, count: GLsizei), ->; -extern "C" { - pub static mut glad_glDrawRangeElementArrayATI: PFNGLDRAWRANGEELEMENTARRAYATIPROC; -} -extern "C" { - pub static mut GLAD_GL_ATI_fragment_shader: ::std::os::raw::c_int; -} -pub type PFNGLGENFRAGMENTSHADERSATIPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glGenFragmentShadersATI: PFNGLGENFRAGMENTSHADERSATIPROC; -} -pub type PFNGLBINDFRAGMENTSHADERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBindFragmentShaderATI: PFNGLBINDFRAGMENTSHADERATIPROC; -} -pub type PFNGLDELETEFRAGMENTSHADERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteFragmentShaderATI: PFNGLDELETEFRAGMENTSHADERATIPROC; -} -pub type PFNGLBEGINFRAGMENTSHADERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBeginFragmentShaderATI: PFNGLBEGINFRAGMENTSHADERATIPROC; -} -pub type PFNGLENDFRAGMENTSHADERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndFragmentShaderATI: PFNGLENDFRAGMENTSHADERATIPROC; -} -pub type PFNGLPASSTEXCOORDATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPassTexCoordATI: PFNGLPASSTEXCOORDATIPROC; -} -pub type PFNGLSAMPLEMAPATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSampleMapATI: PFNGLSAMPLEMAPATIPROC; -} -pub type PFNGLCOLORFRAGMENTOP1ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMask: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glColorFragmentOp1ATI: PFNGLCOLORFRAGMENTOP1ATIPROC; -} -pub type PFNGLCOLORFRAGMENTOP2ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMask: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - arg2: GLuint, - arg2Rep: GLuint, - arg2Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glColorFragmentOp2ATI: PFNGLCOLORFRAGMENTOP2ATIPROC; -} -pub type PFNGLCOLORFRAGMENTOP3ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMask: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - arg2: GLuint, - arg2Rep: GLuint, - arg2Mod: GLuint, - arg3: GLuint, - arg3Rep: GLuint, - arg3Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glColorFragmentOp3ATI: PFNGLCOLORFRAGMENTOP3ATIPROC; -} -pub type PFNGLALPHAFRAGMENTOP1ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glAlphaFragmentOp1ATI: PFNGLALPHAFRAGMENTOP1ATIPROC; -} -pub type PFNGLALPHAFRAGMENTOP2ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - arg2: GLuint, - arg2Rep: GLuint, - arg2Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glAlphaFragmentOp2ATI: PFNGLALPHAFRAGMENTOP2ATIPROC; -} -pub type PFNGLALPHAFRAGMENTOP3ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - arg2: GLuint, - arg2Rep: GLuint, - arg2Mod: GLuint, - arg3: GLuint, - arg3Rep: GLuint, - arg3Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glAlphaFragmentOp3ATI: PFNGLALPHAFRAGMENTOP3ATIPROC; -} -pub type PFNGLSETFRAGMENTSHADERCONSTANTATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSetFragmentShaderConstantATI: PFNGLSETFRAGMENTSHADERCONSTANTATIPROC; -} -extern "C" { - pub static mut GLAD_GL_ATI_vertex_array_object: ::std::os::raw::c_int; -} -pub type PFNGLNEWOBJECTBUFFERATIPROC = ::std::option::Option< - unsafe extern "C" fn( - size: GLsizei, - pointer: *const ::std::os::raw::c_void, - usage: GLenum, - ) -> GLuint, ->; -extern "C" { - pub static mut glad_glNewObjectBufferATI: PFNGLNEWOBJECTBUFFERATIPROC; -} -pub type PFNGLISOBJECTBUFFERATIPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsObjectBufferATI: PFNGLISOBJECTBUFFERATIPROC; -} -pub type PFNGLUPDATEOBJECTBUFFERATIPROC = ::std::option::Option< - unsafe extern "C" fn( - buffer: GLuint, - offset: GLuint, - size: GLsizei, - pointer: *const ::std::os::raw::c_void, - preserve: GLenum, - ), ->; -extern "C" { - pub static mut glad_glUpdateObjectBufferATI: PFNGLUPDATEOBJECTBUFFERATIPROC; -} -pub type PFNGLGETOBJECTBUFFERFVATIPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLuint, pname: GLenum, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetObjectBufferfvATI: PFNGLGETOBJECTBUFFERFVATIPROC; -} -pub type PFNGLGETOBJECTBUFFERIVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetObjectBufferivATI: PFNGLGETOBJECTBUFFERIVATIPROC; -} -pub type PFNGLFREEOBJECTBUFFERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glFreeObjectBufferATI: PFNGLFREEOBJECTBUFFERATIPROC; -} -pub type PFNGLARRAYOBJECTATIPROC = ::std::option::Option< - unsafe extern "C" fn( - array: GLenum, - size: GLint, - type_: GLenum, - stride: GLsizei, - buffer: GLuint, - offset: GLuint, - ), ->; -extern "C" { - pub static mut glad_glArrayObjectATI: PFNGLARRAYOBJECTATIPROC; -} -pub type PFNGLGETARRAYOBJECTFVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetArrayObjectfvATI: PFNGLGETARRAYOBJECTFVATIPROC; -} -pub type PFNGLGETARRAYOBJECTIVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetArrayObjectivATI: PFNGLGETARRAYOBJECTIVATIPROC; -} -pub type PFNGLVARIANTARRAYOBJECTATIPROC = ::std::option::Option< - unsafe extern "C" fn( - id: GLuint, - type_: GLenum, - stride: GLsizei, - buffer: GLuint, - offset: GLuint, - ), ->; -extern "C" { - pub static mut glad_glVariantArrayObjectATI: PFNGLVARIANTARRAYOBJECTATIPROC; -} -pub type PFNGLGETVARIANTARRAYOBJECTFVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantArrayObjectfvATI: PFNGLGETVARIANTARRAYOBJECTFVATIPROC; -} -pub type PFNGLGETVARIANTARRAYOBJECTIVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantArrayObjectivATI: PFNGLGETVARIANTARRAYOBJECTIVATIPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_blend_color: ::std::os::raw::c_int; -} -pub type PFNGLBLENDCOLOREXTPROC = ::std::option::Option< - unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), ->; -extern "C" { - pub static mut glad_glBlendColorEXT: PFNGLBLENDCOLOREXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_blend_equation_separate: ::std::os::raw::c_int; -} -pub type PFNGLBLENDEQUATIONSEPARATEEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquationSeparateEXT: PFNGLBLENDEQUATIONSEPARATEEXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_blend_func_separate: ::std::os::raw::c_int; -} -pub type PFNGLBLENDFUNCSEPARATEEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - sfactorRGB: GLenum, - dfactorRGB: GLenum, - sfactorAlpha: GLenum, - dfactorAlpha: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlendFuncSeparateEXT: PFNGLBLENDFUNCSEPARATEEXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_debug_marker: ::std::os::raw::c_int; -} -pub type PFNGLINSERTEVENTMARKEREXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glInsertEventMarkerEXT: PFNGLINSERTEVENTMARKEREXTPROC; -} -pub type PFNGLPUSHGROUPMARKEREXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPushGroupMarkerEXT: PFNGLPUSHGROUPMARKEREXTPROC; -} -pub type PFNGLPOPGROUPMARKEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glPopGroupMarkerEXT: PFNGLPOPGROUPMARKEREXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_blit: ::std::os::raw::c_int; -} -pub type PFNGLBLITFRAMEBUFFEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - srcX0: GLint, - srcY0: GLint, - srcX1: GLint, - srcY1: GLint, - dstX0: GLint, - dstY0: GLint, - dstX1: GLint, - dstY1: GLint, - mask: GLbitfield, - filter: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlitFramebufferEXT: PFNGLBLITFRAMEBUFFEREXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_multisample: ::std::os::raw::c_int; -} -pub type PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - samples: GLsizei, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glRenderbufferStorageMultisampleEXT: - PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_multisample_blit_scaled: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_object: ::std::os::raw::c_int; -} -pub type PFNGLISRENDERBUFFEREXTPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsRenderbufferEXT: PFNGLISRENDERBUFFEREXTPROC; -} -pub type PFNGLBINDRENDERBUFFEREXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindRenderbufferEXT: PFNGLBINDRENDERBUFFEREXTPROC; -} -pub type PFNGLDELETERENDERBUFFERSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteRenderbuffersEXT: PFNGLDELETERENDERBUFFERSEXTPROC; -} -pub type PFNGLGENRENDERBUFFERSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenRenderbuffersEXT: PFNGLGENRENDERBUFFERSEXTPROC; -} -pub type PFNGLRENDERBUFFERSTORAGEEXTPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei), ->; -extern "C" { - pub static mut glad_glRenderbufferStorageEXT: PFNGLRENDERBUFFERSTORAGEEXTPROC; -} -pub type PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetRenderbufferParameterivEXT: PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC; -} -pub type PFNGLISFRAMEBUFFEREXTPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsFramebufferEXT: PFNGLISFRAMEBUFFEREXTPROC; -} -pub type PFNGLBINDFRAMEBUFFEREXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindFramebufferEXT: PFNGLBINDFRAMEBUFFEREXTPROC; -} -pub type PFNGLDELETEFRAMEBUFFERSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteFramebuffersEXT: PFNGLDELETEFRAMEBUFFERSEXTPROC; -} -pub type PFNGLGENFRAMEBUFFERSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenFramebuffersEXT: PFNGLGENFRAMEBUFFERSEXTPROC; -} -pub type PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC = - ::std::option::Option GLenum>; -extern "C" { - pub static mut glad_glCheckFramebufferStatusEXT: PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE1DEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture1DEXT: PFNGLFRAMEBUFFERTEXTURE1DEXTPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE2DEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture2DEXT: PFNGLFRAMEBUFFERTEXTURE2DEXTPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE3DEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - zoffset: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture3DEXT: PFNGLFRAMEBUFFERTEXTURE3DEXTPROC; -} -pub type PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - renderbuffertarget: GLenum, - renderbuffer: GLuint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferRenderbufferEXT: PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC; -} -pub type PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, attachment: GLenum, pname: GLenum, params: *mut GLint), ->; -extern "C" { - pub static mut glad_glGetFramebufferAttachmentParameterivEXT: - PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC; -} -pub type PFNGLGENERATEMIPMAPEXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glGenerateMipmapEXT: PFNGLGENERATEMIPMAPEXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_sRGB: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_index_array_formats: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_texture: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_texture_compression_s3tc: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_texture_sRGB: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_texture_swizzle: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_vertex_array: ::std::os::raw::c_int; -} -pub type PFNGLARRAYELEMENTEXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glArrayElementEXT: PFNGLARRAYELEMENTEXTPROC; -} -pub type PFNGLCOLORPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - size: GLint, - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glColorPointerEXT: PFNGLCOLORPOINTEREXTPROC; -} -pub type PFNGLDRAWARRAYSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawArraysEXT: PFNGLDRAWARRAYSEXTPROC; -} -pub type PFNGLEDGEFLAGPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn(stride: GLsizei, count: GLsizei, pointer: *const GLboolean), ->; -extern "C" { - pub static mut glad_glEdgeFlagPointerEXT: PFNGLEDGEFLAGPOINTEREXTPROC; -} -pub type PFNGLGETPOINTERVEXTPROC = ::std::option::Option< - unsafe extern "C" fn(pname: GLenum, params: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetPointervEXT: PFNGLGETPOINTERVEXTPROC; -} -pub type PFNGLINDEXPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glIndexPointerEXT: PFNGLINDEXPOINTEREXTPROC; -} -pub type PFNGLNORMALPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glNormalPointerEXT: PFNGLNORMALPOINTEREXTPROC; -} -pub type PFNGLTEXCOORDPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - size: GLint, - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexCoordPointerEXT: PFNGLTEXCOORDPOINTEREXTPROC; -} -pub type PFNGLVERTEXPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - size: GLint, - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVertexPointerEXT: PFNGLVERTEXPOINTEREXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_vertex_shader: ::std::os::raw::c_int; -} -pub type PFNGLBEGINVERTEXSHADEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBeginVertexShaderEXT: PFNGLBEGINVERTEXSHADEREXTPROC; -} -pub type PFNGLENDVERTEXSHADEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndVertexShaderEXT: PFNGLENDVERTEXSHADEREXTPROC; -} -pub type PFNGLBINDVERTEXSHADEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBindVertexShaderEXT: PFNGLBINDVERTEXSHADEREXTPROC; -} -pub type PFNGLGENVERTEXSHADERSEXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glGenVertexShadersEXT: PFNGLGENVERTEXSHADERSEXTPROC; -} -pub type PFNGLDELETEVERTEXSHADEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteVertexShaderEXT: PFNGLDELETEVERTEXSHADEREXTPROC; -} -pub type PFNGLSHADEROP1EXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glShaderOp1EXT: PFNGLSHADEROP1EXTPROC; -} -pub type PFNGLSHADEROP2EXTPROC = ::std::option::Option< - unsafe extern "C" fn(op: GLenum, res: GLuint, arg1: GLuint, arg2: GLuint), ->; -extern "C" { - pub static mut glad_glShaderOp2EXT: PFNGLSHADEROP2EXTPROC; -} -pub type PFNGLSHADEROP3EXTPROC = ::std::option::Option< - unsafe extern "C" fn(op: GLenum, res: GLuint, arg1: GLuint, arg2: GLuint, arg3: GLuint), ->; -extern "C" { - pub static mut glad_glShaderOp3EXT: PFNGLSHADEROP3EXTPROC; -} -pub type PFNGLSWIZZLEEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - res: GLuint, - in_: GLuint, - outX: GLenum, - outY: GLenum, - outZ: GLenum, - outW: GLenum, - ), ->; -extern "C" { - pub static mut glad_glSwizzleEXT: PFNGLSWIZZLEEXTPROC; -} -pub type PFNGLWRITEMASKEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - res: GLuint, - in_: GLuint, - outX: GLenum, - outY: GLenum, - outZ: GLenum, - outW: GLenum, - ), ->; -extern "C" { - pub static mut glad_glWriteMaskEXT: PFNGLWRITEMASKEXTPROC; -} -pub type PFNGLINSERTCOMPONENTEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glInsertComponentEXT: PFNGLINSERTCOMPONENTEXTPROC; -} -pub type PFNGLEXTRACTCOMPONENTEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glExtractComponentEXT: PFNGLEXTRACTCOMPONENTEXTPROC; -} -pub type PFNGLGENSYMBOLSEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - datatype: GLenum, - storagetype: GLenum, - range: GLenum, - components: GLuint, - ) -> GLuint, ->; -extern "C" { - pub static mut glad_glGenSymbolsEXT: PFNGLGENSYMBOLSEXTPROC; -} -pub type PFNGLSETINVARIANTEXTPROC = ::std::option::Option< - unsafe extern "C" fn(id: GLuint, type_: GLenum, addr: *const ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glSetInvariantEXT: PFNGLSETINVARIANTEXTPROC; -} -pub type PFNGLSETLOCALCONSTANTEXTPROC = ::std::option::Option< - unsafe extern "C" fn(id: GLuint, type_: GLenum, addr: *const ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glSetLocalConstantEXT: PFNGLSETLOCALCONSTANTEXTPROC; -} -pub type PFNGLVARIANTBVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantbvEXT: PFNGLVARIANTBVEXTPROC; -} -pub type PFNGLVARIANTSVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantsvEXT: PFNGLVARIANTSVEXTPROC; -} -pub type PFNGLVARIANTIVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantivEXT: PFNGLVARIANTIVEXTPROC; -} -pub type PFNGLVARIANTFVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantfvEXT: PFNGLVARIANTFVEXTPROC; -} -pub type PFNGLVARIANTDVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantdvEXT: PFNGLVARIANTDVEXTPROC; -} -pub type PFNGLVARIANTUBVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantubvEXT: PFNGLVARIANTUBVEXTPROC; -} -pub type PFNGLVARIANTUSVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantusvEXT: PFNGLVARIANTUSVEXTPROC; -} -pub type PFNGLVARIANTUIVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantuivEXT: PFNGLVARIANTUIVEXTPROC; -} -pub type PFNGLVARIANTPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - id: GLuint, - type_: GLenum, - stride: GLuint, - addr: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVariantPointerEXT: PFNGLVARIANTPOINTEREXTPROC; -} -pub type PFNGLENABLEVARIANTCLIENTSTATEEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glEnableVariantClientStateEXT: PFNGLENABLEVARIANTCLIENTSTATEEXTPROC; -} -pub type PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDisableVariantClientStateEXT: PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC; -} -pub type PFNGLBINDLIGHTPARAMETEREXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glBindLightParameterEXT: PFNGLBINDLIGHTPARAMETEREXTPROC; -} -pub type PFNGLBINDMATERIALPARAMETEREXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glBindMaterialParameterEXT: PFNGLBINDMATERIALPARAMETEREXTPROC; -} -pub type PFNGLBINDTEXGENPARAMETEREXTPROC = ::std::option::Option< - unsafe extern "C" fn(unit: GLenum, coord: GLenum, value: GLenum) -> GLuint, ->; -extern "C" { - pub static mut glad_glBindTexGenParameterEXT: PFNGLBINDTEXGENPARAMETEREXTPROC; -} -pub type PFNGLBINDTEXTUREUNITPARAMETEREXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glBindTextureUnitParameterEXT: PFNGLBINDTEXTUREUNITPARAMETEREXTPROC; -} -pub type PFNGLBINDPARAMETEREXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glBindParameterEXT: PFNGLBINDPARAMETEREXTPROC; -} -pub type PFNGLISVARIANTENABLEDEXTPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsVariantEnabledEXT: PFNGLISVARIANTENABLEDEXTPROC; -} -pub type PFNGLGETVARIANTBOOLEANVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantBooleanvEXT: PFNGLGETVARIANTBOOLEANVEXTPROC; -} -pub type PFNGLGETVARIANTINTEGERVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantIntegervEXT: PFNGLGETVARIANTINTEGERVEXTPROC; -} -pub type PFNGLGETVARIANTFLOATVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantFloatvEXT: PFNGLGETVARIANTFLOATVEXTPROC; -} -pub type PFNGLGETVARIANTPOINTERVEXTPROC = ::std::option::Option< - unsafe extern "C" fn(id: GLuint, value: GLenum, data: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetVariantPointervEXT: PFNGLGETVARIANTPOINTERVEXTPROC; -} -pub type PFNGLGETINVARIANTBOOLEANVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInvariantBooleanvEXT: PFNGLGETINVARIANTBOOLEANVEXTPROC; -} -pub type PFNGLGETINVARIANTINTEGERVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInvariantIntegervEXT: PFNGLGETINVARIANTINTEGERVEXTPROC; -} -pub type PFNGLGETINVARIANTFLOATVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInvariantFloatvEXT: PFNGLGETINVARIANTFLOATVEXTPROC; -} -pub type PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetLocalConstantBooleanvEXT: PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC; -} -pub type PFNGLGETLOCALCONSTANTINTEGERVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetLocalConstantIntegervEXT: PFNGLGETLOCALCONSTANTINTEGERVEXTPROC; -} -pub type PFNGLGETLOCALCONSTANTFLOATVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetLocalConstantFloatvEXT: PFNGLGETLOCALCONSTANTFLOATVEXTPROC; -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct __mbstate_t { - pub __count: ::std::os::raw::c_int, - pub __value: __mbstate_t__bindgen_ty_1, -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union __mbstate_t__bindgen_ty_1 { - pub __wch: ::std::os::raw::c_uint, - pub __wchb: [::std::os::raw::c_char; 4usize], - _bindgen_union_align: u32, -} -#[test] -fn bindgen_test_layout___mbstate_t__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::<__mbstate_t__bindgen_ty_1>(), - 4usize, - concat!("Size of: ", stringify!(__mbstate_t__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::<__mbstate_t__bindgen_ty_1>(), - 4usize, - concat!("Alignment of ", stringify!(__mbstate_t__bindgen_ty_1)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__mbstate_t__bindgen_ty_1>())).__wch as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t__bindgen_ty_1), - "::", - stringify!(__wch) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__mbstate_t__bindgen_ty_1>())).__wchb as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t__bindgen_ty_1), - "::", - stringify!(__wchb) - ) - ); -} -#[test] -fn bindgen_test_layout___mbstate_t() { - assert_eq!( - ::std::mem::size_of::<__mbstate_t>(), - 8usize, - concat!("Size of: ", stringify!(__mbstate_t)) - ); - assert_eq!( - ::std::mem::align_of::<__mbstate_t>(), - 4usize, - concat!("Alignment of ", stringify!(__mbstate_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__mbstate_t>())).__count as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t), - "::", - stringify!(__count) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__mbstate_t>())).__value as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__mbstate_t), - "::", - stringify!(__value) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub struct _G_fpos_t { - pub __pos: __off_t, - pub __state: __mbstate_t, -} -#[test] -fn bindgen_test_layout__G_fpos_t() { - assert_eq!( - ::std::mem::size_of::<_G_fpos_t>(), - 16usize, - concat!("Size of: ", stringify!(_G_fpos_t)) - ); - assert_eq!( - ::std::mem::align_of::<_G_fpos_t>(), - 8usize, - concat!("Alignment of ", stringify!(_G_fpos_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_G_fpos_t>())).__pos as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_G_fpos_t), - "::", - stringify!(__pos) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_G_fpos_t>())).__state as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_G_fpos_t), - "::", - stringify!(__state) - ) - ); -} -pub type __fpos_t = _G_fpos_t; -#[repr(C)] -#[derive(Copy, Clone)] -pub struct _G_fpos64_t { - pub __pos: __off64_t, - pub __state: __mbstate_t, -} -#[test] -fn bindgen_test_layout__G_fpos64_t() { - assert_eq!( - ::std::mem::size_of::<_G_fpos64_t>(), - 16usize, - concat!("Size of: ", stringify!(_G_fpos64_t)) - ); - assert_eq!( - ::std::mem::align_of::<_G_fpos64_t>(), - 8usize, - concat!("Alignment of ", stringify!(_G_fpos64_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_G_fpos64_t>())).__pos as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_G_fpos64_t), - "::", - stringify!(__pos) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_G_fpos64_t>())).__state as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_G_fpos64_t), - "::", - stringify!(__state) - ) - ); -} -pub type __fpos64_t = _G_fpos64_t; -pub type __FILE = _IO_FILE; -pub type FILE = _IO_FILE; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _IO_marker { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _IO_codecvt { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _IO_wide_data { - _unused: [u8; 0], -} -pub type _IO_lock_t = ::std::os::raw::c_void; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _IO_FILE { - pub _flags: ::std::os::raw::c_int, - pub _IO_read_ptr: *mut ::std::os::raw::c_char, - pub _IO_read_end: *mut ::std::os::raw::c_char, - pub _IO_read_base: *mut ::std::os::raw::c_char, - pub _IO_write_base: *mut ::std::os::raw::c_char, - pub _IO_write_ptr: *mut ::std::os::raw::c_char, - pub _IO_write_end: *mut ::std::os::raw::c_char, - pub _IO_buf_base: *mut ::std::os::raw::c_char, - pub _IO_buf_end: *mut ::std::os::raw::c_char, - pub _IO_save_base: *mut ::std::os::raw::c_char, - pub _IO_backup_base: *mut ::std::os::raw::c_char, - pub _IO_save_end: *mut ::std::os::raw::c_char, - pub _markers: *mut _IO_marker, - pub _chain: *mut _IO_FILE, - pub _fileno: ::std::os::raw::c_int, - pub _flags2: ::std::os::raw::c_int, - pub _old_offset: __off_t, - pub _cur_column: ::std::os::raw::c_ushort, - pub _vtable_offset: ::std::os::raw::c_schar, - pub _shortbuf: [::std::os::raw::c_char; 1usize], - pub _lock: *mut _IO_lock_t, - pub _offset: __off64_t, - pub _codecvt: *mut _IO_codecvt, - pub _wide_data: *mut _IO_wide_data, - pub _freeres_list: *mut _IO_FILE, - pub _freeres_buf: *mut ::std::os::raw::c_void, - pub __pad5: size_t, - pub _mode: ::std::os::raw::c_int, - pub _unused2: [::std::os::raw::c_char; 20usize], -} -#[test] -fn bindgen_test_layout__IO_FILE() { - assert_eq!( - ::std::mem::size_of::<_IO_FILE>(), - 216usize, - concat!("Size of: ", stringify!(_IO_FILE)) - ); - assert_eq!( - ::std::mem::align_of::<_IO_FILE>(), - 8usize, - concat!("Alignment of ", stringify!(_IO_FILE)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._flags as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_read_ptr as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_read_ptr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_read_end as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_read_end) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_read_base as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_read_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_write_base as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_write_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_write_ptr as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_write_ptr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_write_end as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_write_end) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_buf_base as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_buf_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_buf_end as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_buf_end) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_save_base as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_save_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_backup_base as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_backup_base) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._IO_save_end as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_IO_save_end) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._markers as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_markers) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._chain as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_chain) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._fileno as *const _ as usize }, - 112usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_fileno) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._flags2 as *const _ as usize }, - 116usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_flags2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._old_offset as *const _ as usize }, - 120usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_old_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._cur_column as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_cur_column) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._vtable_offset as *const _ as usize }, - 130usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_vtable_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._shortbuf as *const _ as usize }, - 131usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_shortbuf) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._lock as *const _ as usize }, - 136usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_lock) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._offset as *const _ as usize }, - 144usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._codecvt as *const _ as usize }, - 152usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_codecvt) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._wide_data as *const _ as usize }, - 160usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_wide_data) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._freeres_list as *const _ as usize }, - 168usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_freeres_list) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._freeres_buf as *const _ as usize }, - 176usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_freeres_buf) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>())).__pad5 as *const _ as usize }, - 184usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(__pad5) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._mode as *const _ as usize }, - 192usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_mode) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_IO_FILE>()))._unused2 as *const _ as usize }, - 196usize, - concat!( - "Offset of field: ", - stringify!(_IO_FILE), - "::", - stringify!(_unused2) - ) - ); -} -pub type fpos_t = __fpos_t; -extern "C" { - pub static mut stdin: *mut FILE; -} -extern "C" { - pub static mut stdout: *mut FILE; -} -extern "C" { - pub static mut stderr: *mut FILE; -} -extern "C" { - pub fn remove(__filename: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rename( - __old: *const ::std::os::raw::c_char, - __new: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn tmpfile() -> *mut FILE; -} -extern "C" { - pub fn tmpnam(__s: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fclose(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fflush(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fopen( - __filename: *const ::std::os::raw::c_char, - __modes: *const ::std::os::raw::c_char, - ) -> *mut FILE; -} -extern "C" { - pub fn freopen( - __filename: *const ::std::os::raw::c_char, - __modes: *const ::std::os::raw::c_char, - __stream: *mut FILE, - ) -> *mut FILE; -} -extern "C" { - pub fn setbuf(__stream: *mut FILE, __buf: *mut ::std::os::raw::c_char); -} -extern "C" { - pub fn setvbuf( - __stream: *mut FILE, - __buf: *mut ::std::os::raw::c_char, - __modes: ::std::os::raw::c_int, - __n: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fprintf( - __stream: *mut FILE, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn printf(__format: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn sprintf( - __s: *mut ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vfprintf( - __s: *mut FILE, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vprintf( - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vsprintf( - __s: *mut ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn snprintf( - __s: *mut ::std::os::raw::c_char, - __maxlen: ::std::os::raw::c_ulong, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vsnprintf( - __s: *mut ::std::os::raw::c_char, - __maxlen: ::std::os::raw::c_ulong, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fscanf( - __stream: *mut FILE, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn scanf(__format: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn sscanf( - __s: *const ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_fscanf"] - pub fn fscanf1( - __stream: *mut FILE, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_scanf"] - pub fn scanf1(__format: *const ::std::os::raw::c_char, ...) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_sscanf"] - pub fn sscanf1( - __s: *const ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - ... - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vfscanf( - __s: *mut FILE, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vscanf( - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn vsscanf( - __s: *const ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_vfscanf"] - pub fn vfscanf1( - __s: *mut FILE, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_vscanf"] - pub fn vscanf1( - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - #[link_name = "\u{1}__isoc99_vsscanf"] - pub fn vsscanf1( - __s: *const ::std::os::raw::c_char, - __format: *const ::std::os::raw::c_char, - __arg: *mut __va_list_tag, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgetc(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getc(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getchar() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fputc(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putc(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putchar(__c: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgets( - __s: *mut ::std::os::raw::c_char, - __n: ::std::os::raw::c_int, - __stream: *mut FILE, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fputs(__s: *const ::std::os::raw::c_char, __stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn puts(__s: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ungetc(__c: ::std::os::raw::c_int, __stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fread( - __ptr: *mut ::std::os::raw::c_void, - __size: ::std::os::raw::c_ulong, - __n: ::std::os::raw::c_ulong, - __stream: *mut FILE, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn fwrite( - __ptr: *const ::std::os::raw::c_void, - __size: ::std::os::raw::c_ulong, - __n: ::std::os::raw::c_ulong, - __s: *mut FILE, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn fseek( - __stream: *mut FILE, - __off: ::std::os::raw::c_long, - __whence: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ftell(__stream: *mut FILE) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn rewind(__stream: *mut FILE); -} -extern "C" { - pub fn fgetpos(__stream: *mut FILE, __pos: *mut fpos_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fsetpos(__stream: *mut FILE, __pos: *const fpos_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn clearerr(__stream: *mut FILE); -} -extern "C" { - pub fn feof(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ferror(__stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn perror(__s: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn __uflow(arg1: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __overflow(arg1: *mut FILE, arg2: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub static mut max_loaded_major: ::std::os::raw::c_int; -} -extern "C" { - pub static mut max_loaded_minor: ::std::os::raw::c_int; -} -extern "C" { - pub static mut exts: *const ::std::os::raw::c_char; -} -pub const num_exts_i: ::std::os::raw::c_int = 0; -extern "C" { - pub static mut exts_i: *mut *const ::std::os::raw::c_char; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VertexBuffer { - pub elementsCount: ::std::os::raw::c_int, - pub vCounter: ::std::os::raw::c_int, - pub tcCounter: ::std::os::raw::c_int, - pub cCounter: ::std::os::raw::c_int, - pub vertices: *mut f32, - pub texcoords: *mut f32, - pub colors: *mut ::std::os::raw::c_uchar, - pub indices: *mut ::std::os::raw::c_uint, - pub vaoId: ::std::os::raw::c_uint, - pub vboId: [::std::os::raw::c_uint; 4usize], -} -#[test] -fn bindgen_test_layout_VertexBuffer() { - assert_eq!( - ::std::mem::size_of::(), - 72usize, - concat!("Size of: ", stringify!(VertexBuffer)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(VertexBuffer)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).elementsCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(elementsCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vCounter as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(vCounter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).tcCounter as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(tcCounter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).cCounter as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(cCounter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertices as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(vertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(texcoords) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).colors as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(colors) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).indices as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(indices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vaoId as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(vaoId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vboId as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(vboId) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct DrawCall { - pub mode: ::std::os::raw::c_int, - pub vertexCount: ::std::os::raw::c_int, - pub vertexAlignment: ::std::os::raw::c_int, - pub textureId: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_DrawCall() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(DrawCall)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(DrawCall)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mode as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(DrawCall), - "::", - stringify!(mode) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(DrawCall), - "::", - stringify!(vertexCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexAlignment as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(DrawCall), - "::", - stringify!(vertexAlignment) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).textureId as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(DrawCall), - "::", - stringify!(textureId) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RenderBatch { - pub buffersCount: ::std::os::raw::c_int, - pub currentBuffer: ::std::os::raw::c_int, - pub vertexBuffer: *mut VertexBuffer, - pub draws: *mut DrawCall, - pub drawsCounter: ::std::os::raw::c_int, - pub currentDepth: f32, -} -#[test] -fn bindgen_test_layout_RenderBatch() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(RenderBatch)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(RenderBatch)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).buffersCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(buffersCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).currentBuffer as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(currentBuffer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexBuffer as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(vertexBuffer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).draws as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(draws) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).drawsCounter as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(drawsCounter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).currentDepth as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(currentDepth) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VrStereoConfig { - pub distortionShader: Shader, - pub eyesProjection: [Matrix; 2usize], - pub eyesViewOffset: [Matrix; 2usize], - pub eyeViewportRight: [::std::os::raw::c_int; 4usize], - pub eyeViewportLeft: [::std::os::raw::c_int; 4usize], -} -#[test] -fn bindgen_test_layout_VrStereoConfig() { - assert_eq!( - ::std::mem::size_of::(), - 304usize, - concat!("Size of: ", stringify!(VrStereoConfig)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(VrStereoConfig)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).distortionShader as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(distortionShader) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).eyesProjection as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(eyesProjection) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).eyesViewOffset as *const _ as usize }, - 144usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(eyesViewOffset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).eyeViewportRight as *const _ as usize }, - 272usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(eyeViewportRight) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).eyeViewportLeft as *const _ as usize }, - 288usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(eyeViewportLeft) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rlglData { - pub currentBatch: *mut RenderBatch, - pub defaultBatch: RenderBatch, - pub State: rlglData__bindgen_ty_1, - pub ExtSupported: rlglData__bindgen_ty_2, - pub Vr: rlglData__bindgen_ty_3, -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rlglData__bindgen_ty_1 { - pub currentMatrixMode: ::std::os::raw::c_int, - pub currentMatrix: *mut Matrix, - pub modelview: Matrix, - pub projection: Matrix, - pub transform: Matrix, - pub transformRequired: bool, - pub stack: [Matrix; 32usize], - pub stackCounter: ::std::os::raw::c_int, - pub shapesTexture: Texture2D, - pub shapesTextureRec: Rectangle, - pub defaultTextureId: ::std::os::raw::c_uint, - pub activeTextureId: [::std::os::raw::c_uint; 4usize], - pub defaultVShaderId: ::std::os::raw::c_uint, - pub defaultFShaderId: ::std::os::raw::c_uint, - pub defaultShader: Shader, - pub currentShader: Shader, - pub currentBlendMode: ::std::os::raw::c_int, - pub glBlendSrcFactor: ::std::os::raw::c_int, - pub glBlendDstFactor: ::std::os::raw::c_int, - pub glad_glBlendEquation: ::std::os::raw::c_int, - pub framebufferWidth: ::std::os::raw::c_int, - pub framebufferHeight: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_rlglData__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::(), - 2384usize, - concat!("Size of: ", stringify!(rlglData__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rlglData__bindgen_ty_1)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).currentMatrixMode as *const _ - as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(currentMatrixMode) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).currentMatrix as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(currentMatrix) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).modelview as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(modelview) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).projection as *const _ as usize - }, - 80usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(projection) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).transform as *const _ as usize - }, - 144usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(transform) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).transformRequired as *const _ - as usize - }, - 208usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(transformRequired) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stack as *const _ as usize }, - 212usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(stack) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).stackCounter as *const _ as usize - }, - 2260usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(stackCounter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).shapesTexture as *const _ as usize - }, - 2264usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(shapesTexture) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).shapesTextureRec as *const _ as usize - }, - 2284usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(shapesTextureRec) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).defaultTextureId as *const _ as usize - }, - 2300usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(defaultTextureId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).activeTextureId as *const _ as usize - }, - 2304usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(activeTextureId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).defaultVShaderId as *const _ as usize - }, - 2320usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(defaultVShaderId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).defaultFShaderId as *const _ as usize - }, - 2324usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(defaultFShaderId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).defaultShader as *const _ as usize - }, - 2328usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(defaultShader) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).currentShader as *const _ as usize - }, - 2344usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(currentShader) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).currentBlendMode as *const _ as usize - }, - 2360usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(currentBlendMode) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).glBlendSrcFactor as *const _ as usize - }, - 2364usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(glBlendSrcFactor) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).glBlendDstFactor as *const _ as usize - }, - 2368usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(glBlendDstFactor) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).glad_glBlendEquation as *const _ - as usize - }, - 2372usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(glad_glBlendEquation) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).framebufferWidth as *const _ as usize - }, - 2376usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(framebufferWidth) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).framebufferHeight as *const _ - as usize - }, - 2380usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(framebufferHeight) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rlglData__bindgen_ty_2 { - pub vao: bool, - pub texNPOT: bool, - pub texDepth: bool, - pub texFloat32: bool, - pub texCompDXT: bool, - pub texCompETC1: bool, - pub texCompETC2: bool, - pub texCompPVRT: bool, - pub texCompASTC: bool, - pub texMirrorClamp: bool, - pub texAnisoFilter: bool, - pub debugMarker: bool, - pub maxAnisotropicLevel: f32, - pub maxDepthBits: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_rlglData__bindgen_ty_2() { - assert_eq!( - ::std::mem::size_of::(), - 20usize, - concat!("Size of: ", stringify!(rlglData__bindgen_ty_2)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(rlglData__bindgen_ty_2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vao as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(vao) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texNPOT as *const _ as usize }, - 1usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texNPOT) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texDepth as *const _ as usize }, - 2usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texDepth) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texFloat32 as *const _ as usize - }, - 3usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texFloat32) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompDXT as *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompDXT) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompETC1 as *const _ as usize - }, - 5usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompETC1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompETC2 as *const _ as usize - }, - 6usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompETC2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompPVRT as *const _ as usize - }, - 7usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompPVRT) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompASTC as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompASTC) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texMirrorClamp as *const _ as usize - }, - 9usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texMirrorClamp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texAnisoFilter as *const _ as usize - }, - 10usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texAnisoFilter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).debugMarker as *const _ as usize - }, - 11usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(debugMarker) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).maxAnisotropicLevel as *const _ - as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(maxAnisotropicLevel) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).maxDepthBits as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(maxDepthBits) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rlglData__bindgen_ty_3 { - pub config: VrStereoConfig, - pub stereoFboId: ::std::os::raw::c_uint, - pub stereoTexId: ::std::os::raw::c_uint, - pub simulatorReady: bool, - pub stereoRender: bool, -} -#[test] -fn bindgen_test_layout_rlglData__bindgen_ty_3() { - assert_eq!( - ::std::mem::size_of::(), - 320usize, - concat!("Size of: ", stringify!(rlglData__bindgen_ty_3)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rlglData__bindgen_ty_3)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).config as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_3), - "::", - stringify!(config) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).stereoFboId as *const _ as usize - }, - 304usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_3), - "::", - stringify!(stereoFboId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).stereoTexId as *const _ as usize - }, - 308usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_3), - "::", - stringify!(stereoTexId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).simulatorReady as *const _ as usize - }, - 312usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_3), - "::", - stringify!(simulatorReady) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).stereoRender as *const _ as usize - }, - 313usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_3), - "::", - stringify!(stereoRender) - ) - ); -} -#[test] -fn bindgen_test_layout_rlglData() { - assert_eq!( - ::std::mem::size_of::(), - 2768usize, - concat!("Size of: ", stringify!(rlglData)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rlglData)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).currentBatch as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rlglData), - "::", - stringify!(currentBatch) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).defaultBatch as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(rlglData), - "::", - stringify!(defaultBatch) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).State as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(rlglData), - "::", - stringify!(State) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ExtSupported as *const _ as usize }, - 2424usize, - concat!( - "Offset of field: ", - stringify!(rlglData), - "::", - stringify!(ExtSupported) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).Vr as *const _ as usize }, - 2448usize, - concat!( - "Offset of field: ", - stringify!(rlglData), - "::", - stringify!(Vr) - ) - ); -} -extern "C" { - pub static mut RLGL: rlglData; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct GuiStyleProp { - pub controlId: ::std::os::raw::c_ushort, - pub propertyId: ::std::os::raw::c_ushort, - pub propertyValue: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_GuiStyleProp() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(GuiStyleProp)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(GuiStyleProp)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).controlId as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(controlId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).propertyId as *const _ as usize }, - 2usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(propertyId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).propertyValue as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(propertyValue) - ) - ); -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiControlState { - GUI_STATE_NORMAL = 0, - GUI_STATE_FOCUSED = 1, - GUI_STATE_PRESSED = 2, - GUI_STATE_DISABLED = 3, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiTextAlignment { - GUI_TEXT_ALIGN_LEFT = 0, - GUI_TEXT_ALIGN_CENTER = 1, - GUI_TEXT_ALIGN_RIGHT = 2, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiControl { - DEFAULT = 0, - LABEL = 1, - BUTTON = 2, - TOGGLE = 3, - SLIDER = 4, - PROGRESSBAR = 5, - CHECKBOX = 6, - COMBOBOX = 7, - DROPDOWNBOX = 8, - TEXTBOX = 9, - VALUEBOX = 10, - SPINNER = 11, - LISTVIEW = 12, - COLORPICKER = 13, - SCROLLBAR = 14, - STATUSBAR = 15, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiControlProperty { - BORDER_COLOR_NORMAL = 0, - BASE_COLOR_NORMAL = 1, - TEXT_COLOR_NORMAL = 2, - BORDER_COLOR_FOCUSED = 3, - BASE_COLOR_FOCUSED = 4, - TEXT_COLOR_FOCUSED = 5, - BORDER_COLOR_PRESSED = 6, - BASE_COLOR_PRESSED = 7, - TEXT_COLOR_PRESSED = 8, - BORDER_COLOR_DISABLED = 9, - BASE_COLOR_DISABLED = 10, - TEXT_COLOR_DISABLED = 11, - BORDER_WIDTH = 12, - TEXT_PADDING = 13, - TEXT_ALIGNMENT = 14, - RESERVED = 15, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiDefaultProperty { - TEXT_SIZE = 16, - TEXT_SPACING = 17, - LINE_COLOR = 18, - BACKGROUND_COLOR = 19, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiToggleProperty { - GROUP_PADDING = 16, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiSliderProperty { - SLIDER_WIDTH = 16, - SLIDER_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiProgressBarProperty { - PROGRESS_PADDING = 16, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiCheckBoxProperty { - CHECK_PADDING = 16, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiComboBoxProperty { - COMBO_BUTTON_WIDTH = 16, - COMBO_BUTTON_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiDropdownBoxProperty { - ARROW_PADDING = 16, - DROPDOWN_ITEMS_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiTextBoxProperty { - TEXT_INNER_PADDING = 16, - TEXT_LINES_PADDING = 17, - COLOR_SELECTED_FG = 18, - COLOR_SELECTED_BG = 19, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiSpinnerProperty { - SPIN_BUTTON_WIDTH = 16, - SPIN_BUTTON_PADDING = 17, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiScrollBarProperty { - ARROWS_SIZE = 16, - ARROWS_VISIBLE = 17, - SCROLL_SLIDER_PADDING = 18, - SCROLL_SLIDER_SIZE = 19, - SCROLL_PADDING = 20, - SCROLL_SPEED = 21, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiScrollBarSide { - SCROLLBAR_LEFT_SIDE = 0, - SCROLLBAR_RIGHT_SIDE = 1, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiListViewProperty { - LIST_ITEMS_HEIGHT = 16, - LIST_ITEMS_PADDING = 17, - SCROLLBAR_WIDTH = 18, - SCROLLBAR_SIDE = 19, -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiColorPickerProperty { - COLOR_SELECTOR_SIZE = 16, - HUEBAR_WIDTH = 17, - HUEBAR_PADDING = 18, - HUEBAR_SELECTOR_HEIGHT = 19, - HUEBAR_SELECTOR_OVERFLOW = 20, -} -extern "C" { - pub fn GuiEnable(); -} -extern "C" { - pub fn GuiDisable(); -} -extern "C" { - pub fn GuiLock(); -} -extern "C" { - pub fn GuiUnlock(); -} -extern "C" { - pub fn GuiFade(alpha: f32); -} -extern "C" { - pub fn GuiSetState(state: ::std::os::raw::c_int); -} -extern "C" { - pub fn GuiGetState() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiSetFont(font: Font); -} -extern "C" { - pub fn GuiGetFont() -> Font; -} -extern "C" { - pub fn GuiSetStyle( - control: ::std::os::raw::c_int, - property: ::std::os::raw::c_int, - value: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiGetStyle( - control: ::std::os::raw::c_int, - property: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiEnableTooltip(); -} -extern "C" { - pub fn GuiDisableTooltip(); -} -extern "C" { - pub fn GuiSetTooltip(tooltip: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiClearTooltip(); -} -extern "C" { - pub fn GuiWindowBox(bounds: Rectangle, title: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiGroupBox(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiLine(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiPanel(bounds: Rectangle); -} -extern "C" { - pub fn GuiScrollPanel(bounds: Rectangle, content: Rectangle, scroll: *mut Vector2) - -> Rectangle; -} -extern "C" { - pub fn GuiLabel(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiButton(bounds: Rectangle, text: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiLabelButton(bounds: Rectangle, text: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiImageButton( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - texture: Texture2D, - ) -> bool; -} -extern "C" { - pub fn GuiImageButtonEx( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - texture: Texture2D, - texSource: Rectangle, - ) -> bool; -} -extern "C" { - pub fn GuiToggle(bounds: Rectangle, text: *const ::std::os::raw::c_char, active: bool) -> bool; -} -extern "C" { - pub fn GuiToggleGroup( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiCheckBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - checked: bool, - ) -> bool; -} -extern "C" { - pub fn GuiComboBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiDropdownBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: *mut ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiSpinner( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - value: *mut ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiValueBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - value: *mut ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiTextBox( - bounds: Rectangle, - text: *mut ::std::os::raw::c_char, - textSize: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiTextBoxMulti( - bounds: Rectangle, - text: *mut ::std::os::raw::c_char, - textSize: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiSlider( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiSliderBar( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiProgressBar( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiStatusBar(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiDummyRec(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiScrollBar( - bounds: Rectangle, - value: ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiGrid(bounds: Rectangle, spacing: f32, subdivs: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn GuiListView( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - scrollIndex: *mut ::std::os::raw::c_int, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiListViewEx( - bounds: Rectangle, - text: *mut *const ::std::os::raw::c_char, - count: ::std::os::raw::c_int, - focus: *mut ::std::os::raw::c_int, - scrollIndex: *mut ::std::os::raw::c_int, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiMessageBox( - bounds: Rectangle, - title: *const ::std::os::raw::c_char, - message: *const ::std::os::raw::c_char, - buttons: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiTextInputBox( - bounds: Rectangle, - title: *const ::std::os::raw::c_char, - message: *const ::std::os::raw::c_char, - buttons: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiColorPicker(bounds: Rectangle, color: Color) -> Color; -} -extern "C" { - pub fn GuiColorPanel(bounds: Rectangle, color: Color) -> Color; -} -extern "C" { - pub fn GuiColorBarAlpha(bounds: Rectangle, alpha: f32) -> f32; -} -extern "C" { - pub fn GuiColorBarHue(bounds: Rectangle, value: f32) -> f32; -} -extern "C" { - pub fn GuiLoadStyle(fileName: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiLoadStyleDefault(); -} -extern "C" { - pub fn GuiIconText( - iconId: ::std::os::raw::c_int, - text: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GuiDrawIcon( - iconId: ::std::os::raw::c_int, - position: Vector2, - pixelSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn GuiGetIcons() -> *mut ::std::os::raw::c_uint; -} -extern "C" { - pub fn GuiGetIconData(iconId: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_uint; -} -extern "C" { - pub fn GuiSetIconData(iconId: ::std::os::raw::c_int, data: *mut ::std::os::raw::c_uint); -} -extern "C" { - pub fn GuiSetIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiClearIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiCheckIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ) -> bool; -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum guiIconName { - RICON_NONE = 0, - RICON_FOLDER_FILE_OPEN = 1, - RICON_FILE_SAVE_CLASSIC = 2, - RICON_FOLDER_OPEN = 3, - RICON_FOLDER_SAVE = 4, - RICON_FILE_OPEN = 5, - RICON_FILE_SAVE = 6, - RICON_FILE_EXPORT = 7, - RICON_FILE_NEW = 8, - RICON_FILE_DELETE = 9, - RICON_FILETYPE_TEXT = 10, - RICON_FILETYPE_AUDIO = 11, - RICON_FILETYPE_IMAGE = 12, - RICON_FILETYPE_PLAY = 13, - RICON_FILETYPE_VIDEO = 14, - RICON_FILETYPE_INFO = 15, - RICON_FILE_COPY = 16, - RICON_FILE_CUT = 17, - RICON_FILE_PASTE = 18, - RICON_CURSOR_HAND = 19, - RICON_CURSOR_POINTER = 20, - RICON_CURSOR_CLASSIC = 21, - RICON_PENCIL = 22, - RICON_PENCIL_BIG = 23, - RICON_BRUSH_CLASSIC = 24, - RICON_BRUSH_PAINTER = 25, - RICON_WATER_DROP = 26, - RICON_COLOR_PICKER = 27, - RICON_RUBBER = 28, - RICON_COLOR_BUCKET = 29, - RICON_TEXT_T = 30, - RICON_TEXT_A = 31, - RICON_SCALE = 32, - RICON_RESIZE = 33, - RICON_FILTER_POINT = 34, - RICON_FILTER_BILINEAR = 35, - RICON_CROP = 36, - RICON_CROP_ALPHA = 37, - RICON_SQUARE_TOGGLE = 38, - RICON_SYMMETRY = 39, - RICON_SYMMETRY_HORIZONTAL = 40, - RICON_SYMMETRY_VERTICAL = 41, - RICON_LENS = 42, - RICON_LENS_BIG = 43, - RICON_EYE_ON = 44, - RICON_EYE_OFF = 45, - RICON_FILTER_TOP = 46, - RICON_FILTER = 47, - RICON_TARGET_POINT = 48, - RICON_TARGET_SMALL = 49, - RICON_TARGET_BIG = 50, - RICON_TARGET_MOVE = 51, - RICON_CURSOR_MOVE = 52, - RICON_CURSOR_SCALE = 53, - RICON_CURSOR_SCALE_RIGHT = 54, - RICON_CURSOR_SCALE_LEFT = 55, - RICON_UNDO = 56, - RICON_REDO = 57, - RICON_REREDO = 58, - RICON_MUTATE = 59, - RICON_ROTATE = 60, - RICON_REPEAT = 61, - RICON_SHUFFLE = 62, - RICON_EMPTYBOX = 63, - RICON_TARGET = 64, - RICON_TARGET_SMALL_FILL = 65, - RICON_TARGET_BIG_FILL = 66, - RICON_TARGET_MOVE_FILL = 67, - RICON_CURSOR_MOVE_FILL = 68, - RICON_CURSOR_SCALE_FILL = 69, - RICON_CURSOR_SCALE_RIGHT_FILL = 70, - RICON_CURSOR_SCALE_LEFT_FILL = 71, - RICON_UNDO_FILL = 72, - RICON_REDO_FILL = 73, - RICON_REREDO_FILL = 74, - RICON_MUTATE_FILL = 75, - RICON_ROTATE_FILL = 76, - RICON_REPEAT_FILL = 77, - RICON_SHUFFLE_FILL = 78, - RICON_EMPTYBOX_SMALL = 79, - RICON_BOX = 80, - RICON_BOX_TOP = 81, - RICON_BOX_TOP_RIGHT = 82, - RICON_BOX_RIGHT = 83, - RICON_BOX_BOTTOM_RIGHT = 84, - RICON_BOX_BOTTOM = 85, - RICON_BOX_BOTTOM_LEFT = 86, - RICON_BOX_LEFT = 87, - RICON_BOX_TOP_LEFT = 88, - RICON_BOX_CENTER = 89, - RICON_BOX_CIRCLE_MASK = 90, - RICON_POT = 91, - RICON_ALPHA_MULTIPLY = 92, - RICON_ALPHA_CLEAR = 93, - RICON_DITHERING = 94, - RICON_MIPMAPS = 95, - RICON_BOX_GRID = 96, - RICON_GRID = 97, - RICON_BOX_CORNERS_SMALL = 98, - RICON_BOX_CORNERS_BIG = 99, - RICON_FOUR_BOXES = 100, - RICON_GRID_FILL = 101, - RICON_BOX_MULTISIZE = 102, - RICON_ZOOM_SMALL = 103, - RICON_ZOOM_MEDIUM = 104, - RICON_ZOOM_BIG = 105, - RICON_ZOOM_ALL = 106, - RICON_ZOOM_CENTER = 107, - RICON_BOX_DOTS_SMALL = 108, - RICON_BOX_DOTS_BIG = 109, - RICON_BOX_CONCENTRIC = 110, - RICON_BOX_GRID_BIG = 111, - RICON_OK_TICK = 112, - RICON_CROSS = 113, - RICON_ARROW_LEFT = 114, - RICON_ARROW_RIGHT = 115, - RICON_ARROW_BOTTOM = 116, - RICON_ARROW_TOP = 117, - RICON_ARROW_LEFT_FILL = 118, - RICON_ARROW_RIGHT_FILL = 119, - RICON_ARROW_BOTTOM_FILL = 120, - RICON_ARROW_TOP_FILL = 121, - RICON_AUDIO = 122, - RICON_FX = 123, - RICON_WAVE = 124, - RICON_WAVE_SINUS = 125, - RICON_WAVE_SQUARE = 126, - RICON_WAVE_TRIANGULAR = 127, - RICON_CROSS_SMALL = 128, - RICON_PLAYER_PREVIOUS = 129, - RICON_PLAYER_PLAY_BACK = 130, - RICON_PLAYER_PLAY = 131, - RICON_PLAYER_PAUSE = 132, - RICON_PLAYER_STOP = 133, - RICON_PLAYER_NEXT = 134, - RICON_PLAYER_RECORD = 135, - RICON_MAGNET = 136, - RICON_LOCK_CLOSE = 137, - RICON_LOCK_OPEN = 138, - RICON_CLOCK = 139, - RICON_TOOLS = 140, - RICON_GEAR = 141, - RICON_GEAR_BIG = 142, - RICON_BIN = 143, - RICON_HAND_POINTER = 144, - RICON_LASER = 145, - RICON_COIN = 146, - RICON_EXPLOSION = 147, - RICON_1UP = 148, - RICON_PLAYER = 149, - RICON_PLAYER_JUMP = 150, - RICON_KEY = 151, - RICON_DEMON = 152, - RICON_TEXT_POPUP = 153, - RICON_GEAR_EX = 154, - RICON_CRACK = 155, - RICON_CRACK_POINTS = 156, - RICON_STAR = 157, - RICON_DOOR = 158, - RICON_EXIT = 159, - RICON_MODE_2D = 160, - RICON_MODE_3D = 161, - RICON_CUBE = 162, - RICON_CUBE_FACE_TOP = 163, - RICON_CUBE_FACE_LEFT = 164, - RICON_CUBE_FACE_FRONT = 165, - RICON_CUBE_FACE_BOTTOM = 166, - RICON_CUBE_FACE_RIGHT = 167, - RICON_CUBE_FACE_BACK = 168, - RICON_CAMERA = 169, - RICON_SPECIAL = 170, - RICON_LINK_NET = 171, - RICON_LINK_BOXES = 172, - RICON_LINK_MULTI = 173, - RICON_LINK = 174, - RICON_LINK_BROKE = 175, - RICON_TEXT_NOTES = 176, - RICON_NOTEBOOK = 177, - RICON_SUITCASE = 178, - RICON_SUITCASE_ZIP = 179, - RICON_MAILBOX = 180, - RICON_MONITOR = 181, - RICON_PRINTER = 182, - RICON_PHOTO_CAMERA = 183, - RICON_PHOTO_CAMERA_FLASH = 184, - RICON_HOUSE = 185, - RICON_HEART = 186, - RICON_CORNER = 187, - RICON_VERTICAL_BARS = 188, - RICON_VERTICAL_BARS_FILL = 189, - RICON_LIFE_BARS = 190, - RICON_INFO = 191, - RICON_CROSSLINE = 192, - RICON_HELP = 193, - RICON_FILETYPE_ALPHA = 194, - RICON_FILETYPE_HOME = 195, - RICON_LAYERS_VISIBLE = 196, - RICON_LAYERS = 197, - RICON_WINDOW = 198, - RICON_HIDPI = 199, - RICON_200 = 200, - RICON_201 = 201, - RICON_202 = 202, - RICON_203 = 203, - RICON_204 = 204, - RICON_205 = 205, - RICON_206 = 206, - RICON_207 = 207, - RICON_208 = 208, - RICON_209 = 209, - RICON_210 = 210, - RICON_211 = 211, - RICON_212 = 212, - RICON_213 = 213, - RICON_214 = 214, - RICON_215 = 215, - RICON_216 = 216, - RICON_217 = 217, - RICON_218 = 218, - RICON_219 = 219, - RICON_220 = 220, - RICON_221 = 221, - RICON_222 = 222, - RICON_223 = 223, - RICON_224 = 224, - RICON_225 = 225, - RICON_226 = 226, - RICON_227 = 227, - RICON_228 = 228, - RICON_229 = 229, - RICON_230 = 230, - RICON_231 = 231, - RICON_232 = 232, - RICON_233 = 233, - RICON_234 = 234, - RICON_235 = 235, - RICON_236 = 236, - RICON_237 = 237, - RICON_238 = 238, - RICON_239 = 239, - RICON_240 = 240, - RICON_241 = 241, - RICON_242 = 242, - RICON_243 = 243, - RICON_244 = 244, - RICON_245 = 245, - RICON_246 = 246, - RICON_247 = 247, - RICON_248 = 248, - RICON_249 = 249, - RICON_250 = 250, - RICON_251 = 251, - RICON_252 = 252, - RICON_253 = 253, - RICON_254 = 254, - RICON_255 = 255, -} -extern "C" { - pub static mut guiIcons: [::std::os::raw::c_uint; 2048usize]; -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiPropertyElement { - BORDER = 0, - BASE = 1, - TEXT = 2, - OTHER = 3, -} -extern "C" { - pub static mut guiState: GuiControlState; -} -extern "C" { - pub static mut guiFont: Font; -} -pub const guiLocked: bool = false; -pub const guiAlpha: f32 = 1.0; -extern "C" { - pub static mut guiStyle: [::std::os::raw::c_uint; 384usize]; -} -pub const guiStyleLoaded: bool = false; -extern "C" { - pub static mut guiTooltip: *const ::std::os::raw::c_char; -} -pub const guiTooltipEnabled: bool = true; -extern "C" { - pub fn GuiSliderPro( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - sliderWidth: ::std::os::raw::c_int, - ) -> f32; -} -extern "C" { - pub fn GuiColorPanelEx(bounds: Rectangle, color: Color, hue: f32) -> Color; -} -extern "C" { - pub fn GuiLoadIcons( - fileName: *const ::std::os::raw::c_char, - loadIconsName: bool, - ) -> *mut *mut ::std::os::raw::c_char; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Light { - pub type_: ::std::os::raw::c_int, - pub position: Vector3, - pub target: Vector3, - pub color: Color, - pub enabled: bool, - pub enabledLoc: ::std::os::raw::c_int, - pub typeLoc: ::std::os::raw::c_int, - pub posLoc: ::std::os::raw::c_int, - pub targetLoc: ::std::os::raw::c_int, - pub colorLoc: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Light() { - assert_eq!( - ::std::mem::size_of::(), - 56usize, - concat!("Size of: ", stringify!(Light)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Light)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).type_ as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(type_) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).target as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).color as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(color) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).enabled as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(enabled) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).enabledLoc as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(enabledLoc) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).typeLoc as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(typeLoc) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).posLoc as *const _ as usize }, - 44usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(posLoc) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).targetLoc as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(targetLoc) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).colorLoc as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(Light), - "::", - stringify!(colorLoc) - ) - ); -} -#[repr(u32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum LightType { - LIGHT_DIRECTIONAL = 0, - LIGHT_POINT = 1, -} -extern "C" { - pub fn CreateLight( - type_: ::std::os::raw::c_int, - position: Vector3, - target: Vector3, - color: Color, - shader: Shader, - ) -> Light; -} -extern "C" { - pub fn UpdateLightValues(shader: Shader, light: Light); -} -pub const lightsCount: ::std::os::raw::c_int = 0; -pub type __builtin_va_list = [__va_list_tag; 1usize]; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __va_list_tag { - pub gp_offset: ::std::os::raw::c_uint, - pub fp_offset: ::std::os::raw::c_uint, - pub overflow_arg_area: *mut ::std::os::raw::c_void, - pub reg_save_area: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout___va_list_tag() { - assert_eq!( - ::std::mem::size_of::<__va_list_tag>(), - 24usize, - concat!("Size of: ", stringify!(__va_list_tag)) - ); - assert_eq!( - ::std::mem::align_of::<__va_list_tag>(), - 8usize, - concat!("Alignment of ", stringify!(__va_list_tag)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).gp_offset as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(gp_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).fp_offset as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(fp_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).overflow_arg_area as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(overflow_arg_area) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__va_list_tag>())).reg_save_area as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(__va_list_tag), - "::", - stringify!(reg_save_area) - ) - ); -} diff --git a/raylib-sys/bindings_windows.rs b/raylib-sys/bindings_windows.rs deleted file mode 100644 index f99f987e..00000000 --- a/raylib-sys/bindings_windows.rs +++ /dev/null @@ -1,17873 +0,0 @@ -/* automatically generated by rust-bindgen 0.54.1 */ - -pub const __GNUC_VA_LIST: u32 = 1; -pub const PI: f64 = 3.141592653589793; -pub const DEG2RAD: f64 = 0.017453292519943295; -pub const RAD2DEG: f64 = 57.29577951308232; -pub const _VCRT_COMPILER_PREPROCESSOR: u32 = 1; -pub const _SAL_VERSION: u32 = 20; -pub const __SAL_H_VERSION: u32 = 180000000; -pub const _USE_DECLSPECS_FOR_SAL: u32 = 0; -pub const _USE_ATTRIBUTES_FOR_SAL: u32 = 0; -pub const _CRT_PACKING: u32 = 8; -pub const _HAS_EXCEPTIONS: u32 = 1; -pub const _STL_LANG: u32 = 0; -pub const _HAS_CXX17: u32 = 0; -pub const _HAS_CXX20: u32 = 0; -pub const _HAS_NODISCARD: u32 = 0; -pub const _ARGMAX: u32 = 100; -pub const _CRT_INT_MAX: u32 = 2147483647; -pub const _CRT_FUNCTIONS_REQUIRED: u32 = 1; -pub const _CRT_HAS_CXX17: u32 = 0; -pub const _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE: u32 = 1; -pub const _CRT_BUILD_DESKTOP_APP: u32 = 1; -pub const _CRT_INTERNAL_NONSTDC_NAMES: u32 = 1; -pub const __STDC_SECURE_LIB__: u32 = 200411; -pub const __GOT_SECURE_LIB__: u32 = 200411; -pub const __STDC_WANT_SECURE_LIB__: u32 = 1; -pub const _SECURECRT_FILL_BUFFER_PATTERN: u32 = 254; -pub const _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES: u32 = 0; -pub const _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT: u32 = 0; -pub const _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES: u32 = 1; -pub const _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY: u32 = 0; -pub const _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY: u32 = 0; -pub const _DOMAIN: u32 = 1; -pub const _SING: u32 = 2; -pub const _OVERFLOW: u32 = 3; -pub const _UNDERFLOW: u32 = 4; -pub const _TLOSS: u32 = 5; -pub const _PLOSS: u32 = 6; -pub const _HUGE_ENUF : f64 = 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0 ; -pub const _DENORM: i32 = -2; -pub const _FINITE: i32 = -1; -pub const _INFCODE: u32 = 1; -pub const _NANCODE: u32 = 2; -pub const FP_INFINITE: u32 = 1; -pub const FP_NAN: u32 = 2; -pub const FP_NORMAL: i32 = -1; -pub const FP_SUBNORMAL: i32 = -2; -pub const FP_ZERO: u32 = 0; -pub const _C2: u32 = 1; -pub const FP_ILOGB0: i32 = -2147483648; -pub const FP_ILOGBNAN: u32 = 2147483647; -pub const MATH_ERRNO: u32 = 1; -pub const MATH_ERREXCEPT: u32 = 2; -pub const math_errhandling: u32 = 3; -pub const _FE_DIVBYZERO: u32 = 4; -pub const _FE_INEXACT: u32 = 32; -pub const _FE_INVALID: u32 = 1; -pub const _FE_OVERFLOW: u32 = 8; -pub const _FE_UNDERFLOW: u32 = 16; -pub const _D0_C: u32 = 3; -pub const _D1_C: u32 = 2; -pub const _D2_C: u32 = 1; -pub const _D3_C: u32 = 0; -pub const _DBIAS: u32 = 1022; -pub const _DOFF: u32 = 4; -pub const _F0_C: u32 = 1; -pub const _F1_C: u32 = 0; -pub const _FBIAS: u32 = 126; -pub const _FOFF: u32 = 7; -pub const _FRND: u32 = 1; -pub const _L0_C: u32 = 3; -pub const _L1_C: u32 = 2; -pub const _L2_C: u32 = 1; -pub const _L3_C: u32 = 0; -pub const _LBIAS: u32 = 1022; -pub const _LOFF: u32 = 4; -pub const _FP_LT: u32 = 1; -pub const _FP_EQ: u32 = 2; -pub const _FP_GT: u32 = 4; -pub const DOMAIN: u32 = 1; -pub const SING: u32 = 2; -pub const OVERFLOW: u32 = 3; -pub const UNDERFLOW: u32 = 4; -pub const TLOSS: u32 = 5; -pub const PLOSS: u32 = 6; -pub const DEFAULT_BATCH_BUFFER_ELEMENTS: u32 = 8192; -pub const DEFAULT_BATCH_BUFFERS: u32 = 1; -pub const DEFAULT_BATCH_DRAWCALLS: u32 = 256; -pub const MAX_BATCH_ACTIVE_TEXTURES: u32 = 4; -pub const MAX_MATRIX_STACK_SIZE: u32 = 32; -pub const MAX_MESH_VERTEX_BUFFERS: u32 = 7; -pub const MAX_SHADER_LOCATIONS: u32 = 32; -pub const MAX_MATERIAL_MAPS: u32 = 12; -pub const RL_CULL_DISTANCE_NEAR: f64 = 0.01; -pub const RL_CULL_DISTANCE_FAR: f64 = 1000.0; -pub const RL_TEXTURE_WRAP_S: u32 = 10242; -pub const RL_TEXTURE_WRAP_T: u32 = 10243; -pub const RL_TEXTURE_MAG_FILTER: u32 = 10240; -pub const RL_TEXTURE_MIN_FILTER: u32 = 10241; -pub const RL_TEXTURE_FILTER_NEAREST: u32 = 9728; -pub const RL_TEXTURE_FILTER_LINEAR: u32 = 9729; -pub const RL_TEXTURE_FILTER_MIP_NEAREST: u32 = 9984; -pub const RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR: u32 = 9986; -pub const RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST: u32 = 9985; -pub const RL_TEXTURE_FILTER_MIP_LINEAR: u32 = 9987; -pub const RL_TEXTURE_FILTER_ANISOTROPIC: u32 = 12288; -pub const RL_TEXTURE_WRAP_REPEAT: u32 = 10497; -pub const RL_TEXTURE_WRAP_CLAMP: u32 = 33071; -pub const RL_TEXTURE_WRAP_MIRROR_REPEAT: u32 = 33648; -pub const RL_TEXTURE_WRAP_MIRROR_CLAMP: u32 = 34626; -pub const RL_MODELVIEW: u32 = 5888; -pub const RL_PROJECTION: u32 = 5889; -pub const RL_TEXTURE: u32 = 5890; -pub const RL_LINES: u32 = 1; -pub const RL_TRIANGLES: u32 = 4; -pub const RL_QUADS: u32 = 7; -pub const RL_UNSIGNED_BYTE: u32 = 5121; -pub const RL_FLOAT: u32 = 5126; -pub const RAYLIB_VERSION: &'static [u8; 4usize] = b"3.0\0"; -pub const SUPPORT_CAMERA_SYSTEM: u32 = 1; -pub const SUPPORT_GESTURES_SYSTEM: u32 = 1; -pub const SUPPORT_MOUSE_GESTURES: u32 = 1; -pub const SUPPORT_SSH_KEYBOARD_RPI: u32 = 1; -pub const SUPPORT_MOUSE_CURSOR_RPI: u32 = 1; -pub const SUPPORT_SCREEN_CAPTURE: u32 = 1; -pub const SUPPORT_COMPRESSION_API: u32 = 1; -pub const SUPPORT_DATA_STORAGE: u32 = 1; -pub const SUPPORT_VR_SIMULATOR: u32 = 1; -pub const SUPPORT_FONT_TEXTURE: u32 = 1; -pub const SUPPORT_QUADS_DRAW_MODE: u32 = 1; -pub const SUPPORT_FILEFORMAT_PNG: u32 = 1; -pub const SUPPORT_FILEFORMAT_BMP: u32 = 1; -pub const SUPPORT_FILEFORMAT_TGA: u32 = 1; -pub const SUPPORT_FILEFORMAT_GIF: u32 = 1; -pub const SUPPORT_FILEFORMAT_DDS: u32 = 1; -pub const SUPPORT_FILEFORMAT_HDR: u32 = 1; -pub const SUPPORT_FILEFORMAT_KTX: u32 = 1; -pub const SUPPORT_FILEFORMAT_ASTC: u32 = 1; -pub const SUPPORT_IMAGE_EXPORT: u32 = 1; -pub const SUPPORT_IMAGE_MANIPULATION: u32 = 1; -pub const SUPPORT_IMAGE_GENERATION: u32 = 1; -pub const SUPPORT_DEFAULT_FONT: u32 = 1; -pub const SUPPORT_FILEFORMAT_FNT: u32 = 1; -pub const SUPPORT_FILEFORMAT_TTF: u32 = 1; -pub const SUPPORT_FILEFORMAT_OBJ: u32 = 1; -pub const SUPPORT_FILEFORMAT_MTL: u32 = 1; -pub const SUPPORT_FILEFORMAT_IQM: u32 = 1; -pub const SUPPORT_FILEFORMAT_GLTF: u32 = 1; -pub const SUPPORT_MESH_GENERATION: u32 = 1; -pub const SUPPORT_FILEFORMAT_WAV: u32 = 1; -pub const SUPPORT_FILEFORMAT_OGG: u32 = 1; -pub const SUPPORT_FILEFORMAT_XM: u32 = 1; -pub const SUPPORT_FILEFORMAT_MOD: u32 = 1; -pub const SUPPORT_FILEFORMAT_MP3: u32 = 1; -pub const SUPPORT_TRACELOG: u32 = 1; -pub const _MAX_ITOSTR_BASE16_COUNT: u32 = 9; -pub const _MAX_ITOSTR_BASE10_COUNT: u32 = 12; -pub const _MAX_ITOSTR_BASE8_COUNT: u32 = 12; -pub const _MAX_ITOSTR_BASE2_COUNT: u32 = 33; -pub const _MAX_LTOSTR_BASE16_COUNT: u32 = 9; -pub const _MAX_LTOSTR_BASE10_COUNT: u32 = 12; -pub const _MAX_LTOSTR_BASE8_COUNT: u32 = 12; -pub const _MAX_LTOSTR_BASE2_COUNT: u32 = 33; -pub const _MAX_ULTOSTR_BASE16_COUNT: u32 = 9; -pub const _MAX_ULTOSTR_BASE10_COUNT: u32 = 11; -pub const _MAX_ULTOSTR_BASE8_COUNT: u32 = 12; -pub const _MAX_ULTOSTR_BASE2_COUNT: u32 = 33; -pub const _MAX_I64TOSTR_BASE16_COUNT: u32 = 17; -pub const _MAX_I64TOSTR_BASE10_COUNT: u32 = 21; -pub const _MAX_I64TOSTR_BASE8_COUNT: u32 = 23; -pub const _MAX_I64TOSTR_BASE2_COUNT: u32 = 65; -pub const _MAX_U64TOSTR_BASE16_COUNT: u32 = 17; -pub const _MAX_U64TOSTR_BASE10_COUNT: u32 = 21; -pub const _MAX_U64TOSTR_BASE8_COUNT: u32 = 23; -pub const _MAX_U64TOSTR_BASE2_COUNT: u32 = 65; -pub const CHAR_BIT: u32 = 8; -pub const SCHAR_MIN: i32 = -128; -pub const SCHAR_MAX: u32 = 127; -pub const UCHAR_MAX: u32 = 255; -pub const CHAR_MIN: i32 = -128; -pub const CHAR_MAX: u32 = 127; -pub const MB_LEN_MAX: u32 = 5; -pub const SHRT_MIN: i32 = -32768; -pub const SHRT_MAX: u32 = 32767; -pub const USHRT_MAX: u32 = 65535; -pub const INT_MIN: i32 = -2147483648; -pub const INT_MAX: u32 = 2147483647; -pub const UINT_MAX: u32 = 4294967295; -pub const LONG_MIN: i32 = -2147483648; -pub const LONG_MAX: u32 = 2147483647; -pub const ULONG_MAX: u32 = 4294967295; -pub const EXIT_SUCCESS: u32 = 0; -pub const EXIT_FAILURE: u32 = 1; -pub const _WRITE_ABORT_MSG: u32 = 1; -pub const _CALL_REPORTFAULT: u32 = 2; -pub const _OUT_TO_DEFAULT: u32 = 0; -pub const _OUT_TO_STDERR: u32 = 1; -pub const _OUT_TO_MSGBOX: u32 = 2; -pub const _REPORT_ERRMODE: u32 = 3; -pub const RAND_MAX: u32 = 32767; -pub const _CVTBUFSIZE: u32 = 349; -pub const _MAX_PATH: u32 = 260; -pub const _MAX_DRIVE: u32 = 3; -pub const _MAX_DIR: u32 = 256; -pub const _MAX_FNAME: u32 = 256; -pub const _MAX_EXT: u32 = 256; -pub const _MAX_ENV: u32 = 32767; -pub const EPERM: u32 = 1; -pub const ENOENT: u32 = 2; -pub const ESRCH: u32 = 3; -pub const EINTR: u32 = 4; -pub const EIO: u32 = 5; -pub const ENXIO: u32 = 6; -pub const E2BIG: u32 = 7; -pub const ENOEXEC: u32 = 8; -pub const EBADF: u32 = 9; -pub const ECHILD: u32 = 10; -pub const EAGAIN: u32 = 11; -pub const ENOMEM: u32 = 12; -pub const EACCES: u32 = 13; -pub const EFAULT: u32 = 14; -pub const EBUSY: u32 = 16; -pub const EEXIST: u32 = 17; -pub const EXDEV: u32 = 18; -pub const ENODEV: u32 = 19; -pub const ENOTDIR: u32 = 20; -pub const EISDIR: u32 = 21; -pub const ENFILE: u32 = 23; -pub const EMFILE: u32 = 24; -pub const ENOTTY: u32 = 25; -pub const EFBIG: u32 = 27; -pub const ENOSPC: u32 = 28; -pub const ESPIPE: u32 = 29; -pub const EROFS: u32 = 30; -pub const EMLINK: u32 = 31; -pub const EPIPE: u32 = 32; -pub const EDOM: u32 = 33; -pub const EDEADLK: u32 = 36; -pub const ENAMETOOLONG: u32 = 38; -pub const ENOLCK: u32 = 39; -pub const ENOSYS: u32 = 40; -pub const ENOTEMPTY: u32 = 41; -pub const EINVAL: u32 = 22; -pub const ERANGE: u32 = 34; -pub const EILSEQ: u32 = 42; -pub const STRUNCATE: u32 = 80; -pub const EDEADLOCK: u32 = 36; -pub const EADDRINUSE: u32 = 100; -pub const EADDRNOTAVAIL: u32 = 101; -pub const EAFNOSUPPORT: u32 = 102; -pub const EALREADY: u32 = 103; -pub const EBADMSG: u32 = 104; -pub const ECANCELED: u32 = 105; -pub const ECONNABORTED: u32 = 106; -pub const ECONNREFUSED: u32 = 107; -pub const ECONNRESET: u32 = 108; -pub const EDESTADDRREQ: u32 = 109; -pub const EHOSTUNREACH: u32 = 110; -pub const EIDRM: u32 = 111; -pub const EINPROGRESS: u32 = 112; -pub const EISCONN: u32 = 113; -pub const ELOOP: u32 = 114; -pub const EMSGSIZE: u32 = 115; -pub const ENETDOWN: u32 = 116; -pub const ENETRESET: u32 = 117; -pub const ENETUNREACH: u32 = 118; -pub const ENOBUFS: u32 = 119; -pub const ENODATA: u32 = 120; -pub const ENOLINK: u32 = 121; -pub const ENOMSG: u32 = 122; -pub const ENOPROTOOPT: u32 = 123; -pub const ENOSR: u32 = 124; -pub const ENOSTR: u32 = 125; -pub const ENOTCONN: u32 = 126; -pub const ENOTRECOVERABLE: u32 = 127; -pub const ENOTSOCK: u32 = 128; -pub const ENOTSUP: u32 = 129; -pub const EOPNOTSUPP: u32 = 130; -pub const EOTHER: u32 = 131; -pub const EOVERFLOW: u32 = 132; -pub const EOWNERDEAD: u32 = 133; -pub const EPROTO: u32 = 134; -pub const EPROTONOSUPPORT: u32 = 135; -pub const EPROTOTYPE: u32 = 136; -pub const ETIME: u32 = 137; -pub const ETIMEDOUT: u32 = 138; -pub const ETXTBSY: u32 = 139; -pub const EWOULDBLOCK: u32 = 140; -pub const _NLSCMPERROR: u32 = 2147483647; -pub const WIN32_LEAN_AND_MEAN: u32 = 1; -pub const WCHAR_MIN: u32 = 0; -pub const WCHAR_MAX: u32 = 65535; -pub const WINT_MIN: u32 = 0; -pub const WINT_MAX: u32 = 65535; -pub const PRId8: &'static [u8; 4usize] = b"hhd\0"; -pub const PRId16: &'static [u8; 3usize] = b"hd\0"; -pub const PRId32: &'static [u8; 2usize] = b"d\0"; -pub const PRId64: &'static [u8; 4usize] = b"lld\0"; -pub const PRIdLEAST8: &'static [u8; 4usize] = b"hhd\0"; -pub const PRIdLEAST16: &'static [u8; 3usize] = b"hd\0"; -pub const PRIdLEAST32: &'static [u8; 2usize] = b"d\0"; -pub const PRIdLEAST64: &'static [u8; 4usize] = b"lld\0"; -pub const PRIdFAST8: &'static [u8; 4usize] = b"hhd\0"; -pub const PRIdFAST16: &'static [u8; 2usize] = b"d\0"; -pub const PRIdFAST32: &'static [u8; 2usize] = b"d\0"; -pub const PRIdFAST64: &'static [u8; 4usize] = b"lld\0"; -pub const PRIdMAX: &'static [u8; 4usize] = b"lld\0"; -pub const PRIdPTR: &'static [u8; 4usize] = b"lld\0"; -pub const PRIi8: &'static [u8; 4usize] = b"hhi\0"; -pub const PRIi16: &'static [u8; 3usize] = b"hi\0"; -pub const PRIi32: &'static [u8; 2usize] = b"i\0"; -pub const PRIi64: &'static [u8; 4usize] = b"lli\0"; -pub const PRIiLEAST8: &'static [u8; 4usize] = b"hhi\0"; -pub const PRIiLEAST16: &'static [u8; 3usize] = b"hi\0"; -pub const PRIiLEAST32: &'static [u8; 2usize] = b"i\0"; -pub const PRIiLEAST64: &'static [u8; 4usize] = b"lli\0"; -pub const PRIiFAST8: &'static [u8; 4usize] = b"hhi\0"; -pub const PRIiFAST16: &'static [u8; 2usize] = b"i\0"; -pub const PRIiFAST32: &'static [u8; 2usize] = b"i\0"; -pub const PRIiFAST64: &'static [u8; 4usize] = b"lli\0"; -pub const PRIiMAX: &'static [u8; 4usize] = b"lli\0"; -pub const PRIiPTR: &'static [u8; 4usize] = b"lli\0"; -pub const PRIo8: &'static [u8; 4usize] = b"hho\0"; -pub const PRIo16: &'static [u8; 3usize] = b"ho\0"; -pub const PRIo32: &'static [u8; 2usize] = b"o\0"; -pub const PRIo64: &'static [u8; 4usize] = b"llo\0"; -pub const PRIoLEAST8: &'static [u8; 4usize] = b"hho\0"; -pub const PRIoLEAST16: &'static [u8; 3usize] = b"ho\0"; -pub const PRIoLEAST32: &'static [u8; 2usize] = b"o\0"; -pub const PRIoLEAST64: &'static [u8; 4usize] = b"llo\0"; -pub const PRIoFAST8: &'static [u8; 4usize] = b"hho\0"; -pub const PRIoFAST16: &'static [u8; 2usize] = b"o\0"; -pub const PRIoFAST32: &'static [u8; 2usize] = b"o\0"; -pub const PRIoFAST64: &'static [u8; 4usize] = b"llo\0"; -pub const PRIoMAX: &'static [u8; 4usize] = b"llo\0"; -pub const PRIoPTR: &'static [u8; 4usize] = b"llo\0"; -pub const PRIu8: &'static [u8; 4usize] = b"hhu\0"; -pub const PRIu16: &'static [u8; 3usize] = b"hu\0"; -pub const PRIu32: &'static [u8; 2usize] = b"u\0"; -pub const PRIu64: &'static [u8; 4usize] = b"llu\0"; -pub const PRIuLEAST8: &'static [u8; 4usize] = b"hhu\0"; -pub const PRIuLEAST16: &'static [u8; 3usize] = b"hu\0"; -pub const PRIuLEAST32: &'static [u8; 2usize] = b"u\0"; -pub const PRIuLEAST64: &'static [u8; 4usize] = b"llu\0"; -pub const PRIuFAST8: &'static [u8; 4usize] = b"hhu\0"; -pub const PRIuFAST16: &'static [u8; 2usize] = b"u\0"; -pub const PRIuFAST32: &'static [u8; 2usize] = b"u\0"; -pub const PRIuFAST64: &'static [u8; 4usize] = b"llu\0"; -pub const PRIuMAX: &'static [u8; 4usize] = b"llu\0"; -pub const PRIuPTR: &'static [u8; 4usize] = b"llu\0"; -pub const PRIx8: &'static [u8; 4usize] = b"hhx\0"; -pub const PRIx16: &'static [u8; 3usize] = b"hx\0"; -pub const PRIx32: &'static [u8; 2usize] = b"x\0"; -pub const PRIx64: &'static [u8; 4usize] = b"llx\0"; -pub const PRIxLEAST8: &'static [u8; 4usize] = b"hhx\0"; -pub const PRIxLEAST16: &'static [u8; 3usize] = b"hx\0"; -pub const PRIxLEAST32: &'static [u8; 2usize] = b"x\0"; -pub const PRIxLEAST64: &'static [u8; 4usize] = b"llx\0"; -pub const PRIxFAST8: &'static [u8; 4usize] = b"hhx\0"; -pub const PRIxFAST16: &'static [u8; 2usize] = b"x\0"; -pub const PRIxFAST32: &'static [u8; 2usize] = b"x\0"; -pub const PRIxFAST64: &'static [u8; 4usize] = b"llx\0"; -pub const PRIxMAX: &'static [u8; 4usize] = b"llx\0"; -pub const PRIxPTR: &'static [u8; 4usize] = b"llx\0"; -pub const PRIX8: &'static [u8; 4usize] = b"hhX\0"; -pub const PRIX16: &'static [u8; 3usize] = b"hX\0"; -pub const PRIX32: &'static [u8; 2usize] = b"X\0"; -pub const PRIX64: &'static [u8; 4usize] = b"llX\0"; -pub const PRIXLEAST8: &'static [u8; 4usize] = b"hhX\0"; -pub const PRIXLEAST16: &'static [u8; 3usize] = b"hX\0"; -pub const PRIXLEAST32: &'static [u8; 2usize] = b"X\0"; -pub const PRIXLEAST64: &'static [u8; 4usize] = b"llX\0"; -pub const PRIXFAST8: &'static [u8; 4usize] = b"hhX\0"; -pub const PRIXFAST16: &'static [u8; 2usize] = b"X\0"; -pub const PRIXFAST32: &'static [u8; 2usize] = b"X\0"; -pub const PRIXFAST64: &'static [u8; 4usize] = b"llX\0"; -pub const PRIXMAX: &'static [u8; 4usize] = b"llX\0"; -pub const PRIXPTR: &'static [u8; 4usize] = b"llX\0"; -pub const SCNd8: &'static [u8; 4usize] = b"hhd\0"; -pub const SCNd16: &'static [u8; 3usize] = b"hd\0"; -pub const SCNd32: &'static [u8; 2usize] = b"d\0"; -pub const SCNd64: &'static [u8; 4usize] = b"lld\0"; -pub const SCNdLEAST8: &'static [u8; 4usize] = b"hhd\0"; -pub const SCNdLEAST16: &'static [u8; 3usize] = b"hd\0"; -pub const SCNdLEAST32: &'static [u8; 2usize] = b"d\0"; -pub const SCNdLEAST64: &'static [u8; 4usize] = b"lld\0"; -pub const SCNdFAST8: &'static [u8; 4usize] = b"hhd\0"; -pub const SCNdFAST16: &'static [u8; 2usize] = b"d\0"; -pub const SCNdFAST32: &'static [u8; 2usize] = b"d\0"; -pub const SCNdFAST64: &'static [u8; 4usize] = b"lld\0"; -pub const SCNdMAX: &'static [u8; 4usize] = b"lld\0"; -pub const SCNdPTR: &'static [u8; 4usize] = b"lld\0"; -pub const SCNi8: &'static [u8; 4usize] = b"hhi\0"; -pub const SCNi16: &'static [u8; 3usize] = b"hi\0"; -pub const SCNi32: &'static [u8; 2usize] = b"i\0"; -pub const SCNi64: &'static [u8; 4usize] = b"lli\0"; -pub const SCNiLEAST8: &'static [u8; 4usize] = b"hhi\0"; -pub const SCNiLEAST16: &'static [u8; 3usize] = b"hi\0"; -pub const SCNiLEAST32: &'static [u8; 2usize] = b"i\0"; -pub const SCNiLEAST64: &'static [u8; 4usize] = b"lli\0"; -pub const SCNiFAST8: &'static [u8; 4usize] = b"hhi\0"; -pub const SCNiFAST16: &'static [u8; 2usize] = b"i\0"; -pub const SCNiFAST32: &'static [u8; 2usize] = b"i\0"; -pub const SCNiFAST64: &'static [u8; 4usize] = b"lli\0"; -pub const SCNiMAX: &'static [u8; 4usize] = b"lli\0"; -pub const SCNiPTR: &'static [u8; 4usize] = b"lli\0"; -pub const SCNo8: &'static [u8; 4usize] = b"hho\0"; -pub const SCNo16: &'static [u8; 3usize] = b"ho\0"; -pub const SCNo32: &'static [u8; 2usize] = b"o\0"; -pub const SCNo64: &'static [u8; 4usize] = b"llo\0"; -pub const SCNoLEAST8: &'static [u8; 4usize] = b"hho\0"; -pub const SCNoLEAST16: &'static [u8; 3usize] = b"ho\0"; -pub const SCNoLEAST32: &'static [u8; 2usize] = b"o\0"; -pub const SCNoLEAST64: &'static [u8; 4usize] = b"llo\0"; -pub const SCNoFAST8: &'static [u8; 4usize] = b"hho\0"; -pub const SCNoFAST16: &'static [u8; 2usize] = b"o\0"; -pub const SCNoFAST32: &'static [u8; 2usize] = b"o\0"; -pub const SCNoFAST64: &'static [u8; 4usize] = b"llo\0"; -pub const SCNoMAX: &'static [u8; 4usize] = b"llo\0"; -pub const SCNoPTR: &'static [u8; 4usize] = b"llo\0"; -pub const SCNu8: &'static [u8; 4usize] = b"hhu\0"; -pub const SCNu16: &'static [u8; 3usize] = b"hu\0"; -pub const SCNu32: &'static [u8; 2usize] = b"u\0"; -pub const SCNu64: &'static [u8; 4usize] = b"llu\0"; -pub const SCNuLEAST8: &'static [u8; 4usize] = b"hhu\0"; -pub const SCNuLEAST16: &'static [u8; 3usize] = b"hu\0"; -pub const SCNuLEAST32: &'static [u8; 2usize] = b"u\0"; -pub const SCNuLEAST64: &'static [u8; 4usize] = b"llu\0"; -pub const SCNuFAST8: &'static [u8; 4usize] = b"hhu\0"; -pub const SCNuFAST16: &'static [u8; 2usize] = b"u\0"; -pub const SCNuFAST32: &'static [u8; 2usize] = b"u\0"; -pub const SCNuFAST64: &'static [u8; 4usize] = b"llu\0"; -pub const SCNuMAX: &'static [u8; 4usize] = b"llu\0"; -pub const SCNuPTR: &'static [u8; 4usize] = b"llu\0"; -pub const SCNx8: &'static [u8; 4usize] = b"hhx\0"; -pub const SCNx16: &'static [u8; 3usize] = b"hx\0"; -pub const SCNx32: &'static [u8; 2usize] = b"x\0"; -pub const SCNx64: &'static [u8; 4usize] = b"llx\0"; -pub const SCNxLEAST8: &'static [u8; 4usize] = b"hhx\0"; -pub const SCNxLEAST16: &'static [u8; 3usize] = b"hx\0"; -pub const SCNxLEAST32: &'static [u8; 2usize] = b"x\0"; -pub const SCNxLEAST64: &'static [u8; 4usize] = b"llx\0"; -pub const SCNxFAST8: &'static [u8; 4usize] = b"hhx\0"; -pub const SCNxFAST16: &'static [u8; 2usize] = b"x\0"; -pub const SCNxFAST32: &'static [u8; 2usize] = b"x\0"; -pub const SCNxFAST64: &'static [u8; 4usize] = b"llx\0"; -pub const SCNxMAX: &'static [u8; 4usize] = b"llx\0"; -pub const SCNxPTR: &'static [u8; 4usize] = b"llx\0"; -pub const GL_DEPTH_BUFFER_BIT: u32 = 256; -pub const GL_STENCIL_BUFFER_BIT: u32 = 1024; -pub const GL_COLOR_BUFFER_BIT: u32 = 16384; -pub const GL_FALSE: u32 = 0; -pub const GL_TRUE: u32 = 1; -pub const GL_POINTS: u32 = 0; -pub const GL_LINES: u32 = 1; -pub const GL_LINE_LOOP: u32 = 2; -pub const GL_LINE_STRIP: u32 = 3; -pub const GL_TRIANGLES: u32 = 4; -pub const GL_TRIANGLE_STRIP: u32 = 5; -pub const GL_TRIANGLE_FAN: u32 = 6; -pub const GL_NEVER: u32 = 512; -pub const GL_LESS: u32 = 513; -pub const GL_EQUAL: u32 = 514; -pub const GL_LEQUAL: u32 = 515; -pub const GL_GREATER: u32 = 516; -pub const GL_NOTEQUAL: u32 = 517; -pub const GL_GEQUAL: u32 = 518; -pub const GL_ALWAYS: u32 = 519; -pub const GL_ZERO: u32 = 0; -pub const GL_ONE: u32 = 1; -pub const GL_SRC_COLOR: u32 = 768; -pub const GL_ONE_MINUS_SRC_COLOR: u32 = 769; -pub const GL_SRC_ALPHA: u32 = 770; -pub const GL_ONE_MINUS_SRC_ALPHA: u32 = 771; -pub const GL_DST_ALPHA: u32 = 772; -pub const GL_ONE_MINUS_DST_ALPHA: u32 = 773; -pub const GL_DST_COLOR: u32 = 774; -pub const GL_ONE_MINUS_DST_COLOR: u32 = 775; -pub const GL_SRC_ALPHA_SATURATE: u32 = 776; -pub const GL_NONE: u32 = 0; -pub const GL_FRONT_LEFT: u32 = 1024; -pub const GL_FRONT_RIGHT: u32 = 1025; -pub const GL_BACK_LEFT: u32 = 1026; -pub const GL_BACK_RIGHT: u32 = 1027; -pub const GL_FRONT: u32 = 1028; -pub const GL_BACK: u32 = 1029; -pub const GL_LEFT: u32 = 1030; -pub const GL_RIGHT: u32 = 1031; -pub const GL_FRONT_AND_BACK: u32 = 1032; -pub const GL_NO_ERROR: u32 = 0; -pub const GL_INVALID_ENUM: u32 = 1280; -pub const GL_INVALID_VALUE: u32 = 1281; -pub const GL_INVALID_OPERATION: u32 = 1282; -pub const GL_OUT_OF_MEMORY: u32 = 1285; -pub const GL_CW: u32 = 2304; -pub const GL_CCW: u32 = 2305; -pub const GL_POINT_SIZE: u32 = 2833; -pub const GL_POINT_SIZE_RANGE: u32 = 2834; -pub const GL_POINT_SIZE_GRANULARITY: u32 = 2835; -pub const GL_LINE_SMOOTH: u32 = 2848; -pub const GL_LINE_WIDTH: u32 = 2849; -pub const GL_LINE_WIDTH_RANGE: u32 = 2850; -pub const GL_LINE_WIDTH_GRANULARITY: u32 = 2851; -pub const GL_POLYGON_MODE: u32 = 2880; -pub const GL_POLYGON_SMOOTH: u32 = 2881; -pub const GL_CULL_FACE: u32 = 2884; -pub const GL_CULL_FACE_MODE: u32 = 2885; -pub const GL_FRONT_FACE: u32 = 2886; -pub const GL_DEPTH_RANGE: u32 = 2928; -pub const GL_DEPTH_TEST: u32 = 2929; -pub const GL_DEPTH_WRITEMASK: u32 = 2930; -pub const GL_DEPTH_CLEAR_VALUE: u32 = 2931; -pub const GL_DEPTH_FUNC: u32 = 2932; -pub const GL_STENCIL_TEST: u32 = 2960; -pub const GL_STENCIL_CLEAR_VALUE: u32 = 2961; -pub const GL_STENCIL_FUNC: u32 = 2962; -pub const GL_STENCIL_VALUE_MASK: u32 = 2963; -pub const GL_STENCIL_FAIL: u32 = 2964; -pub const GL_STENCIL_PASS_DEPTH_FAIL: u32 = 2965; -pub const GL_STENCIL_PASS_DEPTH_PASS: u32 = 2966; -pub const GL_STENCIL_REF: u32 = 2967; -pub const GL_STENCIL_WRITEMASK: u32 = 2968; -pub const GL_VIEWPORT: u32 = 2978; -pub const GL_DITHER: u32 = 3024; -pub const GL_BLEND_DST: u32 = 3040; -pub const GL_BLEND_SRC: u32 = 3041; -pub const GL_BLEND: u32 = 3042; -pub const GL_LOGIC_OP_MODE: u32 = 3056; -pub const GL_COLOR_LOGIC_OP: u32 = 3058; -pub const GL_DRAW_BUFFER: u32 = 3073; -pub const GL_READ_BUFFER: u32 = 3074; -pub const GL_SCISSOR_BOX: u32 = 3088; -pub const GL_SCISSOR_TEST: u32 = 3089; -pub const GL_COLOR_CLEAR_VALUE: u32 = 3106; -pub const GL_COLOR_WRITEMASK: u32 = 3107; -pub const GL_DOUBLEBUFFER: u32 = 3122; -pub const GL_STEREO: u32 = 3123; -pub const GL_LINE_SMOOTH_HINT: u32 = 3154; -pub const GL_POLYGON_SMOOTH_HINT: u32 = 3155; -pub const GL_UNPACK_SWAP_BYTES: u32 = 3312; -pub const GL_UNPACK_LSB_FIRST: u32 = 3313; -pub const GL_UNPACK_ROW_LENGTH: u32 = 3314; -pub const GL_UNPACK_SKIP_ROWS: u32 = 3315; -pub const GL_UNPACK_SKIP_PIXELS: u32 = 3316; -pub const GL_UNPACK_ALIGNMENT: u32 = 3317; -pub const GL_PACK_SWAP_BYTES: u32 = 3328; -pub const GL_PACK_LSB_FIRST: u32 = 3329; -pub const GL_PACK_ROW_LENGTH: u32 = 3330; -pub const GL_PACK_SKIP_ROWS: u32 = 3331; -pub const GL_PACK_SKIP_PIXELS: u32 = 3332; -pub const GL_PACK_ALIGNMENT: u32 = 3333; -pub const GL_MAX_TEXTURE_SIZE: u32 = 3379; -pub const GL_MAX_VIEWPORT_DIMS: u32 = 3386; -pub const GL_SUBPIXEL_BITS: u32 = 3408; -pub const GL_TEXTURE_1D: u32 = 3552; -pub const GL_TEXTURE_2D: u32 = 3553; -pub const GL_POLYGON_OFFSET_UNITS: u32 = 10752; -pub const GL_POLYGON_OFFSET_POINT: u32 = 10753; -pub const GL_POLYGON_OFFSET_LINE: u32 = 10754; -pub const GL_POLYGON_OFFSET_FILL: u32 = 32823; -pub const GL_POLYGON_OFFSET_FACTOR: u32 = 32824; -pub const GL_TEXTURE_BINDING_1D: u32 = 32872; -pub const GL_TEXTURE_BINDING_2D: u32 = 32873; -pub const GL_TEXTURE_WIDTH: u32 = 4096; -pub const GL_TEXTURE_HEIGHT: u32 = 4097; -pub const GL_TEXTURE_INTERNAL_FORMAT: u32 = 4099; -pub const GL_TEXTURE_BORDER_COLOR: u32 = 4100; -pub const GL_TEXTURE_RED_SIZE: u32 = 32860; -pub const GL_TEXTURE_GREEN_SIZE: u32 = 32861; -pub const GL_TEXTURE_BLUE_SIZE: u32 = 32862; -pub const GL_TEXTURE_ALPHA_SIZE: u32 = 32863; -pub const GL_DONT_CARE: u32 = 4352; -pub const GL_FASTEST: u32 = 4353; -pub const GL_NICEST: u32 = 4354; -pub const GL_BYTE: u32 = 5120; -pub const GL_UNSIGNED_BYTE: u32 = 5121; -pub const GL_SHORT: u32 = 5122; -pub const GL_UNSIGNED_SHORT: u32 = 5123; -pub const GL_INT: u32 = 5124; -pub const GL_UNSIGNED_INT: u32 = 5125; -pub const GL_FLOAT: u32 = 5126; -pub const GL_DOUBLE: u32 = 5130; -pub const GL_CLEAR: u32 = 5376; -pub const GL_AND: u32 = 5377; -pub const GL_AND_REVERSE: u32 = 5378; -pub const GL_COPY: u32 = 5379; -pub const GL_AND_INVERTED: u32 = 5380; -pub const GL_NOOP: u32 = 5381; -pub const GL_XOR: u32 = 5382; -pub const GL_OR: u32 = 5383; -pub const GL_NOR: u32 = 5384; -pub const GL_EQUIV: u32 = 5385; -pub const GL_INVERT: u32 = 5386; -pub const GL_OR_REVERSE: u32 = 5387; -pub const GL_COPY_INVERTED: u32 = 5388; -pub const GL_OR_INVERTED: u32 = 5389; -pub const GL_NAND: u32 = 5390; -pub const GL_SET: u32 = 5391; -pub const GL_TEXTURE: u32 = 5890; -pub const GL_COLOR: u32 = 6144; -pub const GL_DEPTH: u32 = 6145; -pub const GL_STENCIL: u32 = 6146; -pub const GL_STENCIL_INDEX: u32 = 6401; -pub const GL_DEPTH_COMPONENT: u32 = 6402; -pub const GL_RED: u32 = 6403; -pub const GL_GREEN: u32 = 6404; -pub const GL_BLUE: u32 = 6405; -pub const GL_ALPHA: u32 = 6406; -pub const GL_RGB: u32 = 6407; -pub const GL_RGBA: u32 = 6408; -pub const GL_POINT: u32 = 6912; -pub const GL_LINE: u32 = 6913; -pub const GL_FILL: u32 = 6914; -pub const GL_KEEP: u32 = 7680; -pub const GL_REPLACE: u32 = 7681; -pub const GL_INCR: u32 = 7682; -pub const GL_DECR: u32 = 7683; -pub const GL_VENDOR: u32 = 7936; -pub const GL_RENDERER: u32 = 7937; -pub const GL_VERSION: u32 = 7938; -pub const GL_EXTENSIONS: u32 = 7939; -pub const GL_NEAREST: u32 = 9728; -pub const GL_LINEAR: u32 = 9729; -pub const GL_NEAREST_MIPMAP_NEAREST: u32 = 9984; -pub const GL_LINEAR_MIPMAP_NEAREST: u32 = 9985; -pub const GL_NEAREST_MIPMAP_LINEAR: u32 = 9986; -pub const GL_LINEAR_MIPMAP_LINEAR: u32 = 9987; -pub const GL_TEXTURE_MAG_FILTER: u32 = 10240; -pub const GL_TEXTURE_MIN_FILTER: u32 = 10241; -pub const GL_TEXTURE_WRAP_S: u32 = 10242; -pub const GL_TEXTURE_WRAP_T: u32 = 10243; -pub const GL_PROXY_TEXTURE_1D: u32 = 32867; -pub const GL_PROXY_TEXTURE_2D: u32 = 32868; -pub const GL_REPEAT: u32 = 10497; -pub const GL_R3_G3_B2: u32 = 10768; -pub const GL_RGB4: u32 = 32847; -pub const GL_RGB5: u32 = 32848; -pub const GL_RGB8: u32 = 32849; -pub const GL_RGB10: u32 = 32850; -pub const GL_RGB12: u32 = 32851; -pub const GL_RGB16: u32 = 32852; -pub const GL_RGBA2: u32 = 32853; -pub const GL_RGBA4: u32 = 32854; -pub const GL_RGB5_A1: u32 = 32855; -pub const GL_RGBA8: u32 = 32856; -pub const GL_RGB10_A2: u32 = 32857; -pub const GL_RGBA12: u32 = 32858; -pub const GL_RGBA16: u32 = 32859; -pub const GL_UNSIGNED_BYTE_3_3_2: u32 = 32818; -pub const GL_UNSIGNED_SHORT_4_4_4_4: u32 = 32819; -pub const GL_UNSIGNED_SHORT_5_5_5_1: u32 = 32820; -pub const GL_UNSIGNED_INT_8_8_8_8: u32 = 32821; -pub const GL_UNSIGNED_INT_10_10_10_2: u32 = 32822; -pub const GL_TEXTURE_BINDING_3D: u32 = 32874; -pub const GL_PACK_SKIP_IMAGES: u32 = 32875; -pub const GL_PACK_IMAGE_HEIGHT: u32 = 32876; -pub const GL_UNPACK_SKIP_IMAGES: u32 = 32877; -pub const GL_UNPACK_IMAGE_HEIGHT: u32 = 32878; -pub const GL_TEXTURE_3D: u32 = 32879; -pub const GL_PROXY_TEXTURE_3D: u32 = 32880; -pub const GL_TEXTURE_DEPTH: u32 = 32881; -pub const GL_TEXTURE_WRAP_R: u32 = 32882; -pub const GL_MAX_3D_TEXTURE_SIZE: u32 = 32883; -pub const GL_UNSIGNED_BYTE_2_3_3_REV: u32 = 33634; -pub const GL_UNSIGNED_SHORT_5_6_5: u32 = 33635; -pub const GL_UNSIGNED_SHORT_5_6_5_REV: u32 = 33636; -pub const GL_UNSIGNED_SHORT_4_4_4_4_REV: u32 = 33637; -pub const GL_UNSIGNED_SHORT_1_5_5_5_REV: u32 = 33638; -pub const GL_UNSIGNED_INT_8_8_8_8_REV: u32 = 33639; -pub const GL_UNSIGNED_INT_2_10_10_10_REV: u32 = 33640; -pub const GL_BGR: u32 = 32992; -pub const GL_BGRA: u32 = 32993; -pub const GL_MAX_ELEMENTS_VERTICES: u32 = 33000; -pub const GL_MAX_ELEMENTS_INDICES: u32 = 33001; -pub const GL_CLAMP_TO_EDGE: u32 = 33071; -pub const GL_TEXTURE_MIN_LOD: u32 = 33082; -pub const GL_TEXTURE_MAX_LOD: u32 = 33083; -pub const GL_TEXTURE_BASE_LEVEL: u32 = 33084; -pub const GL_TEXTURE_MAX_LEVEL: u32 = 33085; -pub const GL_SMOOTH_POINT_SIZE_RANGE: u32 = 2834; -pub const GL_SMOOTH_POINT_SIZE_GRANULARITY: u32 = 2835; -pub const GL_SMOOTH_LINE_WIDTH_RANGE: u32 = 2850; -pub const GL_SMOOTH_LINE_WIDTH_GRANULARITY: u32 = 2851; -pub const GL_ALIASED_LINE_WIDTH_RANGE: u32 = 33902; -pub const GL_TEXTURE0: u32 = 33984; -pub const GL_TEXTURE1: u32 = 33985; -pub const GL_TEXTURE2: u32 = 33986; -pub const GL_TEXTURE3: u32 = 33987; -pub const GL_TEXTURE4: u32 = 33988; -pub const GL_TEXTURE5: u32 = 33989; -pub const GL_TEXTURE6: u32 = 33990; -pub const GL_TEXTURE7: u32 = 33991; -pub const GL_TEXTURE8: u32 = 33992; -pub const GL_TEXTURE9: u32 = 33993; -pub const GL_TEXTURE10: u32 = 33994; -pub const GL_TEXTURE11: u32 = 33995; -pub const GL_TEXTURE12: u32 = 33996; -pub const GL_TEXTURE13: u32 = 33997; -pub const GL_TEXTURE14: u32 = 33998; -pub const GL_TEXTURE15: u32 = 33999; -pub const GL_TEXTURE16: u32 = 34000; -pub const GL_TEXTURE17: u32 = 34001; -pub const GL_TEXTURE18: u32 = 34002; -pub const GL_TEXTURE19: u32 = 34003; -pub const GL_TEXTURE20: u32 = 34004; -pub const GL_TEXTURE21: u32 = 34005; -pub const GL_TEXTURE22: u32 = 34006; -pub const GL_TEXTURE23: u32 = 34007; -pub const GL_TEXTURE24: u32 = 34008; -pub const GL_TEXTURE25: u32 = 34009; -pub const GL_TEXTURE26: u32 = 34010; -pub const GL_TEXTURE27: u32 = 34011; -pub const GL_TEXTURE28: u32 = 34012; -pub const GL_TEXTURE29: u32 = 34013; -pub const GL_TEXTURE30: u32 = 34014; -pub const GL_TEXTURE31: u32 = 34015; -pub const GL_ACTIVE_TEXTURE: u32 = 34016; -pub const GL_MULTISAMPLE: u32 = 32925; -pub const GL_SAMPLE_ALPHA_TO_COVERAGE: u32 = 32926; -pub const GL_SAMPLE_ALPHA_TO_ONE: u32 = 32927; -pub const GL_SAMPLE_COVERAGE: u32 = 32928; -pub const GL_SAMPLE_BUFFERS: u32 = 32936; -pub const GL_SAMPLES: u32 = 32937; -pub const GL_SAMPLE_COVERAGE_VALUE: u32 = 32938; -pub const GL_SAMPLE_COVERAGE_INVERT: u32 = 32939; -pub const GL_TEXTURE_CUBE_MAP: u32 = 34067; -pub const GL_TEXTURE_BINDING_CUBE_MAP: u32 = 34068; -pub const GL_TEXTURE_CUBE_MAP_POSITIVE_X: u32 = 34069; -pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_X: u32 = 34070; -pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Y: u32 = 34071; -pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: u32 = 34072; -pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Z: u32 = 34073; -pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: u32 = 34074; -pub const GL_PROXY_TEXTURE_CUBE_MAP: u32 = 34075; -pub const GL_MAX_CUBE_MAP_TEXTURE_SIZE: u32 = 34076; -pub const GL_COMPRESSED_RGB: u32 = 34029; -pub const GL_COMPRESSED_RGBA: u32 = 34030; -pub const GL_TEXTURE_COMPRESSION_HINT: u32 = 34031; -pub const GL_TEXTURE_COMPRESSED_IMAGE_SIZE: u32 = 34464; -pub const GL_TEXTURE_COMPRESSED: u32 = 34465; -pub const GL_NUM_COMPRESSED_TEXTURE_FORMATS: u32 = 34466; -pub const GL_COMPRESSED_TEXTURE_FORMATS: u32 = 34467; -pub const GL_CLAMP_TO_BORDER: u32 = 33069; -pub const GL_BLEND_DST_RGB: u32 = 32968; -pub const GL_BLEND_SRC_RGB: u32 = 32969; -pub const GL_BLEND_DST_ALPHA: u32 = 32970; -pub const GL_BLEND_SRC_ALPHA: u32 = 32971; -pub const GL_POINT_FADE_THRESHOLD_SIZE: u32 = 33064; -pub const GL_DEPTH_COMPONENT16: u32 = 33189; -pub const GL_DEPTH_COMPONENT24: u32 = 33190; -pub const GL_DEPTH_COMPONENT32: u32 = 33191; -pub const GL_MIRRORED_REPEAT: u32 = 33648; -pub const GL_MAX_TEXTURE_LOD_BIAS: u32 = 34045; -pub const GL_TEXTURE_LOD_BIAS: u32 = 34049; -pub const GL_INCR_WRAP: u32 = 34055; -pub const GL_DECR_WRAP: u32 = 34056; -pub const GL_TEXTURE_DEPTH_SIZE: u32 = 34890; -pub const GL_TEXTURE_COMPARE_MODE: u32 = 34892; -pub const GL_TEXTURE_COMPARE_FUNC: u32 = 34893; -pub const GL_FUNC_ADD: u32 = 32774; -pub const GL_FUNC_SUBTRACT: u32 = 32778; -pub const GL_FUNC_REVERSE_SUBTRACT: u32 = 32779; -pub const GL_MIN: u32 = 32775; -pub const GL_MAX: u32 = 32776; -pub const GL_CONSTANT_COLOR: u32 = 32769; -pub const GL_ONE_MINUS_CONSTANT_COLOR: u32 = 32770; -pub const GL_CONSTANT_ALPHA: u32 = 32771; -pub const GL_ONE_MINUS_CONSTANT_ALPHA: u32 = 32772; -pub const GL_BUFFER_SIZE: u32 = 34660; -pub const GL_BUFFER_USAGE: u32 = 34661; -pub const GL_QUERY_COUNTER_BITS: u32 = 34916; -pub const GL_CURRENT_QUERY: u32 = 34917; -pub const GL_QUERY_RESULT: u32 = 34918; -pub const GL_QUERY_RESULT_AVAILABLE: u32 = 34919; -pub const GL_ARRAY_BUFFER: u32 = 34962; -pub const GL_ELEMENT_ARRAY_BUFFER: u32 = 34963; -pub const GL_ARRAY_BUFFER_BINDING: u32 = 34964; -pub const GL_ELEMENT_ARRAY_BUFFER_BINDING: u32 = 34965; -pub const GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: u32 = 34975; -pub const GL_READ_ONLY: u32 = 35000; -pub const GL_WRITE_ONLY: u32 = 35001; -pub const GL_READ_WRITE: u32 = 35002; -pub const GL_BUFFER_ACCESS: u32 = 35003; -pub const GL_BUFFER_MAPPED: u32 = 35004; -pub const GL_BUFFER_MAP_POINTER: u32 = 35005; -pub const GL_STREAM_DRAW: u32 = 35040; -pub const GL_STREAM_READ: u32 = 35041; -pub const GL_STREAM_COPY: u32 = 35042; -pub const GL_STATIC_DRAW: u32 = 35044; -pub const GL_STATIC_READ: u32 = 35045; -pub const GL_STATIC_COPY: u32 = 35046; -pub const GL_DYNAMIC_DRAW: u32 = 35048; -pub const GL_DYNAMIC_READ: u32 = 35049; -pub const GL_DYNAMIC_COPY: u32 = 35050; -pub const GL_SAMPLES_PASSED: u32 = 35092; -pub const GL_SRC1_ALPHA: u32 = 34185; -pub const GL_BLEND_EQUATION_RGB: u32 = 32777; -pub const GL_VERTEX_ATTRIB_ARRAY_ENABLED: u32 = 34338; -pub const GL_VERTEX_ATTRIB_ARRAY_SIZE: u32 = 34339; -pub const GL_VERTEX_ATTRIB_ARRAY_STRIDE: u32 = 34340; -pub const GL_VERTEX_ATTRIB_ARRAY_TYPE: u32 = 34341; -pub const GL_CURRENT_VERTEX_ATTRIB: u32 = 34342; -pub const GL_VERTEX_PROGRAM_POINT_SIZE: u32 = 34370; -pub const GL_VERTEX_ATTRIB_ARRAY_POINTER: u32 = 34373; -pub const GL_STENCIL_BACK_FUNC: u32 = 34816; -pub const GL_STENCIL_BACK_FAIL: u32 = 34817; -pub const GL_STENCIL_BACK_PASS_DEPTH_FAIL: u32 = 34818; -pub const GL_STENCIL_BACK_PASS_DEPTH_PASS: u32 = 34819; -pub const GL_MAX_DRAW_BUFFERS: u32 = 34852; -pub const GL_DRAW_BUFFER0: u32 = 34853; -pub const GL_DRAW_BUFFER1: u32 = 34854; -pub const GL_DRAW_BUFFER2: u32 = 34855; -pub const GL_DRAW_BUFFER3: u32 = 34856; -pub const GL_DRAW_BUFFER4: u32 = 34857; -pub const GL_DRAW_BUFFER5: u32 = 34858; -pub const GL_DRAW_BUFFER6: u32 = 34859; -pub const GL_DRAW_BUFFER7: u32 = 34860; -pub const GL_DRAW_BUFFER8: u32 = 34861; -pub const GL_DRAW_BUFFER9: u32 = 34862; -pub const GL_DRAW_BUFFER10: u32 = 34863; -pub const GL_DRAW_BUFFER11: u32 = 34864; -pub const GL_DRAW_BUFFER12: u32 = 34865; -pub const GL_DRAW_BUFFER13: u32 = 34866; -pub const GL_DRAW_BUFFER14: u32 = 34867; -pub const GL_DRAW_BUFFER15: u32 = 34868; -pub const GL_BLEND_EQUATION_ALPHA: u32 = 34877; -pub const GL_MAX_VERTEX_ATTRIBS: u32 = 34921; -pub const GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: u32 = 34922; -pub const GL_MAX_TEXTURE_IMAGE_UNITS: u32 = 34930; -pub const GL_FRAGMENT_SHADER: u32 = 35632; -pub const GL_VERTEX_SHADER: u32 = 35633; -pub const GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: u32 = 35657; -pub const GL_MAX_VERTEX_UNIFORM_COMPONENTS: u32 = 35658; -pub const GL_MAX_VARYING_FLOATS: u32 = 35659; -pub const GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: u32 = 35660; -pub const GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: u32 = 35661; -pub const GL_SHADER_TYPE: u32 = 35663; -pub const GL_FLOAT_VEC2: u32 = 35664; -pub const GL_FLOAT_VEC3: u32 = 35665; -pub const GL_FLOAT_VEC4: u32 = 35666; -pub const GL_INT_VEC2: u32 = 35667; -pub const GL_INT_VEC3: u32 = 35668; -pub const GL_INT_VEC4: u32 = 35669; -pub const GL_BOOL: u32 = 35670; -pub const GL_boolVEC2: u32 = 35671; -pub const GL_boolVEC3: u32 = 35672; -pub const GL_boolVEC4: u32 = 35673; -pub const GL_FLOAT_MAT2: u32 = 35674; -pub const GL_FLOAT_MAT3: u32 = 35675; -pub const GL_FLOAT_MAT4: u32 = 35676; -pub const GL_SAMPLER_1D: u32 = 35677; -pub const GL_SAMPLER_2D: u32 = 35678; -pub const GL_SAMPLER_3D: u32 = 35679; -pub const GL_SAMPLER_CUBE: u32 = 35680; -pub const GL_SAMPLER_1D_SHADOW: u32 = 35681; -pub const GL_SAMPLER_2D_SHADOW: u32 = 35682; -pub const GL_DELETE_STATUS: u32 = 35712; -pub const GL_COMPILE_STATUS: u32 = 35713; -pub const GL_LINK_STATUS: u32 = 35714; -pub const GL_VALIDATE_STATUS: u32 = 35715; -pub const GL_INFO_LOG_LENGTH: u32 = 35716; -pub const GL_ATTACHED_SHADERS: u32 = 35717; -pub const GL_ACTIVE_UNIFORMS: u32 = 35718; -pub const GL_ACTIVE_UNIFORM_MAX_LENGTH: u32 = 35719; -pub const GL_SHADER_SOURCE_LENGTH: u32 = 35720; -pub const GL_ACTIVE_ATTRIBUTES: u32 = 35721; -pub const GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: u32 = 35722; -pub const GL_FRAGMENT_SHADER_DERIVATIVE_HINT: u32 = 35723; -pub const GL_SHADING_LANGUAGE_VERSION: u32 = 35724; -pub const GL_CURRENT_PROGRAM: u32 = 35725; -pub const GL_POINT_SPRITE_COORD_ORIGIN: u32 = 36000; -pub const GL_LOWER_LEFT: u32 = 36001; -pub const GL_UPPER_LEFT: u32 = 36002; -pub const GL_STENCIL_BACK_REF: u32 = 36003; -pub const GL_STENCIL_BACK_VALUE_MASK: u32 = 36004; -pub const GL_STENCIL_BACK_WRITEMASK: u32 = 36005; -pub const GL_PIXEL_PACK_BUFFER: u32 = 35051; -pub const GL_PIXEL_UNPACK_BUFFER: u32 = 35052; -pub const GL_PIXEL_PACK_BUFFER_BINDING: u32 = 35053; -pub const GL_PIXEL_UNPACK_BUFFER_BINDING: u32 = 35055; -pub const GL_FLOAT_MAT2x3: u32 = 35685; -pub const GL_FLOAT_MAT2x4: u32 = 35686; -pub const GL_FLOAT_MAT3x2: u32 = 35687; -pub const GL_FLOAT_MAT3x4: u32 = 35688; -pub const GL_FLOAT_MAT4x2: u32 = 35689; -pub const GL_FLOAT_MAT4x3: u32 = 35690; -pub const GL_SRGB: u32 = 35904; -pub const GL_SRGB8: u32 = 35905; -pub const GL_SRGB_ALPHA: u32 = 35906; -pub const GL_SRGB8_ALPHA8: u32 = 35907; -pub const GL_COMPRESSED_SRGB: u32 = 35912; -pub const GL_COMPRESSED_SRGB_ALPHA: u32 = 35913; -pub const GL_COMPARE_REF_TO_TEXTURE: u32 = 34894; -pub const GL_CLIP_DISTANCE0: u32 = 12288; -pub const GL_CLIP_DISTANCE1: u32 = 12289; -pub const GL_CLIP_DISTANCE2: u32 = 12290; -pub const GL_CLIP_DISTANCE3: u32 = 12291; -pub const GL_CLIP_DISTANCE4: u32 = 12292; -pub const GL_CLIP_DISTANCE5: u32 = 12293; -pub const GL_CLIP_DISTANCE6: u32 = 12294; -pub const GL_CLIP_DISTANCE7: u32 = 12295; -pub const GL_MAX_CLIP_DISTANCES: u32 = 3378; -pub const GL_MAJOR_VERSION: u32 = 33307; -pub const GL_MINOR_VERSION: u32 = 33308; -pub const GL_NUM_EXTENSIONS: u32 = 33309; -pub const GL_CONTEXT_FLAGS: u32 = 33310; -pub const GL_COMPRESSED_RED: u32 = 33317; -pub const GL_COMPRESSED_RG: u32 = 33318; -pub const GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT: u32 = 1; -pub const GL_RGBA32F: u32 = 34836; -pub const GL_RGB32F: u32 = 34837; -pub const GL_RGBA16F: u32 = 34842; -pub const GL_RGB16F: u32 = 34843; -pub const GL_VERTEX_ATTRIB_ARRAY_INTEGER: u32 = 35069; -pub const GL_MAX_ARRAY_TEXTURE_LAYERS: u32 = 35071; -pub const GL_MIN_PROGRAM_TEXEL_OFFSET: u32 = 35076; -pub const GL_MAX_PROGRAM_TEXEL_OFFSET: u32 = 35077; -pub const GL_CLAMP_READ_COLOR: u32 = 35100; -pub const GL_FIXED_ONLY: u32 = 35101; -pub const GL_MAX_VARYING_COMPONENTS: u32 = 35659; -pub const GL_TEXTURE_1D_ARRAY: u32 = 35864; -pub const GL_PROXY_TEXTURE_1D_ARRAY: u32 = 35865; -pub const GL_TEXTURE_2D_ARRAY: u32 = 35866; -pub const GL_PROXY_TEXTURE_2D_ARRAY: u32 = 35867; -pub const GL_TEXTURE_BINDING_1D_ARRAY: u32 = 35868; -pub const GL_TEXTURE_BINDING_2D_ARRAY: u32 = 35869; -pub const GL_R11F_G11F_B10F: u32 = 35898; -pub const GL_UNSIGNED_INT_10F_11F_11F_REV: u32 = 35899; -pub const GL_RGB9_E5: u32 = 35901; -pub const GL_UNSIGNED_INT_5_9_9_9_REV: u32 = 35902; -pub const GL_TEXTURE_SHARED_SIZE: u32 = 35903; -pub const GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: u32 = 35958; -pub const GL_TRANSFORM_FEEDBACK_BUFFER_MODE: u32 = 35967; -pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: u32 = 35968; -pub const GL_TRANSFORM_FEEDBACK_VARYINGS: u32 = 35971; -pub const GL_TRANSFORM_FEEDBACK_BUFFER_START: u32 = 35972; -pub const GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: u32 = 35973; -pub const GL_PRIMITIVES_GENERATED: u32 = 35975; -pub const GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: u32 = 35976; -pub const GL_RASTERIZER_DISCARD: u32 = 35977; -pub const GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: u32 = 35978; -pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: u32 = 35979; -pub const GL_INTERLEAVED_ATTRIBS: u32 = 35980; -pub const GL_SEPARATE_ATTRIBS: u32 = 35981; -pub const GL_TRANSFORM_FEEDBACK_BUFFER: u32 = 35982; -pub const GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: u32 = 35983; -pub const GL_RGBA32UI: u32 = 36208; -pub const GL_RGB32UI: u32 = 36209; -pub const GL_RGBA16UI: u32 = 36214; -pub const GL_RGB16UI: u32 = 36215; -pub const GL_RGBA8UI: u32 = 36220; -pub const GL_RGB8UI: u32 = 36221; -pub const GL_RGBA32I: u32 = 36226; -pub const GL_RGB32I: u32 = 36227; -pub const GL_RGBA16I: u32 = 36232; -pub const GL_RGB16I: u32 = 36233; -pub const GL_RGBA8I: u32 = 36238; -pub const GL_RGB8I: u32 = 36239; -pub const GL_RED_INTEGER: u32 = 36244; -pub const GL_GREEN_INTEGER: u32 = 36245; -pub const GL_BLUE_INTEGER: u32 = 36246; -pub const GL_RGB_INTEGER: u32 = 36248; -pub const GL_RGBA_INTEGER: u32 = 36249; -pub const GL_BGR_INTEGER: u32 = 36250; -pub const GL_BGRA_INTEGER: u32 = 36251; -pub const GL_SAMPLER_1D_ARRAY: u32 = 36288; -pub const GL_SAMPLER_2D_ARRAY: u32 = 36289; -pub const GL_SAMPLER_1D_ARRAY_SHADOW: u32 = 36291; -pub const GL_SAMPLER_2D_ARRAY_SHADOW: u32 = 36292; -pub const GL_SAMPLER_CUBE_SHADOW: u32 = 36293; -pub const GL_UNSIGNED_INT_VEC2: u32 = 36294; -pub const GL_UNSIGNED_INT_VEC3: u32 = 36295; -pub const GL_UNSIGNED_INT_VEC4: u32 = 36296; -pub const GL_INT_SAMPLER_1D: u32 = 36297; -pub const GL_INT_SAMPLER_2D: u32 = 36298; -pub const GL_INT_SAMPLER_3D: u32 = 36299; -pub const GL_INT_SAMPLER_CUBE: u32 = 36300; -pub const GL_INT_SAMPLER_1D_ARRAY: u32 = 36302; -pub const GL_INT_SAMPLER_2D_ARRAY: u32 = 36303; -pub const GL_UNSIGNED_INT_SAMPLER_1D: u32 = 36305; -pub const GL_UNSIGNED_INT_SAMPLER_2D: u32 = 36306; -pub const GL_UNSIGNED_INT_SAMPLER_3D: u32 = 36307; -pub const GL_UNSIGNED_INT_SAMPLER_CUBE: u32 = 36308; -pub const GL_UNSIGNED_INT_SAMPLER_1D_ARRAY: u32 = 36310; -pub const GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: u32 = 36311; -pub const GL_QUERY_WAIT: u32 = 36371; -pub const GL_QUERY_NO_WAIT: u32 = 36372; -pub const GL_QUERY_BY_REGION_WAIT: u32 = 36373; -pub const GL_QUERY_BY_REGION_NO_WAIT: u32 = 36374; -pub const GL_BUFFER_ACCESS_FLAGS: u32 = 37151; -pub const GL_BUFFER_MAP_LENGTH: u32 = 37152; -pub const GL_BUFFER_MAP_OFFSET: u32 = 37153; -pub const GL_DEPTH_COMPONENT32F: u32 = 36012; -pub const GL_DEPTH32F_STENCIL8: u32 = 36013; -pub const GL_FLOAT_32_UNSIGNED_INT_24_8_REV: u32 = 36269; -pub const GL_INVALID_FRAMEBUFFER_OPERATION: u32 = 1286; -pub const GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: u32 = 33296; -pub const GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: u32 = 33297; -pub const GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: u32 = 33298; -pub const GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: u32 = 33299; -pub const GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: u32 = 33300; -pub const GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: u32 = 33301; -pub const GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: u32 = 33302; -pub const GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: u32 = 33303; -pub const GL_FRAMEBUFFER_DEFAULT: u32 = 33304; -pub const GL_FRAMEBUFFER_UNDEFINED: u32 = 33305; -pub const GL_DEPTH_STENCIL_ATTACHMENT: u32 = 33306; -pub const GL_MAX_RENDERBUFFER_SIZE: u32 = 34024; -pub const GL_DEPTH_STENCIL: u32 = 34041; -pub const GL_UNSIGNED_INT_24_8: u32 = 34042; -pub const GL_DEPTH24_STENCIL8: u32 = 35056; -pub const GL_TEXTURE_STENCIL_SIZE: u32 = 35057; -pub const GL_TEXTURE_RED_TYPE: u32 = 35856; -pub const GL_TEXTURE_GREEN_TYPE: u32 = 35857; -pub const GL_TEXTURE_BLUE_TYPE: u32 = 35858; -pub const GL_TEXTURE_ALPHA_TYPE: u32 = 35859; -pub const GL_TEXTURE_DEPTH_TYPE: u32 = 35862; -pub const GL_UNSIGNED_NORMALIZED: u32 = 35863; -pub const GL_FRAMEBUFFER_BINDING: u32 = 36006; -pub const GL_DRAW_FRAMEBUFFER_BINDING: u32 = 36006; -pub const GL_RENDERBUFFER_BINDING: u32 = 36007; -pub const GL_READ_FRAMEBUFFER: u32 = 36008; -pub const GL_DRAW_FRAMEBUFFER: u32 = 36009; -pub const GL_READ_FRAMEBUFFER_BINDING: u32 = 36010; -pub const GL_RENDERBUFFER_SAMPLES: u32 = 36011; -pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: u32 = 36048; -pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: u32 = 36049; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: u32 = 36050; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: u32 = 36051; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: u32 = 36052; -pub const GL_FRAMEBUFFER_COMPLETE: u32 = 36053; -pub const GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: u32 = 36054; -pub const GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: u32 = 36055; -pub const GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: u32 = 36059; -pub const GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: u32 = 36060; -pub const GL_FRAMEBUFFER_UNSUPPORTED: u32 = 36061; -pub const GL_MAX_COLOR_ATTACHMENTS: u32 = 36063; -pub const GL_COLOR_ATTACHMENT0: u32 = 36064; -pub const GL_COLOR_ATTACHMENT1: u32 = 36065; -pub const GL_COLOR_ATTACHMENT2: u32 = 36066; -pub const GL_COLOR_ATTACHMENT3: u32 = 36067; -pub const GL_COLOR_ATTACHMENT4: u32 = 36068; -pub const GL_COLOR_ATTACHMENT5: u32 = 36069; -pub const GL_COLOR_ATTACHMENT6: u32 = 36070; -pub const GL_COLOR_ATTACHMENT7: u32 = 36071; -pub const GL_COLOR_ATTACHMENT8: u32 = 36072; -pub const GL_COLOR_ATTACHMENT9: u32 = 36073; -pub const GL_COLOR_ATTACHMENT10: u32 = 36074; -pub const GL_COLOR_ATTACHMENT11: u32 = 36075; -pub const GL_COLOR_ATTACHMENT12: u32 = 36076; -pub const GL_COLOR_ATTACHMENT13: u32 = 36077; -pub const GL_COLOR_ATTACHMENT14: u32 = 36078; -pub const GL_COLOR_ATTACHMENT15: u32 = 36079; -pub const GL_COLOR_ATTACHMENT16: u32 = 36080; -pub const GL_COLOR_ATTACHMENT17: u32 = 36081; -pub const GL_COLOR_ATTACHMENT18: u32 = 36082; -pub const GL_COLOR_ATTACHMENT19: u32 = 36083; -pub const GL_COLOR_ATTACHMENT20: u32 = 36084; -pub const GL_COLOR_ATTACHMENT21: u32 = 36085; -pub const GL_COLOR_ATTACHMENT22: u32 = 36086; -pub const GL_COLOR_ATTACHMENT23: u32 = 36087; -pub const GL_COLOR_ATTACHMENT24: u32 = 36088; -pub const GL_COLOR_ATTACHMENT25: u32 = 36089; -pub const GL_COLOR_ATTACHMENT26: u32 = 36090; -pub const GL_COLOR_ATTACHMENT27: u32 = 36091; -pub const GL_COLOR_ATTACHMENT28: u32 = 36092; -pub const GL_COLOR_ATTACHMENT29: u32 = 36093; -pub const GL_COLOR_ATTACHMENT30: u32 = 36094; -pub const GL_COLOR_ATTACHMENT31: u32 = 36095; -pub const GL_DEPTH_ATTACHMENT: u32 = 36096; -pub const GL_STENCIL_ATTACHMENT: u32 = 36128; -pub const GL_FRAMEBUFFER: u32 = 36160; -pub const GL_RENDERBUFFER: u32 = 36161; -pub const GL_RENDERBUFFER_WIDTH: u32 = 36162; -pub const GL_RENDERBUFFER_HEIGHT: u32 = 36163; -pub const GL_RENDERBUFFER_INTERNAL_FORMAT: u32 = 36164; -pub const GL_STENCIL_INDEX1: u32 = 36166; -pub const GL_STENCIL_INDEX4: u32 = 36167; -pub const GL_STENCIL_INDEX8: u32 = 36168; -pub const GL_STENCIL_INDEX16: u32 = 36169; -pub const GL_RENDERBUFFER_RED_SIZE: u32 = 36176; -pub const GL_RENDERBUFFER_GREEN_SIZE: u32 = 36177; -pub const GL_RENDERBUFFER_BLUE_SIZE: u32 = 36178; -pub const GL_RENDERBUFFER_ALPHA_SIZE: u32 = 36179; -pub const GL_RENDERBUFFER_DEPTH_SIZE: u32 = 36180; -pub const GL_RENDERBUFFER_STENCIL_SIZE: u32 = 36181; -pub const GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: u32 = 36182; -pub const GL_MAX_SAMPLES: u32 = 36183; -pub const GL_INDEX: u32 = 33314; -pub const GL_FRAMEBUFFER_SRGB: u32 = 36281; -pub const GL_HALF_FLOAT: u32 = 5131; -pub const GL_MAP_READ_BIT: u32 = 1; -pub const GL_MAP_WRITE_BIT: u32 = 2; -pub const GL_MAP_INVALIDATE_RANGE_BIT: u32 = 4; -pub const GL_MAP_INVALIDATE_BUFFER_BIT: u32 = 8; -pub const GL_MAP_FLUSH_EXPLICIT_BIT: u32 = 16; -pub const GL_MAP_UNSYNCHRONIZED_BIT: u32 = 32; -pub const GL_COMPRESSED_RED_RGTC1: u32 = 36283; -pub const GL_COMPRESSED_SIGNED_RED_RGTC1: u32 = 36284; -pub const GL_COMPRESSED_RG_RGTC2: u32 = 36285; -pub const GL_COMPRESSED_SIGNED_RG_RGTC2: u32 = 36286; -pub const GL_RG: u32 = 33319; -pub const GL_RG_INTEGER: u32 = 33320; -pub const GL_R8: u32 = 33321; -pub const GL_R16: u32 = 33322; -pub const GL_RG8: u32 = 33323; -pub const GL_RG16: u32 = 33324; -pub const GL_R16F: u32 = 33325; -pub const GL_R32F: u32 = 33326; -pub const GL_RG16F: u32 = 33327; -pub const GL_RG32F: u32 = 33328; -pub const GL_R8I: u32 = 33329; -pub const GL_R8UI: u32 = 33330; -pub const GL_R16I: u32 = 33331; -pub const GL_R16UI: u32 = 33332; -pub const GL_R32I: u32 = 33333; -pub const GL_R32UI: u32 = 33334; -pub const GL_RG8I: u32 = 33335; -pub const GL_RG8UI: u32 = 33336; -pub const GL_RG16I: u32 = 33337; -pub const GL_RG16UI: u32 = 33338; -pub const GL_RG32I: u32 = 33339; -pub const GL_RG32UI: u32 = 33340; -pub const GL_VERTEX_ARRAY_BINDING: u32 = 34229; -pub const GL_SAMPLER_2D_RECT: u32 = 35683; -pub const GL_SAMPLER_2D_RECT_SHADOW: u32 = 35684; -pub const GL_SAMPLER_BUFFER: u32 = 36290; -pub const GL_INT_SAMPLER_2D_RECT: u32 = 36301; -pub const GL_INT_SAMPLER_BUFFER: u32 = 36304; -pub const GL_UNSIGNED_INT_SAMPLER_2D_RECT: u32 = 36309; -pub const GL_UNSIGNED_INT_SAMPLER_BUFFER: u32 = 36312; -pub const GL_TEXTURE_BUFFER: u32 = 35882; -pub const GL_MAX_TEXTURE_BUFFER_SIZE: u32 = 35883; -pub const GL_TEXTURE_BINDING_BUFFER: u32 = 35884; -pub const GL_TEXTURE_BUFFER_DATA_STORE_BINDING: u32 = 35885; -pub const GL_TEXTURE_RECTANGLE: u32 = 34037; -pub const GL_TEXTURE_BINDING_RECTANGLE: u32 = 34038; -pub const GL_PROXY_TEXTURE_RECTANGLE: u32 = 34039; -pub const GL_MAX_RECTANGLE_TEXTURE_SIZE: u32 = 34040; -pub const GL_R8_SNORM: u32 = 36756; -pub const GL_RG8_SNORM: u32 = 36757; -pub const GL_RGB8_SNORM: u32 = 36758; -pub const GL_RGBA8_SNORM: u32 = 36759; -pub const GL_R16_SNORM: u32 = 36760; -pub const GL_RG16_SNORM: u32 = 36761; -pub const GL_RGB16_SNORM: u32 = 36762; -pub const GL_RGBA16_SNORM: u32 = 36763; -pub const GL_SIGNED_NORMALIZED: u32 = 36764; -pub const GL_PRIMITIVE_RESTART: u32 = 36765; -pub const GL_PRIMITIVE_RESTART_INDEX: u32 = 36766; -pub const GL_COPY_READ_BUFFER: u32 = 36662; -pub const GL_COPY_WRITE_BUFFER: u32 = 36663; -pub const GL_UNIFORM_BUFFER: u32 = 35345; -pub const GL_UNIFORM_BUFFER_BINDING: u32 = 35368; -pub const GL_UNIFORM_BUFFER_START: u32 = 35369; -pub const GL_UNIFORM_BUFFER_SIZE: u32 = 35370; -pub const GL_MAX_VERTEX_UNIFORM_BLOCKS: u32 = 35371; -pub const GL_MAX_GEOMETRY_UNIFORM_BLOCKS: u32 = 35372; -pub const GL_MAX_FRAGMENT_UNIFORM_BLOCKS: u32 = 35373; -pub const GL_MAX_COMBINED_UNIFORM_BLOCKS: u32 = 35374; -pub const GL_MAX_UNIFORM_BUFFER_BINDINGS: u32 = 35375; -pub const GL_MAX_UNIFORM_BLOCK_SIZE: u32 = 35376; -pub const GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: u32 = 35377; -pub const GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS: u32 = 35378; -pub const GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: u32 = 35379; -pub const GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: u32 = 35380; -pub const GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: u32 = 35381; -pub const GL_ACTIVE_UNIFORM_BLOCKS: u32 = 35382; -pub const GL_UNIFORM_TYPE: u32 = 35383; -pub const GL_UNIFORM_SIZE: u32 = 35384; -pub const GL_UNIFORM_NAME_LENGTH: u32 = 35385; -pub const GL_UNIFORM_BLOCK_INDEX: u32 = 35386; -pub const GL_UNIFORM_OFFSET: u32 = 35387; -pub const GL_UNIFORM_ARRAY_STRIDE: u32 = 35388; -pub const GL_UNIFORM_MATRIX_STRIDE: u32 = 35389; -pub const GL_UNIFORM_IS_ROW_MAJOR: u32 = 35390; -pub const GL_UNIFORM_BLOCK_BINDING: u32 = 35391; -pub const GL_UNIFORM_BLOCK_DATA_SIZE: u32 = 35392; -pub const GL_UNIFORM_BLOCK_NAME_LENGTH: u32 = 35393; -pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS: u32 = 35394; -pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: u32 = 35395; -pub const GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: u32 = 35396; -pub const GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER: u32 = 35397; -pub const GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: u32 = 35398; -pub const GL_INVALID_INDEX: u32 = 4294967295; -pub const GL_CONTEXT_CORE_PROFILE_BIT: u32 = 1; -pub const GL_CONTEXT_COMPATIBILITY_PROFILE_BIT: u32 = 2; -pub const GL_LINES_ADJACENCY: u32 = 10; -pub const GL_LINE_STRIP_ADJACENCY: u32 = 11; -pub const GL_TRIANGLES_ADJACENCY: u32 = 12; -pub const GL_TRIANGLE_STRIP_ADJACENCY: u32 = 13; -pub const GL_PROGRAM_POINT_SIZE: u32 = 34370; -pub const GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS: u32 = 35881; -pub const GL_FRAMEBUFFER_ATTACHMENT_LAYERED: u32 = 36263; -pub const GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: u32 = 36264; -pub const GL_GEOMETRY_SHADER: u32 = 36313; -pub const GL_GEOMETRY_VERTICES_OUT: u32 = 35094; -pub const GL_GEOMETRY_INPUT_TYPE: u32 = 35095; -pub const GL_GEOMETRY_OUTPUT_TYPE: u32 = 35096; -pub const GL_MAX_GEOMETRY_UNIFORM_COMPONENTS: u32 = 36319; -pub const GL_MAX_GEOMETRY_OUTPUT_VERTICES: u32 = 36320; -pub const GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: u32 = 36321; -pub const GL_MAX_VERTEX_OUTPUT_COMPONENTS: u32 = 37154; -pub const GL_MAX_GEOMETRY_INPUT_COMPONENTS: u32 = 37155; -pub const GL_MAX_GEOMETRY_OUTPUT_COMPONENTS: u32 = 37156; -pub const GL_MAX_FRAGMENT_INPUT_COMPONENTS: u32 = 37157; -pub const GL_CONTEXT_PROFILE_MASK: u32 = 37158; -pub const GL_DEPTH_CLAMP: u32 = 34383; -pub const GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: u32 = 36428; -pub const GL_FIRST_VERTEX_CONVENTION: u32 = 36429; -pub const GL_LAST_VERTEX_CONVENTION: u32 = 36430; -pub const GL_PROVOKING_VERTEX: u32 = 36431; -pub const GL_TEXTURE_CUBE_MAP_SEAMLESS: u32 = 34895; -pub const GL_MAX_SERVER_WAIT_TIMEOUT: u32 = 37137; -pub const GL_OBJECT_TYPE: u32 = 37138; -pub const GL_SYNC_CONDITION: u32 = 37139; -pub const GL_SYNC_STATUS: u32 = 37140; -pub const GL_SYNC_FLAGS: u32 = 37141; -pub const GL_SYNC_FENCE: u32 = 37142; -pub const GL_SYNC_GPU_COMMANDS_COMPLETE: u32 = 37143; -pub const GL_UNSIGNALED: u32 = 37144; -pub const GL_SIGNALED: u32 = 37145; -pub const GL_ALREADY_SIGNALED: u32 = 37146; -pub const GL_TIMEOUT_EXPIRED: u32 = 37147; -pub const GL_CONDITION_SATISFIED: u32 = 37148; -pub const GL_WAIT_FAILED: u32 = 37149; -pub const GL_TIMEOUT_IGNORED: i32 = -1; -pub const GL_SYNC_FLUSH_COMMANDS_BIT: u32 = 1; -pub const GL_SAMPLE_POSITION: u32 = 36432; -pub const GL_SAMPLE_MASK: u32 = 36433; -pub const GL_SAMPLE_MASK_VALUE: u32 = 36434; -pub const GL_MAX_SAMPLE_MASK_WORDS: u32 = 36441; -pub const GL_TEXTURE_2D_MULTISAMPLE: u32 = 37120; -pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE: u32 = 37121; -pub const GL_TEXTURE_2D_MULTISAMPLE_ARRAY: u32 = 37122; -pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY: u32 = 37123; -pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE: u32 = 37124; -pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY: u32 = 37125; -pub const GL_TEXTURE_SAMPLES: u32 = 37126; -pub const GL_TEXTURE_FIXED_SAMPLE_LOCATIONS: u32 = 37127; -pub const GL_SAMPLER_2D_MULTISAMPLE: u32 = 37128; -pub const GL_INT_SAMPLER_2D_MULTISAMPLE: u32 = 37129; -pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: u32 = 37130; -pub const GL_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37131; -pub const GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37132; -pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: u32 = 37133; -pub const GL_MAX_COLOR_TEXTURE_SAMPLES: u32 = 37134; -pub const GL_MAX_DEPTH_TEXTURE_SAMPLES: u32 = 37135; -pub const GL_MAX_INTEGER_SAMPLES: u32 = 37136; -pub const GL_VERTEX_ATTRIB_ARRAY_DIVISOR: u32 = 35070; -pub const GL_SRC1_COLOR: u32 = 35065; -pub const GL_ONE_MINUS_SRC1_COLOR: u32 = 35066; -pub const GL_ONE_MINUS_SRC1_ALPHA: u32 = 35067; -pub const GL_MAX_DUAL_SOURCE_DRAW_BUFFERS: u32 = 35068; -pub const GL_ANY_SAMPLES_PASSED: u32 = 35887; -pub const GL_SAMPLER_BINDING: u32 = 35097; -pub const GL_RGB10_A2UI: u32 = 36975; -pub const GL_TEXTURE_SWIZZLE_R: u32 = 36418; -pub const GL_TEXTURE_SWIZZLE_G: u32 = 36419; -pub const GL_TEXTURE_SWIZZLE_B: u32 = 36420; -pub const GL_TEXTURE_SWIZZLE_A: u32 = 36421; -pub const GL_TEXTURE_SWIZZLE_RGBA: u32 = 36422; -pub const GL_TIME_ELAPSED: u32 = 35007; -pub const GL_TIMESTAMP: u32 = 36392; -pub const GL_INT_2_10_10_10_REV: u32 = 36255; -pub const GL_VERSION_1_0: u32 = 1; -pub const GL_VERSION_1_1: u32 = 1; -pub const GL_VERSION_1_2: u32 = 1; -pub const GL_VERSION_1_3: u32 = 1; -pub const GL_VERSION_1_4: u32 = 1; -pub const GL_VERSION_1_5: u32 = 1; -pub const GL_VERSION_2_0: u32 = 1; -pub const GL_VERSION_2_1: u32 = 1; -pub const GL_VERSION_3_0: u32 = 1; -pub const GL_VERSION_3_1: u32 = 1; -pub const GL_VERSION_3_2: u32 = 1; -pub const GL_VERSION_3_3: u32 = 1; -pub const GL_MAX_DEBUG_MESSAGE_LENGTH_AMD: u32 = 37187; -pub const GL_MAX_DEBUG_LOGGED_MESSAGES_AMD: u32 = 37188; -pub const GL_DEBUG_LOGGED_MESSAGES_AMD: u32 = 37189; -pub const GL_DEBUG_SEVERITY_HIGH_AMD: u32 = 37190; -pub const GL_DEBUG_SEVERITY_MEDIUM_AMD: u32 = 37191; -pub const GL_DEBUG_SEVERITY_LOW_AMD: u32 = 37192; -pub const GL_DEBUG_CATEGORY_API_ERROR_AMD: u32 = 37193; -pub const GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD: u32 = 37194; -pub const GL_DEBUG_CATEGORY_DEPRECATION_AMD: u32 = 37195; -pub const GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD: u32 = 37196; -pub const GL_DEBUG_CATEGORY_PERFORMANCE_AMD: u32 = 37197; -pub const GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD: u32 = 37198; -pub const GL_DEBUG_CATEGORY_APPLICATION_AMD: u32 = 37199; -pub const GL_DEBUG_CATEGORY_OTHER_AMD: u32 = 37200; -pub const GL_QUERY_BUFFER_AMD: u32 = 37266; -pub const GL_QUERY_BUFFER_BINDING_AMD: u32 = 37267; -pub const GL_QUERY_RESULT_NO_WAIT_AMD: u32 = 37268; -pub const GL_FIXED: u32 = 5132; -pub const GL_IMPLEMENTATION_COLOR_READ_TYPE: u32 = 35738; -pub const GL_IMPLEMENTATION_COLOR_READ_FORMAT: u32 = 35739; -pub const GL_LOW_FLOAT: u32 = 36336; -pub const GL_MEDIUM_FLOAT: u32 = 36337; -pub const GL_HIGH_FLOAT: u32 = 36338; -pub const GL_LOW_INT: u32 = 36339; -pub const GL_MEDIUM_INT: u32 = 36340; -pub const GL_HIGH_INT: u32 = 36341; -pub const GL_SHADER_COMPILER: u32 = 36346; -pub const GL_SHADER_BINARY_FORMATS: u32 = 36344; -pub const GL_NUM_SHADER_BINARY_FORMATS: u32 = 36345; -pub const GL_MAX_VERTEX_UNIFORM_VECTORS: u32 = 36347; -pub const GL_MAX_VARYING_VECTORS: u32 = 36348; -pub const GL_MAX_FRAGMENT_UNIFORM_VECTORS: u32 = 36349; -pub const GL_RGB565: u32 = 36194; -pub const GL_COMPRESSED_RGB8_ETC2: u32 = 37492; -pub const GL_COMPRESSED_SRGB8_ETC2: u32 = 37493; -pub const GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: u32 = 37494; -pub const GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: u32 = 37495; -pub const GL_COMPRESSED_RGBA8_ETC2_EAC: u32 = 37496; -pub const GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: u32 = 37497; -pub const GL_COMPRESSED_R11_EAC: u32 = 37488; -pub const GL_COMPRESSED_SIGNED_R11_EAC: u32 = 37489; -pub const GL_COMPRESSED_RG11_EAC: u32 = 37490; -pub const GL_COMPRESSED_SIGNED_RG11_EAC: u32 = 37491; -pub const GL_PRIMITIVE_RESTART_FIXED_INDEX: u32 = 36201; -pub const GL_ANY_SAMPLES_PASSED_CONSERVATIVE: u32 = 36202; -pub const GL_MAX_ELEMENT_INDEX: u32 = 36203; -pub const GL_MAP_PERSISTENT_BIT: u32 = 64; -pub const GL_MAP_COHERENT_BIT: u32 = 128; -pub const GL_DYNAMIC_STORAGE_BIT: u32 = 256; -pub const GL_CLIENT_STORAGE_BIT: u32 = 512; -pub const GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT: u32 = 16384; -pub const GL_BUFFER_IMMUTABLE_STORAGE: u32 = 33311; -pub const GL_BUFFER_STORAGE_FLAGS: u32 = 33312; -pub const GL_UNPACK_COMPRESSED_BLOCK_WIDTH: u32 = 37159; -pub const GL_UNPACK_COMPRESSED_BLOCK_HEIGHT: u32 = 37160; -pub const GL_UNPACK_COMPRESSED_BLOCK_DEPTH: u32 = 37161; -pub const GL_UNPACK_COMPRESSED_BLOCK_SIZE: u32 = 37162; -pub const GL_PACK_COMPRESSED_BLOCK_WIDTH: u32 = 37163; -pub const GL_PACK_COMPRESSED_BLOCK_HEIGHT: u32 = 37164; -pub const GL_PACK_COMPRESSED_BLOCK_DEPTH: u32 = 37165; -pub const GL_PACK_COMPRESSED_BLOCK_SIZE: u32 = 37166; -pub const GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB: u32 = 33346; -pub const GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB: u32 = 33347; -pub const GL_DEBUG_CALLBACK_FUNCTION_ARB: u32 = 33348; -pub const GL_DEBUG_CALLBACK_USER_PARAM_ARB: u32 = 33349; -pub const GL_DEBUG_SOURCE_API_ARB: u32 = 33350; -pub const GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB: u32 = 33351; -pub const GL_DEBUG_SOURCE_SHADER_COMPILER_ARB: u32 = 33352; -pub const GL_DEBUG_SOURCE_THIRD_PARTY_ARB: u32 = 33353; -pub const GL_DEBUG_SOURCE_APPLICATION_ARB: u32 = 33354; -pub const GL_DEBUG_SOURCE_OTHER_ARB: u32 = 33355; -pub const GL_DEBUG_TYPE_ERROR_ARB: u32 = 33356; -pub const GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB: u32 = 33357; -pub const GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB: u32 = 33358; -pub const GL_DEBUG_TYPE_PORTABILITY_ARB: u32 = 33359; -pub const GL_DEBUG_TYPE_PERFORMANCE_ARB: u32 = 33360; -pub const GL_DEBUG_TYPE_OTHER_ARB: u32 = 33361; -pub const GL_MAX_DEBUG_MESSAGE_LENGTH_ARB: u32 = 37187; -pub const GL_MAX_DEBUG_LOGGED_MESSAGES_ARB: u32 = 37188; -pub const GL_DEBUG_LOGGED_MESSAGES_ARB: u32 = 37189; -pub const GL_DEBUG_SEVERITY_HIGH_ARB: u32 = 37190; -pub const GL_DEBUG_SEVERITY_MEDIUM_ARB: u32 = 37191; -pub const GL_DEBUG_SEVERITY_LOW_ARB: u32 = 37192; -pub const GL_DEPTH_COMPONENT16_ARB: u32 = 33189; -pub const GL_DEPTH_COMPONENT24_ARB: u32 = 33190; -pub const GL_DEPTH_COMPONENT32_ARB: u32 = 33191; -pub const GL_TEXTURE_DEPTH_SIZE_ARB: u32 = 34890; -pub const GL_DEPTH_TEXTURE_MODE_ARB: u32 = 34891; -pub const GL_MAX_DRAW_BUFFERS_ARB: u32 = 34852; -pub const GL_DRAW_BUFFER0_ARB: u32 = 34853; -pub const GL_DRAW_BUFFER1_ARB: u32 = 34854; -pub const GL_DRAW_BUFFER2_ARB: u32 = 34855; -pub const GL_DRAW_BUFFER3_ARB: u32 = 34856; -pub const GL_DRAW_BUFFER4_ARB: u32 = 34857; -pub const GL_DRAW_BUFFER5_ARB: u32 = 34858; -pub const GL_DRAW_BUFFER6_ARB: u32 = 34859; -pub const GL_DRAW_BUFFER7_ARB: u32 = 34860; -pub const GL_DRAW_BUFFER8_ARB: u32 = 34861; -pub const GL_DRAW_BUFFER9_ARB: u32 = 34862; -pub const GL_DRAW_BUFFER10_ARB: u32 = 34863; -pub const GL_DRAW_BUFFER11_ARB: u32 = 34864; -pub const GL_DRAW_BUFFER12_ARB: u32 = 34865; -pub const GL_DRAW_BUFFER13_ARB: u32 = 34866; -pub const GL_DRAW_BUFFER14_ARB: u32 = 34867; -pub const GL_DRAW_BUFFER15_ARB: u32 = 34868; -pub const GL_MAX_UNIFORM_LOCATIONS: u32 = 33390; -pub const GL_FRAGMENT_PROGRAM_ARB: u32 = 34820; -pub const GL_PROGRAM_FORMAT_ASCII_ARB: u32 = 34933; -pub const GL_PROGRAM_LENGTH_ARB: u32 = 34343; -pub const GL_PROGRAM_FORMAT_ARB: u32 = 34934; -pub const GL_PROGRAM_BINDING_ARB: u32 = 34423; -pub const GL_PROGRAM_INSTRUCTIONS_ARB: u32 = 34976; -pub const GL_MAX_PROGRAM_INSTRUCTIONS_ARB: u32 = 34977; -pub const GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB: u32 = 34978; -pub const GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB: u32 = 34979; -pub const GL_PROGRAM_TEMPORARIES_ARB: u32 = 34980; -pub const GL_MAX_PROGRAM_TEMPORARIES_ARB: u32 = 34981; -pub const GL_PROGRAM_NATIVE_TEMPORARIES_ARB: u32 = 34982; -pub const GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB: u32 = 34983; -pub const GL_PROGRAM_PARAMETERS_ARB: u32 = 34984; -pub const GL_MAX_PROGRAM_PARAMETERS_ARB: u32 = 34985; -pub const GL_PROGRAM_NATIVE_PARAMETERS_ARB: u32 = 34986; -pub const GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB: u32 = 34987; -pub const GL_PROGRAM_ATTRIBS_ARB: u32 = 34988; -pub const GL_MAX_PROGRAM_ATTRIBS_ARB: u32 = 34989; -pub const GL_PROGRAM_NATIVE_ATTRIBS_ARB: u32 = 34990; -pub const GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB: u32 = 34991; -pub const GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB: u32 = 34996; -pub const GL_MAX_PROGRAM_ENV_PARAMETERS_ARB: u32 = 34997; -pub const GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB: u32 = 34998; -pub const GL_PROGRAM_ALU_INSTRUCTIONS_ARB: u32 = 34821; -pub const GL_PROGRAM_TEX_INSTRUCTIONS_ARB: u32 = 34822; -pub const GL_PROGRAM_TEX_INDIRECTIONS_ARB: u32 = 34823; -pub const GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB: u32 = 34824; -pub const GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB: u32 = 34825; -pub const GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB: u32 = 34826; -pub const GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB: u32 = 34827; -pub const GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB: u32 = 34828; -pub const GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB: u32 = 34829; -pub const GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB: u32 = 34830; -pub const GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB: u32 = 34831; -pub const GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB: u32 = 34832; -pub const GL_PROGRAM_STRING_ARB: u32 = 34344; -pub const GL_PROGRAM_ERROR_POSITION_ARB: u32 = 34379; -pub const GL_CURRENT_MATRIX_ARB: u32 = 34369; -pub const GL_TRANSPOSE_CURRENT_MATRIX_ARB: u32 = 34999; -pub const GL_CURRENT_MATRIX_STACK_DEPTH_ARB: u32 = 34368; -pub const GL_MAX_PROGRAM_MATRICES_ARB: u32 = 34351; -pub const GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB: u32 = 34350; -pub const GL_MAX_TEXTURE_COORDS_ARB: u32 = 34929; -pub const GL_MAX_TEXTURE_IMAGE_UNITS_ARB: u32 = 34930; -pub const GL_PROGRAM_ERROR_STRING_ARB: u32 = 34932; -pub const GL_MATRIX0_ARB: u32 = 35008; -pub const GL_MATRIX1_ARB: u32 = 35009; -pub const GL_MATRIX2_ARB: u32 = 35010; -pub const GL_MATRIX3_ARB: u32 = 35011; -pub const GL_MATRIX4_ARB: u32 = 35012; -pub const GL_MATRIX5_ARB: u32 = 35013; -pub const GL_MATRIX6_ARB: u32 = 35014; -pub const GL_MATRIX7_ARB: u32 = 35015; -pub const GL_MATRIX8_ARB: u32 = 35016; -pub const GL_MATRIX9_ARB: u32 = 35017; -pub const GL_MATRIX10_ARB: u32 = 35018; -pub const GL_MATRIX11_ARB: u32 = 35019; -pub const GL_MATRIX12_ARB: u32 = 35020; -pub const GL_MATRIX13_ARB: u32 = 35021; -pub const GL_MATRIX14_ARB: u32 = 35022; -pub const GL_MATRIX15_ARB: u32 = 35023; -pub const GL_MATRIX16_ARB: u32 = 35024; -pub const GL_MATRIX17_ARB: u32 = 35025; -pub const GL_MATRIX18_ARB: u32 = 35026; -pub const GL_MATRIX19_ARB: u32 = 35027; -pub const GL_MATRIX20_ARB: u32 = 35028; -pub const GL_MATRIX21_ARB: u32 = 35029; -pub const GL_MATRIX22_ARB: u32 = 35030; -pub const GL_MATRIX23_ARB: u32 = 35031; -pub const GL_MATRIX24_ARB: u32 = 35032; -pub const GL_MATRIX25_ARB: u32 = 35033; -pub const GL_MATRIX26_ARB: u32 = 35034; -pub const GL_MATRIX27_ARB: u32 = 35035; -pub const GL_MATRIX28_ARB: u32 = 35036; -pub const GL_MATRIX29_ARB: u32 = 35037; -pub const GL_MATRIX30_ARB: u32 = 35038; -pub const GL_MATRIX31_ARB: u32 = 35039; -pub const GL_FRAGMENT_SHADER_ARB: u32 = 35632; -pub const GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB: u32 = 35657; -pub const GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB: u32 = 35723; -pub const GL_MULTISAMPLE_ARB: u32 = 32925; -pub const GL_SAMPLE_ALPHA_TO_COVERAGE_ARB: u32 = 32926; -pub const GL_SAMPLE_ALPHA_TO_ONE_ARB: u32 = 32927; -pub const GL_SAMPLE_COVERAGE_ARB: u32 = 32928; -pub const GL_SAMPLE_BUFFERS_ARB: u32 = 32936; -pub const GL_SAMPLES_ARB: u32 = 32937; -pub const GL_SAMPLE_COVERAGE_VALUE_ARB: u32 = 32938; -pub const GL_SAMPLE_COVERAGE_INVERT_ARB: u32 = 32939; -pub const GL_MULTISAMPLE_BIT_ARB: u32 = 536870912; -pub const GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB: u32 = 37693; -pub const GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB: u32 = 37694; -pub const GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB: u32 = 37695; -pub const GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB: u32 = 37696; -pub const GL_SAMPLE_LOCATION_ARB: u32 = 36432; -pub const GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB: u32 = 37697; -pub const GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB: u32 = 37698; -pub const GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB: u32 = 37699; -pub const GL_COMPRESSED_ALPHA_ARB: u32 = 34025; -pub const GL_COMPRESSED_LUMINANCE_ARB: u32 = 34026; -pub const GL_COMPRESSED_LUMINANCE_ALPHA_ARB: u32 = 34027; -pub const GL_COMPRESSED_INTENSITY_ARB: u32 = 34028; -pub const GL_COMPRESSED_RGB_ARB: u32 = 34029; -pub const GL_COMPRESSED_RGBA_ARB: u32 = 34030; -pub const GL_TEXTURE_COMPRESSION_HINT_ARB: u32 = 34031; -pub const GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB: u32 = 34464; -pub const GL_TEXTURE_COMPRESSED_ARB: u32 = 34465; -pub const GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB: u32 = 34466; -pub const GL_COMPRESSED_TEXTURE_FORMATS_ARB: u32 = 34467; -pub const GL_TEXTURE_RED_TYPE_ARB: u32 = 35856; -pub const GL_TEXTURE_GREEN_TYPE_ARB: u32 = 35857; -pub const GL_TEXTURE_BLUE_TYPE_ARB: u32 = 35858; -pub const GL_TEXTURE_ALPHA_TYPE_ARB: u32 = 35859; -pub const GL_TEXTURE_LUMINANCE_TYPE_ARB: u32 = 35860; -pub const GL_TEXTURE_INTENSITY_TYPE_ARB: u32 = 35861; -pub const GL_TEXTURE_DEPTH_TYPE_ARB: u32 = 35862; -pub const GL_UNSIGNED_NORMALIZED_ARB: u32 = 35863; -pub const GL_RGBA32F_ARB: u32 = 34836; -pub const GL_RGB32F_ARB: u32 = 34837; -pub const GL_ALPHA32F_ARB: u32 = 34838; -pub const GL_INTENSITY32F_ARB: u32 = 34839; -pub const GL_LUMINANCE32F_ARB: u32 = 34840; -pub const GL_LUMINANCE_ALPHA32F_ARB: u32 = 34841; -pub const GL_RGBA16F_ARB: u32 = 34842; -pub const GL_RGB16F_ARB: u32 = 34843; -pub const GL_ALPHA16F_ARB: u32 = 34844; -pub const GL_INTENSITY16F_ARB: u32 = 34845; -pub const GL_LUMINANCE16F_ARB: u32 = 34846; -pub const GL_LUMINANCE_ALPHA16F_ARB: u32 = 34847; -pub const GL_VERTEX_ATTRIB_BINDING: u32 = 33492; -pub const GL_VERTEX_ATTRIB_RELATIVE_OFFSET: u32 = 33493; -pub const GL_VERTEX_BINDING_DIVISOR: u32 = 33494; -pub const GL_VERTEX_BINDING_OFFSET: u32 = 33495; -pub const GL_VERTEX_BINDING_STRIDE: u32 = 33496; -pub const GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET: u32 = 33497; -pub const GL_MAX_VERTEX_ATTRIB_BINDINGS: u32 = 33498; -pub const GL_BUFFER_SIZE_ARB: u32 = 34660; -pub const GL_BUFFER_USAGE_ARB: u32 = 34661; -pub const GL_ARRAY_BUFFER_ARB: u32 = 34962; -pub const GL_ELEMENT_ARRAY_BUFFER_ARB: u32 = 34963; -pub const GL_ARRAY_BUFFER_BINDING_ARB: u32 = 34964; -pub const GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB: u32 = 34965; -pub const GL_VERTEX_ARRAY_BUFFER_BINDING_ARB: u32 = 34966; -pub const GL_NORMAL_ARRAY_BUFFER_BINDING_ARB: u32 = 34967; -pub const GL_COLOR_ARRAY_BUFFER_BINDING_ARB: u32 = 34968; -pub const GL_INDEX_ARRAY_BUFFER_BINDING_ARB: u32 = 34969; -pub const GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB: u32 = 34970; -pub const GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB: u32 = 34971; -pub const GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB: u32 = 34972; -pub const GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB: u32 = 34973; -pub const GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: u32 = 34974; -pub const GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB: u32 = 34975; -pub const GL_READ_ONLY_ARB: u32 = 35000; -pub const GL_WRITE_ONLY_ARB: u32 = 35001; -pub const GL_READ_WRITE_ARB: u32 = 35002; -pub const GL_BUFFER_ACCESS_ARB: u32 = 35003; -pub const GL_BUFFER_MAPPED_ARB: u32 = 35004; -pub const GL_BUFFER_MAP_POINTER_ARB: u32 = 35005; -pub const GL_STREAM_DRAW_ARB: u32 = 35040; -pub const GL_STREAM_READ_ARB: u32 = 35041; -pub const GL_STREAM_COPY_ARB: u32 = 35042; -pub const GL_STATIC_DRAW_ARB: u32 = 35044; -pub const GL_STATIC_READ_ARB: u32 = 35045; -pub const GL_STATIC_COPY_ARB: u32 = 35046; -pub const GL_DYNAMIC_DRAW_ARB: u32 = 35048; -pub const GL_DYNAMIC_READ_ARB: u32 = 35049; -pub const GL_DYNAMIC_COPY_ARB: u32 = 35050; -pub const GL_COLOR_SUM_ARB: u32 = 33880; -pub const GL_VERTEX_PROGRAM_ARB: u32 = 34336; -pub const GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB: u32 = 34338; -pub const GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB: u32 = 34339; -pub const GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB: u32 = 34340; -pub const GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB: u32 = 34341; -pub const GL_CURRENT_VERTEX_ATTRIB_ARB: u32 = 34342; -pub const GL_VERTEX_PROGRAM_POINT_SIZE_ARB: u32 = 34370; -pub const GL_VERTEX_PROGRAM_TWO_SIDE_ARB: u32 = 34371; -pub const GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB: u32 = 34373; -pub const GL_MAX_VERTEX_ATTRIBS_ARB: u32 = 34921; -pub const GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB: u32 = 34922; -pub const GL_PROGRAM_ADDRESS_REGISTERS_ARB: u32 = 34992; -pub const GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB: u32 = 34993; -pub const GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB: u32 = 34994; -pub const GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB: u32 = 34995; -pub const GL_VERTEX_SHADER_ARB: u32 = 35633; -pub const GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB: u32 = 35658; -pub const GL_MAX_VARYING_FLOATS_ARB: u32 = 35659; -pub const GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB: u32 = 35660; -pub const GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB: u32 = 35661; -pub const GL_OBJECT_ACTIVE_ATTRIBUTES_ARB: u32 = 35721; -pub const GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB: u32 = 35722; -pub const GL_FLOAT_VEC2_ARB: u32 = 35664; -pub const GL_FLOAT_VEC3_ARB: u32 = 35665; -pub const GL_FLOAT_VEC4_ARB: u32 = 35666; -pub const GL_FLOAT_MAT2_ARB: u32 = 35674; -pub const GL_FLOAT_MAT3_ARB: u32 = 35675; -pub const GL_FLOAT_MAT4_ARB: u32 = 35676; -pub const GL_ELEMENT_ARRAY_ATI: u32 = 34664; -pub const GL_ELEMENT_ARRAY_TYPE_ATI: u32 = 34665; -pub const GL_ELEMENT_ARRAY_POINTER_ATI: u32 = 34666; -pub const GL_FRAGMENT_SHADER_ATI: u32 = 35104; -pub const GL_REG_0_ATI: u32 = 35105; -pub const GL_REG_1_ATI: u32 = 35106; -pub const GL_REG_2_ATI: u32 = 35107; -pub const GL_REG_3_ATI: u32 = 35108; -pub const GL_REG_4_ATI: u32 = 35109; -pub const GL_REG_5_ATI: u32 = 35110; -pub const GL_REG_6_ATI: u32 = 35111; -pub const GL_REG_7_ATI: u32 = 35112; -pub const GL_REG_8_ATI: u32 = 35113; -pub const GL_REG_9_ATI: u32 = 35114; -pub const GL_REG_10_ATI: u32 = 35115; -pub const GL_REG_11_ATI: u32 = 35116; -pub const GL_REG_12_ATI: u32 = 35117; -pub const GL_REG_13_ATI: u32 = 35118; -pub const GL_REG_14_ATI: u32 = 35119; -pub const GL_REG_15_ATI: u32 = 35120; -pub const GL_REG_16_ATI: u32 = 35121; -pub const GL_REG_17_ATI: u32 = 35122; -pub const GL_REG_18_ATI: u32 = 35123; -pub const GL_REG_19_ATI: u32 = 35124; -pub const GL_REG_20_ATI: u32 = 35125; -pub const GL_REG_21_ATI: u32 = 35126; -pub const GL_REG_22_ATI: u32 = 35127; -pub const GL_REG_23_ATI: u32 = 35128; -pub const GL_REG_24_ATI: u32 = 35129; -pub const GL_REG_25_ATI: u32 = 35130; -pub const GL_REG_26_ATI: u32 = 35131; -pub const GL_REG_27_ATI: u32 = 35132; -pub const GL_REG_28_ATI: u32 = 35133; -pub const GL_REG_29_ATI: u32 = 35134; -pub const GL_REG_30_ATI: u32 = 35135; -pub const GL_REG_31_ATI: u32 = 35136; -pub const GL_CON_0_ATI: u32 = 35137; -pub const GL_CON_1_ATI: u32 = 35138; -pub const GL_CON_2_ATI: u32 = 35139; -pub const GL_CON_3_ATI: u32 = 35140; -pub const GL_CON_4_ATI: u32 = 35141; -pub const GL_CON_5_ATI: u32 = 35142; -pub const GL_CON_6_ATI: u32 = 35143; -pub const GL_CON_7_ATI: u32 = 35144; -pub const GL_CON_8_ATI: u32 = 35145; -pub const GL_CON_9_ATI: u32 = 35146; -pub const GL_CON_10_ATI: u32 = 35147; -pub const GL_CON_11_ATI: u32 = 35148; -pub const GL_CON_12_ATI: u32 = 35149; -pub const GL_CON_13_ATI: u32 = 35150; -pub const GL_CON_14_ATI: u32 = 35151; -pub const GL_CON_15_ATI: u32 = 35152; -pub const GL_CON_16_ATI: u32 = 35153; -pub const GL_CON_17_ATI: u32 = 35154; -pub const GL_CON_18_ATI: u32 = 35155; -pub const GL_CON_19_ATI: u32 = 35156; -pub const GL_CON_20_ATI: u32 = 35157; -pub const GL_CON_21_ATI: u32 = 35158; -pub const GL_CON_22_ATI: u32 = 35159; -pub const GL_CON_23_ATI: u32 = 35160; -pub const GL_CON_24_ATI: u32 = 35161; -pub const GL_CON_25_ATI: u32 = 35162; -pub const GL_CON_26_ATI: u32 = 35163; -pub const GL_CON_27_ATI: u32 = 35164; -pub const GL_CON_28_ATI: u32 = 35165; -pub const GL_CON_29_ATI: u32 = 35166; -pub const GL_CON_30_ATI: u32 = 35167; -pub const GL_CON_31_ATI: u32 = 35168; -pub const GL_MOV_ATI: u32 = 35169; -pub const GL_ADD_ATI: u32 = 35171; -pub const GL_MUL_ATI: u32 = 35172; -pub const GL_SUB_ATI: u32 = 35173; -pub const GL_DOT3_ATI: u32 = 35174; -pub const GL_DOT4_ATI: u32 = 35175; -pub const GL_MAD_ATI: u32 = 35176; -pub const GL_LERP_ATI: u32 = 35177; -pub const GL_CND_ATI: u32 = 35178; -pub const GL_CND0_ATI: u32 = 35179; -pub const GL_DOT2_ADD_ATI: u32 = 35180; -pub const GL_SECONDARY_INTERPOLATOR_ATI: u32 = 35181; -pub const GL_NUM_FRAGMENT_REGISTERS_ATI: u32 = 35182; -pub const GL_NUM_FRAGMENT_CONSTANTS_ATI: u32 = 35183; -pub const GL_NUM_PASSES_ATI: u32 = 35184; -pub const GL_NUM_INSTRUCTIONS_PER_PASS_ATI: u32 = 35185; -pub const GL_NUM_INSTRUCTIONS_TOTAL_ATI: u32 = 35186; -pub const GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI: u32 = 35187; -pub const GL_NUM_LOOPBACK_COMPONENTS_ATI: u32 = 35188; -pub const GL_COLOR_ALPHA_PAIRING_ATI: u32 = 35189; -pub const GL_SWIZZLE_STR_ATI: u32 = 35190; -pub const GL_SWIZZLE_STQ_ATI: u32 = 35191; -pub const GL_SWIZZLE_STR_DR_ATI: u32 = 35192; -pub const GL_SWIZZLE_STQ_DQ_ATI: u32 = 35193; -pub const GL_SWIZZLE_STRQ_ATI: u32 = 35194; -pub const GL_SWIZZLE_STRQ_DQ_ATI: u32 = 35195; -pub const GL_RED_BIT_ATI: u32 = 1; -pub const GL_GREEN_BIT_ATI: u32 = 2; -pub const GL_BLUE_BIT_ATI: u32 = 4; -pub const GL_2X_BIT_ATI: u32 = 1; -pub const GL_4X_BIT_ATI: u32 = 2; -pub const GL_8X_BIT_ATI: u32 = 4; -pub const GL_HALF_BIT_ATI: u32 = 8; -pub const GL_QUARTER_BIT_ATI: u32 = 16; -pub const GL_EIGHTH_BIT_ATI: u32 = 32; -pub const GL_SATURATE_BIT_ATI: u32 = 64; -pub const GL_COMP_BIT_ATI: u32 = 2; -pub const GL_NEGATE_BIT_ATI: u32 = 4; -pub const GL_BIAS_BIT_ATI: u32 = 8; -pub const GL_STATIC_ATI: u32 = 34656; -pub const GL_DYNAMIC_ATI: u32 = 34657; -pub const GL_PRESERVE_ATI: u32 = 34658; -pub const GL_DISCARD_ATI: u32 = 34659; -pub const GL_OBJECT_BUFFER_SIZE_ATI: u32 = 34660; -pub const GL_OBJECT_BUFFER_USAGE_ATI: u32 = 34661; -pub const GL_ARRAY_OBJECT_BUFFER_ATI: u32 = 34662; -pub const GL_ARRAY_OBJECT_OFFSET_ATI: u32 = 34663; -pub const GL_CONSTANT_COLOR_EXT: u32 = 32769; -pub const GL_ONE_MINUS_CONSTANT_COLOR_EXT: u32 = 32770; -pub const GL_CONSTANT_ALPHA_EXT: u32 = 32771; -pub const GL_ONE_MINUS_CONSTANT_ALPHA_EXT: u32 = 32772; -pub const GL_BLEND_COLOR_EXT: u32 = 32773; -pub const GL_BLEND_EQUATION_RGB_EXT: u32 = 32777; -pub const GL_BLEND_EQUATION_ALPHA_EXT: u32 = 34877; -pub const GL_BLEND_DST_RGB_EXT: u32 = 32968; -pub const GL_BLEND_SRC_RGB_EXT: u32 = 32969; -pub const GL_BLEND_DST_ALPHA_EXT: u32 = 32970; -pub const GL_BLEND_SRC_ALPHA_EXT: u32 = 32971; -pub const GL_READ_FRAMEBUFFER_EXT: u32 = 36008; -pub const GL_DRAW_FRAMEBUFFER_EXT: u32 = 36009; -pub const GL_DRAW_FRAMEBUFFER_BINDING_EXT: u32 = 36006; -pub const GL_READ_FRAMEBUFFER_BINDING_EXT: u32 = 36010; -pub const GL_RENDERBUFFER_SAMPLES_EXT: u32 = 36011; -pub const GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT: u32 = 36182; -pub const GL_MAX_SAMPLES_EXT: u32 = 36183; -pub const GL_SCALED_RESOLVE_FASTEST_EXT: u32 = 37050; -pub const GL_SCALED_RESOLVE_NICEST_EXT: u32 = 37051; -pub const GL_INVALID_FRAMEBUFFER_OPERATION_EXT: u32 = 1286; -pub const GL_MAX_RENDERBUFFER_SIZE_EXT: u32 = 34024; -pub const GL_FRAMEBUFFER_BINDING_EXT: u32 = 36006; -pub const GL_RENDERBUFFER_BINDING_EXT: u32 = 36007; -pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT: u32 = 36048; -pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT: u32 = 36049; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT: u32 = 36050; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT: u32 = 36051; -pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT: u32 = 36052; -pub const GL_FRAMEBUFFER_COMPLETE_EXT: u32 = 36053; -pub const GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT: u32 = 36054; -pub const GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT: u32 = 36055; -pub const GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT: u32 = 36057; -pub const GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT: u32 = 36058; -pub const GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT: u32 = 36059; -pub const GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT: u32 = 36060; -pub const GL_FRAMEBUFFER_UNSUPPORTED_EXT: u32 = 36061; -pub const GL_MAX_COLOR_ATTACHMENTS_EXT: u32 = 36063; -pub const GL_COLOR_ATTACHMENT0_EXT: u32 = 36064; -pub const GL_COLOR_ATTACHMENT1_EXT: u32 = 36065; -pub const GL_COLOR_ATTACHMENT2_EXT: u32 = 36066; -pub const GL_COLOR_ATTACHMENT3_EXT: u32 = 36067; -pub const GL_COLOR_ATTACHMENT4_EXT: u32 = 36068; -pub const GL_COLOR_ATTACHMENT5_EXT: u32 = 36069; -pub const GL_COLOR_ATTACHMENT6_EXT: u32 = 36070; -pub const GL_COLOR_ATTACHMENT7_EXT: u32 = 36071; -pub const GL_COLOR_ATTACHMENT8_EXT: u32 = 36072; -pub const GL_COLOR_ATTACHMENT9_EXT: u32 = 36073; -pub const GL_COLOR_ATTACHMENT10_EXT: u32 = 36074; -pub const GL_COLOR_ATTACHMENT11_EXT: u32 = 36075; -pub const GL_COLOR_ATTACHMENT12_EXT: u32 = 36076; -pub const GL_COLOR_ATTACHMENT13_EXT: u32 = 36077; -pub const GL_COLOR_ATTACHMENT14_EXT: u32 = 36078; -pub const GL_COLOR_ATTACHMENT15_EXT: u32 = 36079; -pub const GL_DEPTH_ATTACHMENT_EXT: u32 = 36096; -pub const GL_STENCIL_ATTACHMENT_EXT: u32 = 36128; -pub const GL_FRAMEBUFFER_EXT: u32 = 36160; -pub const GL_RENDERBUFFER_EXT: u32 = 36161; -pub const GL_RENDERBUFFER_WIDTH_EXT: u32 = 36162; -pub const GL_RENDERBUFFER_HEIGHT_EXT: u32 = 36163; -pub const GL_RENDERBUFFER_INTERNAL_FORMAT_EXT: u32 = 36164; -pub const GL_STENCIL_INDEX1_EXT: u32 = 36166; -pub const GL_STENCIL_INDEX4_EXT: u32 = 36167; -pub const GL_STENCIL_INDEX8_EXT: u32 = 36168; -pub const GL_STENCIL_INDEX16_EXT: u32 = 36169; -pub const GL_RENDERBUFFER_RED_SIZE_EXT: u32 = 36176; -pub const GL_RENDERBUFFER_GREEN_SIZE_EXT: u32 = 36177; -pub const GL_RENDERBUFFER_BLUE_SIZE_EXT: u32 = 36178; -pub const GL_RENDERBUFFER_ALPHA_SIZE_EXT: u32 = 36179; -pub const GL_RENDERBUFFER_DEPTH_SIZE_EXT: u32 = 36180; -pub const GL_RENDERBUFFER_STENCIL_SIZE_EXT: u32 = 36181; -pub const GL_FRAMEBUFFER_SRGB_EXT: u32 = 36281; -pub const GL_FRAMEBUFFER_SRGB_CAPABLE_EXT: u32 = 36282; -pub const GL_IUI_V2F_EXT: u32 = 33197; -pub const GL_IUI_V3F_EXT: u32 = 33198; -pub const GL_IUI_N3F_V2F_EXT: u32 = 33199; -pub const GL_IUI_N3F_V3F_EXT: u32 = 33200; -pub const GL_T2F_IUI_V2F_EXT: u32 = 33201; -pub const GL_T2F_IUI_V3F_EXT: u32 = 33202; -pub const GL_T2F_IUI_N3F_V2F_EXT: u32 = 33203; -pub const GL_T2F_IUI_N3F_V3F_EXT: u32 = 33204; -pub const GL_ALPHA4_EXT: u32 = 32827; -pub const GL_ALPHA8_EXT: u32 = 32828; -pub const GL_ALPHA12_EXT: u32 = 32829; -pub const GL_ALPHA16_EXT: u32 = 32830; -pub const GL_LUMINANCE4_EXT: u32 = 32831; -pub const GL_LUMINANCE8_EXT: u32 = 32832; -pub const GL_LUMINANCE12_EXT: u32 = 32833; -pub const GL_LUMINANCE16_EXT: u32 = 32834; -pub const GL_LUMINANCE4_ALPHA4_EXT: u32 = 32835; -pub const GL_LUMINANCE6_ALPHA2_EXT: u32 = 32836; -pub const GL_LUMINANCE8_ALPHA8_EXT: u32 = 32837; -pub const GL_LUMINANCE12_ALPHA4_EXT: u32 = 32838; -pub const GL_LUMINANCE12_ALPHA12_EXT: u32 = 32839; -pub const GL_LUMINANCE16_ALPHA16_EXT: u32 = 32840; -pub const GL_INTENSITY_EXT: u32 = 32841; -pub const GL_INTENSITY4_EXT: u32 = 32842; -pub const GL_INTENSITY8_EXT: u32 = 32843; -pub const GL_INTENSITY12_EXT: u32 = 32844; -pub const GL_INTENSITY16_EXT: u32 = 32845; -pub const GL_RGB2_EXT: u32 = 32846; -pub const GL_RGB4_EXT: u32 = 32847; -pub const GL_RGB5_EXT: u32 = 32848; -pub const GL_RGB8_EXT: u32 = 32849; -pub const GL_RGB10_EXT: u32 = 32850; -pub const GL_RGB12_EXT: u32 = 32851; -pub const GL_RGB16_EXT: u32 = 32852; -pub const GL_RGBA2_EXT: u32 = 32853; -pub const GL_RGBA4_EXT: u32 = 32854; -pub const GL_RGB5_A1_EXT: u32 = 32855; -pub const GL_RGBA8_EXT: u32 = 32856; -pub const GL_RGB10_A2_EXT: u32 = 32857; -pub const GL_RGBA12_EXT: u32 = 32858; -pub const GL_RGBA16_EXT: u32 = 32859; -pub const GL_TEXTURE_RED_SIZE_EXT: u32 = 32860; -pub const GL_TEXTURE_GREEN_SIZE_EXT: u32 = 32861; -pub const GL_TEXTURE_BLUE_SIZE_EXT: u32 = 32862; -pub const GL_TEXTURE_ALPHA_SIZE_EXT: u32 = 32863; -pub const GL_TEXTURE_LUMINANCE_SIZE_EXT: u32 = 32864; -pub const GL_TEXTURE_INTENSITY_SIZE_EXT: u32 = 32865; -pub const GL_REPLACE_EXT: u32 = 32866; -pub const GL_PROXY_TEXTURE_1D_EXT: u32 = 32867; -pub const GL_PROXY_TEXTURE_2D_EXT: u32 = 32868; -pub const GL_TEXTURE_TOO_LARGE_EXT: u32 = 32869; -pub const GL_COMPRESSED_RGB_S3TC_DXT1_EXT: u32 = 33776; -pub const GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: u32 = 33777; -pub const GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: u32 = 33778; -pub const GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: u32 = 33779; -pub const GL_SRGB_EXT: u32 = 35904; -pub const GL_SRGB8_EXT: u32 = 35905; -pub const GL_SRGB_ALPHA_EXT: u32 = 35906; -pub const GL_SRGB8_ALPHA8_EXT: u32 = 35907; -pub const GL_SLUMINANCE_ALPHA_EXT: u32 = 35908; -pub const GL_SLUMINANCE8_ALPHA8_EXT: u32 = 35909; -pub const GL_SLUMINANCE_EXT: u32 = 35910; -pub const GL_SLUMINANCE8_EXT: u32 = 35911; -pub const GL_COMPRESSED_SRGB_EXT: u32 = 35912; -pub const GL_COMPRESSED_SRGB_ALPHA_EXT: u32 = 35913; -pub const GL_COMPRESSED_SLUMINANCE_EXT: u32 = 35914; -pub const GL_COMPRESSED_SLUMINANCE_ALPHA_EXT: u32 = 35915; -pub const GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: u32 = 35916; -pub const GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: u32 = 35917; -pub const GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: u32 = 35918; -pub const GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: u32 = 35919; -pub const GL_TEXTURE_SWIZZLE_R_EXT: u32 = 36418; -pub const GL_TEXTURE_SWIZZLE_G_EXT: u32 = 36419; -pub const GL_TEXTURE_SWIZZLE_B_EXT: u32 = 36420; -pub const GL_TEXTURE_SWIZZLE_A_EXT: u32 = 36421; -pub const GL_TEXTURE_SWIZZLE_RGBA_EXT: u32 = 36422; -pub const GL_VERTEX_ARRAY_EXT: u32 = 32884; -pub const GL_NORMAL_ARRAY_EXT: u32 = 32885; -pub const GL_COLOR_ARRAY_EXT: u32 = 32886; -pub const GL_INDEX_ARRAY_EXT: u32 = 32887; -pub const GL_TEXTURE_COORD_ARRAY_EXT: u32 = 32888; -pub const GL_EDGE_FLAG_ARRAY_EXT: u32 = 32889; -pub const GL_VERTEX_ARRAY_SIZE_EXT: u32 = 32890; -pub const GL_VERTEX_ARRAY_TYPE_EXT: u32 = 32891; -pub const GL_VERTEX_ARRAY_STRIDE_EXT: u32 = 32892; -pub const GL_VERTEX_ARRAY_COUNT_EXT: u32 = 32893; -pub const GL_NORMAL_ARRAY_TYPE_EXT: u32 = 32894; -pub const GL_NORMAL_ARRAY_STRIDE_EXT: u32 = 32895; -pub const GL_NORMAL_ARRAY_COUNT_EXT: u32 = 32896; -pub const GL_COLOR_ARRAY_SIZE_EXT: u32 = 32897; -pub const GL_COLOR_ARRAY_TYPE_EXT: u32 = 32898; -pub const GL_COLOR_ARRAY_STRIDE_EXT: u32 = 32899; -pub const GL_COLOR_ARRAY_COUNT_EXT: u32 = 32900; -pub const GL_INDEX_ARRAY_TYPE_EXT: u32 = 32901; -pub const GL_INDEX_ARRAY_STRIDE_EXT: u32 = 32902; -pub const GL_INDEX_ARRAY_COUNT_EXT: u32 = 32903; -pub const GL_TEXTURE_COORD_ARRAY_SIZE_EXT: u32 = 32904; -pub const GL_TEXTURE_COORD_ARRAY_TYPE_EXT: u32 = 32905; -pub const GL_TEXTURE_COORD_ARRAY_STRIDE_EXT: u32 = 32906; -pub const GL_TEXTURE_COORD_ARRAY_COUNT_EXT: u32 = 32907; -pub const GL_EDGE_FLAG_ARRAY_STRIDE_EXT: u32 = 32908; -pub const GL_EDGE_FLAG_ARRAY_COUNT_EXT: u32 = 32909; -pub const GL_VERTEX_ARRAY_POINTER_EXT: u32 = 32910; -pub const GL_NORMAL_ARRAY_POINTER_EXT: u32 = 32911; -pub const GL_COLOR_ARRAY_POINTER_EXT: u32 = 32912; -pub const GL_INDEX_ARRAY_POINTER_EXT: u32 = 32913; -pub const GL_TEXTURE_COORD_ARRAY_POINTER_EXT: u32 = 32914; -pub const GL_EDGE_FLAG_ARRAY_POINTER_EXT: u32 = 32915; -pub const GL_VERTEX_SHADER_EXT: u32 = 34688; -pub const GL_VERTEX_SHADER_BINDING_EXT: u32 = 34689; -pub const GL_OP_INDEX_EXT: u32 = 34690; -pub const GL_OP_NEGATE_EXT: u32 = 34691; -pub const GL_OP_DOT3_EXT: u32 = 34692; -pub const GL_OP_DOT4_EXT: u32 = 34693; -pub const GL_OP_MUL_EXT: u32 = 34694; -pub const GL_OP_ADD_EXT: u32 = 34695; -pub const GL_OP_MADD_EXT: u32 = 34696; -pub const GL_OP_FRAC_EXT: u32 = 34697; -pub const GL_OP_MAX_EXT: u32 = 34698; -pub const GL_OP_MIN_EXT: u32 = 34699; -pub const GL_OP_SET_GE_EXT: u32 = 34700; -pub const GL_OP_SET_LT_EXT: u32 = 34701; -pub const GL_OP_CLAMP_EXT: u32 = 34702; -pub const GL_OP_FLOOR_EXT: u32 = 34703; -pub const GL_OP_ROUND_EXT: u32 = 34704; -pub const GL_OP_EXP_BASE_2_EXT: u32 = 34705; -pub const GL_OP_LOG_BASE_2_EXT: u32 = 34706; -pub const GL_OP_POWER_EXT: u32 = 34707; -pub const GL_OP_RECIP_EXT: u32 = 34708; -pub const GL_OP_RECIP_SQRT_EXT: u32 = 34709; -pub const GL_OP_SUB_EXT: u32 = 34710; -pub const GL_OP_CROSS_PRODUCT_EXT: u32 = 34711; -pub const GL_OP_MULTIPLY_MATRIX_EXT: u32 = 34712; -pub const GL_OP_MOV_EXT: u32 = 34713; -pub const GL_OUTPUT_VERTEX_EXT: u32 = 34714; -pub const GL_OUTPUT_COLOR0_EXT: u32 = 34715; -pub const GL_OUTPUT_COLOR1_EXT: u32 = 34716; -pub const GL_OUTPUT_TEXTURE_COORD0_EXT: u32 = 34717; -pub const GL_OUTPUT_TEXTURE_COORD1_EXT: u32 = 34718; -pub const GL_OUTPUT_TEXTURE_COORD2_EXT: u32 = 34719; -pub const GL_OUTPUT_TEXTURE_COORD3_EXT: u32 = 34720; -pub const GL_OUTPUT_TEXTURE_COORD4_EXT: u32 = 34721; -pub const GL_OUTPUT_TEXTURE_COORD5_EXT: u32 = 34722; -pub const GL_OUTPUT_TEXTURE_COORD6_EXT: u32 = 34723; -pub const GL_OUTPUT_TEXTURE_COORD7_EXT: u32 = 34724; -pub const GL_OUTPUT_TEXTURE_COORD8_EXT: u32 = 34725; -pub const GL_OUTPUT_TEXTURE_COORD9_EXT: u32 = 34726; -pub const GL_OUTPUT_TEXTURE_COORD10_EXT: u32 = 34727; -pub const GL_OUTPUT_TEXTURE_COORD11_EXT: u32 = 34728; -pub const GL_OUTPUT_TEXTURE_COORD12_EXT: u32 = 34729; -pub const GL_OUTPUT_TEXTURE_COORD13_EXT: u32 = 34730; -pub const GL_OUTPUT_TEXTURE_COORD14_EXT: u32 = 34731; -pub const GL_OUTPUT_TEXTURE_COORD15_EXT: u32 = 34732; -pub const GL_OUTPUT_TEXTURE_COORD16_EXT: u32 = 34733; -pub const GL_OUTPUT_TEXTURE_COORD17_EXT: u32 = 34734; -pub const GL_OUTPUT_TEXTURE_COORD18_EXT: u32 = 34735; -pub const GL_OUTPUT_TEXTURE_COORD19_EXT: u32 = 34736; -pub const GL_OUTPUT_TEXTURE_COORD20_EXT: u32 = 34737; -pub const GL_OUTPUT_TEXTURE_COORD21_EXT: u32 = 34738; -pub const GL_OUTPUT_TEXTURE_COORD22_EXT: u32 = 34739; -pub const GL_OUTPUT_TEXTURE_COORD23_EXT: u32 = 34740; -pub const GL_OUTPUT_TEXTURE_COORD24_EXT: u32 = 34741; -pub const GL_OUTPUT_TEXTURE_COORD25_EXT: u32 = 34742; -pub const GL_OUTPUT_TEXTURE_COORD26_EXT: u32 = 34743; -pub const GL_OUTPUT_TEXTURE_COORD27_EXT: u32 = 34744; -pub const GL_OUTPUT_TEXTURE_COORD28_EXT: u32 = 34745; -pub const GL_OUTPUT_TEXTURE_COORD29_EXT: u32 = 34746; -pub const GL_OUTPUT_TEXTURE_COORD30_EXT: u32 = 34747; -pub const GL_OUTPUT_TEXTURE_COORD31_EXT: u32 = 34748; -pub const GL_OUTPUT_FOG_EXT: u32 = 34749; -pub const GL_SCALAR_EXT: u32 = 34750; -pub const GL_VECTOR_EXT: u32 = 34751; -pub const GL_MATRIX_EXT: u32 = 34752; -pub const GL_VARIANT_EXT: u32 = 34753; -pub const GL_INVARIANT_EXT: u32 = 34754; -pub const GL_LOCAL_CONSTANT_EXT: u32 = 34755; -pub const GL_LOCAL_EXT: u32 = 34756; -pub const GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT: u32 = 34757; -pub const GL_MAX_VERTEX_SHADER_VARIANTS_EXT: u32 = 34758; -pub const GL_MAX_VERTEX_SHADER_INVARIANTS_EXT: u32 = 34759; -pub const GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT: u32 = 34760; -pub const GL_MAX_VERTEX_SHADER_LOCALS_EXT: u32 = 34761; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT: u32 = 34762; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT: u32 = 34763; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT: u32 = 34764; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT: u32 = 34765; -pub const GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT: u32 = 34766; -pub const GL_VERTEX_SHADER_INSTRUCTIONS_EXT: u32 = 34767; -pub const GL_VERTEX_SHADER_VARIANTS_EXT: u32 = 34768; -pub const GL_VERTEX_SHADER_INVARIANTS_EXT: u32 = 34769; -pub const GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT: u32 = 34770; -pub const GL_VERTEX_SHADER_LOCALS_EXT: u32 = 34771; -pub const GL_VERTEX_SHADER_OPTIMIZED_EXT: u32 = 34772; -pub const GL_X_EXT: u32 = 34773; -pub const GL_Y_EXT: u32 = 34774; -pub const GL_Z_EXT: u32 = 34775; -pub const GL_W_EXT: u32 = 34776; -pub const GL_NEGATIVE_X_EXT: u32 = 34777; -pub const GL_NEGATIVE_Y_EXT: u32 = 34778; -pub const GL_NEGATIVE_Z_EXT: u32 = 34779; -pub const GL_NEGATIVE_W_EXT: u32 = 34780; -pub const GL_ZERO_EXT: u32 = 34781; -pub const GL_ONE_EXT: u32 = 34782; -pub const GL_NEGATIVE_ONE_EXT: u32 = 34783; -pub const GL_NORMALIZED_RANGE_EXT: u32 = 34784; -pub const GL_FULL_RANGE_EXT: u32 = 34785; -pub const GL_CURRENT_VERTEX_EXT: u32 = 34786; -pub const GL_MVP_MATRIX_EXT: u32 = 34787; -pub const GL_VARIANT_VALUE_EXT: u32 = 34788; -pub const GL_VARIANT_DATATYPE_EXT: u32 = 34789; -pub const GL_VARIANT_ARRAY_STRIDE_EXT: u32 = 34790; -pub const GL_VARIANT_ARRAY_TYPE_EXT: u32 = 34791; -pub const GL_VARIANT_ARRAY_EXT: u32 = 34792; -pub const GL_VARIANT_ARRAY_POINTER_EXT: u32 = 34793; -pub const GL_INVARIANT_VALUE_EXT: u32 = 34794; -pub const GL_INVARIANT_DATATYPE_EXT: u32 = 34795; -pub const GL_LOCAL_CONSTANT_VALUE_EXT: u32 = 34796; -pub const GL_LOCAL_CONSTANT_DATATYPE_EXT: u32 = 34797; -pub const GL_AMD_debug_output: u32 = 1; -pub const GL_AMD_query_buffer_object: u32 = 1; -pub const GL_ARB_ES2_compatibility: u32 = 1; -pub const GL_ARB_ES3_compatibility: u32 = 1; -pub const GL_ARB_buffer_storage: u32 = 1; -pub const GL_ARB_compatibility: u32 = 1; -pub const GL_ARB_compressed_texture_pixel_storage: u32 = 1; -pub const GL_ARB_debug_output: u32 = 1; -pub const GL_ARB_depth_buffer_float: u32 = 1; -pub const GL_ARB_depth_clamp: u32 = 1; -pub const GL_ARB_depth_texture: u32 = 1; -pub const GL_ARB_draw_buffers: u32 = 1; -pub const GL_ARB_draw_buffers_blend: u32 = 1; -pub const GL_ARB_explicit_attrib_location: u32 = 1; -pub const GL_ARB_explicit_uniform_location: u32 = 1; -pub const GL_ARB_fragment_program: u32 = 1; -pub const GL_ARB_fragment_shader: u32 = 1; -pub const GL_ARB_framebuffer_object: u32 = 1; -pub const GL_ARB_framebuffer_sRGB: u32 = 1; -pub const GL_ARB_multisample: u32 = 1; -pub const GL_ARB_sample_locations: u32 = 1; -pub const GL_ARB_texture_compression: u32 = 1; -pub const GL_ARB_texture_float: u32 = 1; -pub const GL_ARB_texture_multisample: u32 = 1; -pub const GL_ARB_texture_non_power_of_two: u32 = 1; -pub const GL_ARB_texture_rg: u32 = 1; -pub const GL_ARB_texture_swizzle: u32 = 1; -pub const GL_ARB_uniform_buffer_object: u32 = 1; -pub const GL_ARB_vertex_array_object: u32 = 1; -pub const GL_ARB_vertex_attrib_binding: u32 = 1; -pub const GL_ARB_vertex_buffer_object: u32 = 1; -pub const GL_ARB_vertex_program: u32 = 1; -pub const GL_ARB_vertex_shader: u32 = 1; -pub const GL_ATI_element_array: u32 = 1; -pub const GL_ATI_fragment_shader: u32 = 1; -pub const GL_ATI_vertex_array_object: u32 = 1; -pub const GL_EXT_blend_color: u32 = 1; -pub const GL_EXT_blend_equation_separate: u32 = 1; -pub const GL_EXT_blend_func_separate: u32 = 1; -pub const GL_EXT_debug_marker: u32 = 1; -pub const GL_EXT_framebuffer_blit: u32 = 1; -pub const GL_EXT_framebuffer_multisample: u32 = 1; -pub const GL_EXT_framebuffer_multisample_blit_scaled: u32 = 1; -pub const GL_EXT_framebuffer_object: u32 = 1; -pub const GL_EXT_framebuffer_sRGB: u32 = 1; -pub const GL_EXT_index_array_formats: u32 = 1; -pub const GL_EXT_texture: u32 = 1; -pub const GL_EXT_texture_compression_s3tc: u32 = 1; -pub const GL_EXT_texture_sRGB: u32 = 1; -pub const GL_EXT_texture_swizzle: u32 = 1; -pub const GL_EXT_vertex_array: u32 = 1; -pub const GL_EXT_vertex_shader: u32 = 1; -pub const _CRT_INTERNAL_STDIO_SYMBOL_PREFIX: &'static [u8; 1usize] = b"\0"; -pub const _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION: u32 = 1; -pub const _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR: u32 = 2; -pub const _CRT_INTERNAL_PRINTF_LEGACY_WIDE_SPECIFIERS: u32 = 4; -pub const _CRT_INTERNAL_PRINTF_LEGACY_MSVCRT_COMPATIBILITY: u32 = 8; -pub const _CRT_INTERNAL_PRINTF_LEGACY_THREE_DIGIT_EXPONENTS: u32 = 16; -pub const _CRT_INTERNAL_SCANF_SECURECRT: u32 = 1; -pub const _CRT_INTERNAL_SCANF_LEGACY_WIDE_SPECIFIERS: u32 = 2; -pub const _CRT_INTERNAL_SCANF_LEGACY_MSVCRT_COMPATIBILITY: u32 = 4; -pub const BUFSIZ: u32 = 512; -pub const _NSTREAM_: u32 = 512; -pub const _IOB_ENTRIES: u32 = 3; -pub const EOF: i32 = -1; -pub const _IOFBF: u32 = 0; -pub const _IOLBF: u32 = 64; -pub const _IONBF: u32 = 4; -pub const L_tmpnam: u32 = 260; -pub const L_tmpnam_s: u32 = 260; -pub const SEEK_CUR: u32 = 1; -pub const SEEK_END: u32 = 2; -pub const SEEK_SET: u32 = 0; -pub const FILENAME_MAX: u32 = 260; -pub const FOPEN_MAX: u32 = 20; -pub const _SYS_OPEN: u32 = 20; -pub const TMP_MAX: u32 = 2147483647; -pub const TMP_MAX_S: u32 = 2147483647; -pub const _TMP_MAX_S: u32 = 2147483647; -pub const SYS_OPEN: u32 = 20; -pub const _GLAD_IS_SOME_NEW_VERSION: u32 = 1; -pub const GL_ETC1_RGB8_OES: u32 = 36196; -pub const GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG: u32 = 35840; -pub const GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: u32 = 35842; -pub const GL_COMPRESSED_RGBA_ASTC_4x4_KHR: u32 = 37808; -pub const GL_COMPRESSED_RGBA_ASTC_8x8_KHR: u32 = 37815; -pub const GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT: u32 = 34047; -pub const GL_TEXTURE_MAX_ANISOTROPY_EXT: u32 = 34046; -pub const DEFAULT_SHADER_ATTRIB_NAME_POSITION: &'static [u8; 15usize] = b"vertexPosition\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD: &'static [u8; 15usize] = b"vertexTexCoord\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_NORMAL: &'static [u8; 13usize] = b"vertexNormal\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_COLOR: &'static [u8; 12usize] = b"vertexColor\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_TANGENT: &'static [u8; 14usize] = b"vertexTangent\0"; -pub const DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2: &'static [u8; 16usize] = b"vertexTexCoord2\0"; -pub const RAYGUI_VERSION: &'static [u8; 8usize] = b"2.6-dev\0"; -pub const NUM_CONTROLS: u32 = 16; -pub const NUM_PROPS_DEFAULT: u32 = 16; -pub const NUM_PROPS_EXTENDED: u32 = 8; -pub const TEXTEDIT_CURSOR_BLINK_FRAMES: u32 = 20; -pub const RICON_MAX_ICONS: u32 = 256; -pub const RICON_SIZE: u32 = 16; -pub const RICON_MAX_NAME_LENGTH: u32 = 32; -pub const RICON_DATA_ELEMENTS: u32 = 8; -pub const WINDOW_STATUSBAR_HEIGHT: u32 = 22; -pub const GROUPBOX_LINE_THICK: u32 = 1; -pub const GROUPBOX_TEXT_PADDING: u32 = 10; -pub const LINE_TEXT_PADDING: u32 = 10; -pub const PANEL_BORDER_WIDTH: u32 = 1; -pub const TOGGLEGROUP_MAX_ELEMENTS: u32 = 32; -pub const VALUEBOX_MAX_CHARS: u32 = 32; -pub const COLORBARALPHA_CHECKED_SIZE: u32 = 10; -pub const MESSAGEBOX_BUTTON_HEIGHT: u32 = 24; -pub const MESSAGEBOX_BUTTON_PADDING: u32 = 10; -pub const TEXTINPUTBOX_BUTTON_HEIGHT: u32 = 24; -pub const TEXTINPUTBOX_BUTTON_PADDING: u32 = 10; -pub const TEXTINPUTBOX_HEIGHT: u32 = 30; -pub const TEXTINPUTBOX_MAX_TEXT_LENGTH: u32 = 256; -pub const GRID_COLOR_ALPHA: f64 = 0.15; -pub const ICON_TEXT_PADDING: u32 = 4; -pub const TEXTSPLIT_MAX_TEXT_LENGTH: u32 = 1024; -pub const TEXTSPLIT_MAX_TEXT_ELEMENTS: u32 = 128; -pub type va_list = __builtin_va_list; -pub type __gnuc_va_list = __builtin_va_list; - -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector2 { - pub x: f32, - pub y: f32, -} -#[test] -fn bindgen_test_layout_Vector2() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(Vector2)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector2), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector2), - "::", - stringify!(y) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector3 { - pub x: f32, - pub y: f32, - pub z: f32, -} -#[test] -fn bindgen_test_layout_Vector3() { - assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!("Size of: ", stringify!(Vector3)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector3)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).z as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Vector3), - "::", - stringify!(z) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Vector4 { - pub x: f32, - pub y: f32, - pub z: f32, - pub w: f32, -} -#[test] -fn bindgen_test_layout_Vector4() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Vector4)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Vector4)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).z as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(z) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).w as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Vector4), - "::", - stringify!(w) - ) - ); -} -pub type Quaternion = Vector4; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Matrix { - pub m0: f32, - pub m4: f32, - pub m8: f32, - pub m12: f32, - pub m1: f32, - pub m5: f32, - pub m9: f32, - pub m13: f32, - pub m2: f32, - pub m6: f32, - pub m10: f32, - pub m14: f32, - pub m3: f32, - pub m7: f32, - pub m11: f32, - pub m15: f32, -} -#[test] -fn bindgen_test_layout_Matrix() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(Matrix)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Matrix)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m0 as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m0) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m4 as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m4) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m8 as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m8) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m12 as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m12) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m1 as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m1) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m5 as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m5) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m9 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m9) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m13 as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m13) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m2 as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m6 as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m6) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m10 as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m10) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m14 as *const _ as usize }, - 44usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m14) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m3 as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m3) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m7 as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m7) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m11 as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m11) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).m15 as *const _ as usize }, - 60usize, - concat!( - "Offset of field: ", - stringify!(Matrix), - "::", - stringify!(m15) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Color { - pub r: ::std::os::raw::c_uchar, - pub g: ::std::os::raw::c_uchar, - pub b: ::std::os::raw::c_uchar, - pub a: ::std::os::raw::c_uchar, -} -#[test] -fn bindgen_test_layout_Color() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(Color)) - ); - assert_eq!( - ::std::mem::align_of::(), - 1usize, - concat!("Alignment of ", stringify!(Color)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).r as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(r)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).g as *const _ as usize }, - 1usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(g)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).b as *const _ as usize }, - 2usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(b)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).a as *const _ as usize }, - 3usize, - concat!("Offset of field: ", stringify!(Color), "::", stringify!(a)) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Rectangle { - pub x: f32, - pub y: f32, - pub width: f32, - pub height: f32, -} -#[test] -fn bindgen_test_layout_Rectangle() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Rectangle)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Rectangle)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).y as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(y) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Rectangle), - "::", - stringify!(height) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Image { - pub data: *mut ::std::os::raw::c_void, - pub width: ::std::os::raw::c_int, - pub height: ::std::os::raw::c_int, - pub mipmaps: ::std::os::raw::c_int, - pub format: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Image() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Image)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Image)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).data as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(data) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(height) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mipmaps as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(mipmaps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).format as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Image), - "::", - stringify!(format) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Texture { - pub id: ::std::os::raw::c_uint, - pub width: ::std::os::raw::c_int, - pub height: ::std::os::raw::c_int, - pub mipmaps: ::std::os::raw::c_int, - pub format: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Texture() { - assert_eq!( - ::std::mem::size_of::(), - 20usize, - concat!("Size of: ", stringify!(Texture)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Texture)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).width as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(width) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).height as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(height) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mipmaps as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(mipmaps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).format as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Texture), - "::", - stringify!(format) - ) - ); -} -pub type Texture2D = Texture; -pub type TextureCubemap = Texture; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RenderTexture { - pub id: ::std::os::raw::c_uint, - pub texture: Texture, - pub depth: Texture, -} -#[test] -fn bindgen_test_layout_RenderTexture() { - assert_eq!( - ::std::mem::size_of::(), - 44usize, - concat!("Size of: ", stringify!(RenderTexture)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(RenderTexture)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).depth as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(RenderTexture), - "::", - stringify!(depth) - ) - ); -} -pub type RenderTexture2D = RenderTexture; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct NPatchInfo { - pub source: Rectangle, - pub left: ::std::os::raw::c_int, - pub top: ::std::os::raw::c_int, - pub right: ::std::os::raw::c_int, - pub bottom: ::std::os::raw::c_int, - pub layout: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_NPatchInfo() { - assert_eq!( - ::std::mem::size_of::(), - 36usize, - concat!("Size of: ", stringify!(NPatchInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(NPatchInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).source as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(source) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).left as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(left) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).top as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(top) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).right as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(right) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bottom as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(bottom) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).layout as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(NPatchInfo), - "::", - stringify!(layout) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct CharInfo { - pub value: ::std::os::raw::c_int, - pub offsetX: ::std::os::raw::c_int, - pub offsetY: ::std::os::raw::c_int, - pub advanceX: ::std::os::raw::c_int, - pub image: Image, -} -#[test] -fn bindgen_test_layout_CharInfo() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(CharInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(CharInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).value as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(value) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offsetX as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(offsetX) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offsetY as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(offsetY) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).advanceX as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(advanceX) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).image as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(CharInfo), - "::", - stringify!(image) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Font { - pub baseSize: ::std::os::raw::c_int, - pub charsCount: ::std::os::raw::c_int, - pub charsPadding: ::std::os::raw::c_int, - pub texture: Texture2D, - pub recs: *mut Rectangle, - pub chars: *mut CharInfo, -} -#[test] -fn bindgen_test_layout_Font() { - assert_eq!( - ::std::mem::size_of::(), - 48usize, - concat!("Size of: ", stringify!(Font)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Font)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).baseSize as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(baseSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).charsCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(charsCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).charsPadding as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(charsPadding) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).recs as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(recs) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).chars as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Font), - "::", - stringify!(chars) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Camera3D { - pub position: Vector3, - pub target: Vector3, - pub up: Vector3, - pub fovy: f32, - pub projection: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Camera3D() { - assert_eq!( - ::std::mem::size_of::(), - 44usize, - concat!("Size of: ", stringify!(Camera3D)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Camera3D)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).target as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).up as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(up) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).fovy as *const _ as usize }, - 36usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(fovy) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).projection as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Camera3D), - "::", - stringify!(projection) - ) - ); -} -pub type Camera = Camera3D; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Camera2D { - pub offset: Vector2, - pub target: Vector2, - pub rotation: f32, - pub zoom: f32, -} -#[test] -fn bindgen_test_layout_Camera2D() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Camera2D)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Camera2D)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).offset as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).target as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(target) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rotation as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(rotation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).zoom as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(Camera2D), - "::", - stringify!(zoom) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Mesh { - pub vertexCount: ::std::os::raw::c_int, - pub triangleCount: ::std::os::raw::c_int, - pub vertices: *mut f32, - pub texcoords: *mut f32, - pub texcoords2: *mut f32, - pub normals: *mut f32, - pub tangents: *mut f32, - pub colors: *mut ::std::os::raw::c_uchar, - pub indices: *mut ::std::os::raw::c_ushort, - pub animVertices: *mut f32, - pub animNormals: *mut f32, - pub boneIds: *mut ::std::os::raw::c_int, - pub boneWeights: *mut f32, - pub vaoId: ::std::os::raw::c_uint, - pub vboId: *mut ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_Mesh() { - assert_eq!( - ::std::mem::size_of::(), - 112usize, - concat!("Size of: ", stringify!(Mesh)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Mesh)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vertexCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).triangleCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(triangleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertices as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(texcoords) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords2 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(texcoords2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).normals as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(normals) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).tangents as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(tangents) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).colors as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(colors) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).indices as *const _ as usize }, - 56usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(indices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).animVertices as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(animVertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).animNormals as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(animNormals) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneIds as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(boneIds) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneWeights as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(boneWeights) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vaoId as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vaoId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vboId as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(Mesh), - "::", - stringify!(vboId) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Shader { - pub id: ::std::os::raw::c_uint, - pub locs: *mut ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_Shader() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(Shader)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Shader)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Shader), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).locs as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Shader), - "::", - stringify!(locs) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct MaterialMap { - pub texture: Texture2D, - pub color: Color, - pub value: f32, -} -#[test] -fn bindgen_test_layout_MaterialMap() { - assert_eq!( - ::std::mem::size_of::(), - 28usize, - concat!("Size of: ", stringify!(MaterialMap)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(MaterialMap)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texture as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(texture) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).color as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(color) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).value as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(MaterialMap), - "::", - stringify!(value) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Material { - pub shader: Shader, - pub maps: *mut MaterialMap, - pub params: [f32; 4usize], -} -#[test] -fn bindgen_test_layout_Material() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(Material)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Material)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).shader as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(shader) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).maps as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(maps) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).params as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Material), - "::", - stringify!(params) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Transform { - pub translation: Vector3, - pub rotation: Quaternion, - pub scale: Vector3, -} -#[test] -fn bindgen_test_layout_Transform() { - assert_eq!( - ::std::mem::size_of::(), - 40usize, - concat!("Size of: ", stringify!(Transform)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Transform)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).translation as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(translation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rotation as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(rotation) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scale as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Transform), - "::", - stringify!(scale) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct BoneInfo { - pub name: [::std::os::raw::c_char; 32usize], - pub parent: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_BoneInfo() { - assert_eq!( - ::std::mem::size_of::(), - 36usize, - concat!("Size of: ", stringify!(BoneInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(BoneInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).name as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(BoneInfo), - "::", - stringify!(name) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).parent as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(BoneInfo), - "::", - stringify!(parent) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Model { - pub transform: Matrix, - pub meshCount: ::std::os::raw::c_int, - pub materialCount: ::std::os::raw::c_int, - pub meshes: *mut Mesh, - pub materials: *mut Material, - pub meshMaterial: *mut ::std::os::raw::c_int, - pub boneCount: ::std::os::raw::c_int, - pub bones: *mut BoneInfo, - pub bindPose: *mut Transform, -} -#[test] -fn bindgen_test_layout_Model() { - assert_eq!( - ::std::mem::size_of::(), - 120usize, - concat!("Size of: ", stringify!(Model)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Model)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).transform as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(transform) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshCount as *const _ as usize }, - 64usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).materialCount as *const _ as usize }, - 68usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(materialCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshes as *const _ as usize }, - 72usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshes) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).materials as *const _ as usize }, - 80usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(materials) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).meshMaterial as *const _ as usize }, - 88usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(meshMaterial) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneCount as *const _ as usize }, - 96usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(boneCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bones as *const _ as usize }, - 104usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(bones) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bindPose as *const _ as usize }, - 112usize, - concat!( - "Offset of field: ", - stringify!(Model), - "::", - stringify!(bindPose) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct ModelAnimation { - pub boneCount: ::std::os::raw::c_int, - pub frameCount: ::std::os::raw::c_int, - pub bones: *mut BoneInfo, - pub framePoses: *mut *mut Transform, -} -#[test] -fn bindgen_test_layout_ModelAnimation() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(ModelAnimation)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(ModelAnimation)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).boneCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(boneCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).frameCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(frameCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).bones as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(bones) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).framePoses as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(ModelAnimation), - "::", - stringify!(framePoses) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Ray { - pub position: Vector3, - pub direction: Vector3, -} -#[test] -fn bindgen_test_layout_Ray() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Ray)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(Ray)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Ray), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).direction as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Ray), - "::", - stringify!(direction) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RayHitInfo { - pub hit: bool, - pub distance: f32, - pub position: Vector3, - pub normal: Vector3, -} -#[test] -fn bindgen_test_layout_RayHitInfo() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(RayHitInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(RayHitInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hit as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(hit) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).distance as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(distance) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).position as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(position) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).normal as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(RayHitInfo), - "::", - stringify!(normal) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct BoundingBox { - pub min: Vector3, - pub max: Vector3, -} -#[test] -fn bindgen_test_layout_BoundingBox() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(BoundingBox)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(BoundingBox)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).min as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(BoundingBox), - "::", - stringify!(min) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).max as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(BoundingBox), - "::", - stringify!(max) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Wave { - pub sampleCount: ::std::os::raw::c_uint, - pub sampleRate: ::std::os::raw::c_uint, - pub sampleSize: ::std::os::raw::c_uint, - pub channels: ::std::os::raw::c_uint, - pub data: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout_Wave() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(Wave)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Wave)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleRate as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleRate) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleSize as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(sampleSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).channels as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(channels) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).data as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(Wave), - "::", - stringify!(data) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rAudioBuffer { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct AudioStream { - pub buffer: *mut rAudioBuffer, - pub sampleRate: ::std::os::raw::c_uint, - pub sampleSize: ::std::os::raw::c_uint, - pub channels: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_AudioStream() { - assert_eq!( - ::std::mem::size_of::(), - 24usize, - concat!("Size of: ", stringify!(AudioStream)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(AudioStream)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).buffer as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(buffer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleRate as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(sampleRate) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleSize as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(sampleSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).channels as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(AudioStream), - "::", - stringify!(channels) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Sound { - pub stream: AudioStream, - pub sampleCount: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_Sound() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(Sound)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Sound)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stream as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Sound), - "::", - stringify!(stream) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Sound), - "::", - stringify!(sampleCount) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Music { - pub stream: AudioStream, - pub sampleCount: ::std::os::raw::c_uint, - pub looping: bool, - pub ctxType: ::std::os::raw::c_int, - pub ctxData: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout_Music() { - assert_eq!( - ::std::mem::size_of::(), - 48usize, - concat!("Size of: ", stringify!(Music)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(Music)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stream as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(stream) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sampleCount as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(sampleCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).looping as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(looping) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ctxType as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(ctxType) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ctxData as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(Music), - "::", - stringify!(ctxData) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VrDeviceInfo { - pub hResolution: ::std::os::raw::c_int, - pub vResolution: ::std::os::raw::c_int, - pub hScreenSize: f32, - pub vScreenSize: f32, - pub vScreenCenter: f32, - pub eyeToScreenDistance: f32, - pub lensSeparationDistance: f32, - pub interpupillaryDistance: f32, - pub lensDistortionValues: [f32; 4usize], - pub chromaAbCorrection: [f32; 4usize], -} -#[test] -fn bindgen_test_layout_VrDeviceInfo() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(VrDeviceInfo)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(VrDeviceInfo)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hResolution as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(hResolution) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vResolution as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vResolution) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hScreenSize as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(hScreenSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vScreenSize as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vScreenSize) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vScreenCenter as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(vScreenCenter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).eyeToScreenDistance as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(eyeToScreenDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).lensSeparationDistance as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(lensSeparationDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).interpupillaryDistance as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(interpupillaryDistance) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).lensDistortionValues as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(lensDistortionValues) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).chromaAbCorrection as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(VrDeviceInfo), - "::", - stringify!(chromaAbCorrection) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VrStereoConfig { - pub projection: [Matrix; 2usize], - pub viewOffset: [Matrix; 2usize], - pub leftLensCenter: [f32; 2usize], - pub rightLensCenter: [f32; 2usize], - pub leftScreenCenter: [f32; 2usize], - pub rightScreenCenter: [f32; 2usize], - pub scale: [f32; 2usize], - pub scaleIn: [f32; 2usize], -} -#[test] -fn bindgen_test_layout_VrStereoConfig() { - assert_eq!( - ::std::mem::size_of::(), - 304usize, - concat!("Size of: ", stringify!(VrStereoConfig)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(VrStereoConfig)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).projection as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(projection) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).viewOffset as *const _ as usize }, - 128usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(viewOffset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).leftLensCenter as *const _ as usize }, - 256usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(leftLensCenter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).rightLensCenter as *const _ as usize }, - 264usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(rightLensCenter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).leftScreenCenter as *const _ as usize }, - 272usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(leftScreenCenter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).rightScreenCenter as *const _ as usize - }, - 280usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(rightScreenCenter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scale as *const _ as usize }, - 288usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(scale) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).scaleIn as *const _ as usize }, - 296usize, - concat!( - "Offset of field: ", - stringify!(VrStereoConfig), - "::", - stringify!(scaleIn) - ) - ); -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum ConfigFlags { - FLAG_VSYNC_HINT = 64, - FLAG_FULLSCREEN_MODE = 2, - FLAG_WINDOW_RESIZABLE = 4, - FLAG_WINDOW_UNDECORATED = 8, - FLAG_WINDOW_HIDDEN = 128, - FLAG_WINDOW_MINIMIZED = 512, - FLAG_WINDOW_MAXIMIZED = 1024, - FLAG_WINDOW_UNFOCUSED = 2048, - FLAG_WINDOW_TOPMOST = 4096, - FLAG_WINDOW_ALWAYS_RUN = 256, - FLAG_WINDOW_TRANSPARENT = 16, - FLAG_WINDOW_HIGHDPI = 8192, - FLAG_MSAA_4X_HINT = 32, - FLAG_INTERLACED_HINT = 65536, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum TraceLogLevel { - LOG_ALL = 0, - LOG_TRACE = 1, - LOG_DEBUG = 2, - LOG_INFO = 3, - LOG_WARNING = 4, - LOG_ERROR = 5, - LOG_FATAL = 6, - LOG_NONE = 7, -} -impl KeyboardKey { - pub const KEY_MENU: KeyboardKey = KeyboardKey::KEY_R; -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum KeyboardKey { - KEY_NULL = 0, - KEY_APOSTROPHE = 39, - KEY_COMMA = 44, - KEY_MINUS = 45, - KEY_PERIOD = 46, - KEY_SLASH = 47, - KEY_ZERO = 48, - KEY_ONE = 49, - KEY_TWO = 50, - KEY_THREE = 51, - KEY_FOUR = 52, - KEY_FIVE = 53, - KEY_SIX = 54, - KEY_SEVEN = 55, - KEY_EIGHT = 56, - KEY_NINE = 57, - KEY_SEMICOLON = 59, - KEY_EQUAL = 61, - KEY_A = 65, - KEY_B = 66, - KEY_C = 67, - KEY_D = 68, - KEY_E = 69, - KEY_F = 70, - KEY_G = 71, - KEY_H = 72, - KEY_I = 73, - KEY_J = 74, - KEY_K = 75, - KEY_L = 76, - KEY_M = 77, - KEY_N = 78, - KEY_O = 79, - KEY_P = 80, - KEY_Q = 81, - KEY_R = 82, - KEY_S = 83, - KEY_T = 84, - KEY_U = 85, - KEY_V = 86, - KEY_W = 87, - KEY_X = 88, - KEY_Y = 89, - KEY_Z = 90, - KEY_SPACE = 32, - KEY_ESCAPE = 256, - KEY_ENTER = 257, - KEY_TAB = 258, - KEY_BACKSPACE = 259, - KEY_INSERT = 260, - KEY_DELETE = 261, - KEY_RIGHT = 262, - KEY_LEFT = 263, - KEY_DOWN = 264, - KEY_UP = 265, - KEY_PAGE_UP = 266, - KEY_PAGE_DOWN = 267, - KEY_HOME = 268, - KEY_END = 269, - KEY_CAPS_LOCK = 280, - KEY_SCROLL_LOCK = 281, - KEY_NUM_LOCK = 282, - KEY_PRINT_SCREEN = 283, - KEY_PAUSE = 284, - KEY_F1 = 290, - KEY_F2 = 291, - KEY_F3 = 292, - KEY_F4 = 293, - KEY_F5 = 294, - KEY_F6 = 295, - KEY_F7 = 296, - KEY_F8 = 297, - KEY_F9 = 298, - KEY_F10 = 299, - KEY_F11 = 300, - KEY_F12 = 301, - KEY_LEFT_SHIFT = 340, - KEY_LEFT_CONTROL = 341, - KEY_LEFT_ALT = 342, - KEY_LEFT_SUPER = 343, - KEY_RIGHT_SHIFT = 344, - KEY_RIGHT_CONTROL = 345, - KEY_RIGHT_ALT = 346, - KEY_RIGHT_SUPER = 347, - KEY_KB_MENU = 348, - KEY_LEFT_BRACKET = 91, - KEY_BACKSLASH = 92, - KEY_RIGHT_BRACKET = 93, - KEY_GRAVE = 96, - KEY_KP_0 = 320, - KEY_KP_1 = 321, - KEY_KP_2 = 322, - KEY_KP_3 = 323, - KEY_KP_4 = 324, - KEY_KP_5 = 325, - KEY_KP_6 = 326, - KEY_KP_7 = 327, - KEY_KP_8 = 328, - KEY_KP_9 = 329, - KEY_KP_DECIMAL = 330, - KEY_KP_DIVIDE = 331, - KEY_KP_MULTIPLY = 332, - KEY_KP_SUBTRACT = 333, - KEY_KP_ADD = 334, - KEY_KP_ENTER = 335, - KEY_KP_EQUAL = 336, - KEY_BACK = 4, - KEY_VOLUME_UP = 24, - KEY_VOLUME_DOWN = 25, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum MouseButton { - MOUSE_LEFT_BUTTON = 0, - MOUSE_RIGHT_BUTTON = 1, - MOUSE_MIDDLE_BUTTON = 2, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum MouseCursor { - MOUSE_CURSOR_DEFAULT = 0, - MOUSE_CURSOR_ARROW = 1, - MOUSE_CURSOR_IBEAM = 2, - MOUSE_CURSOR_CROSSHAIR = 3, - MOUSE_CURSOR_POINTING_HAND = 4, - MOUSE_CURSOR_RESIZE_EW = 5, - MOUSE_CURSOR_RESIZE_NS = 6, - MOUSE_CURSOR_RESIZE_NWSE = 7, - MOUSE_CURSOR_RESIZE_NESW = 8, - MOUSE_CURSOR_RESIZE_ALL = 9, - MOUSE_CURSOR_NOT_ALLOWED = 10, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GamepadButton { - GAMEPAD_BUTTON_UNKNOWN = 0, - GAMEPAD_BUTTON_LEFT_FACE_UP = 1, - GAMEPAD_BUTTON_LEFT_FACE_RIGHT = 2, - GAMEPAD_BUTTON_LEFT_FACE_DOWN = 3, - GAMEPAD_BUTTON_LEFT_FACE_LEFT = 4, - GAMEPAD_BUTTON_RIGHT_FACE_UP = 5, - GAMEPAD_BUTTON_RIGHT_FACE_RIGHT = 6, - GAMEPAD_BUTTON_RIGHT_FACE_DOWN = 7, - GAMEPAD_BUTTON_RIGHT_FACE_LEFT = 8, - GAMEPAD_BUTTON_LEFT_TRIGGER_1 = 9, - GAMEPAD_BUTTON_LEFT_TRIGGER_2 = 10, - GAMEPAD_BUTTON_RIGHT_TRIGGER_1 = 11, - GAMEPAD_BUTTON_RIGHT_TRIGGER_2 = 12, - GAMEPAD_BUTTON_MIDDLE_LEFT = 13, - GAMEPAD_BUTTON_MIDDLE = 14, - GAMEPAD_BUTTON_MIDDLE_RIGHT = 15, - GAMEPAD_BUTTON_LEFT_THUMB = 16, - GAMEPAD_BUTTON_RIGHT_THUMB = 17, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GamepadAxis { - GAMEPAD_AXIS_LEFT_X = 0, - GAMEPAD_AXIS_LEFT_Y = 1, - GAMEPAD_AXIS_RIGHT_X = 2, - GAMEPAD_AXIS_RIGHT_Y = 3, - GAMEPAD_AXIS_LEFT_TRIGGER = 4, - GAMEPAD_AXIS_RIGHT_TRIGGER = 5, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum MaterialMapIndex { - MATERIAL_MAP_ALBEDO = 0, - MATERIAL_MAP_METALNESS = 1, - MATERIAL_MAP_NORMAL = 2, - MATERIAL_MAP_ROUGHNESS = 3, - MATERIAL_MAP_OCCLUSION = 4, - MATERIAL_MAP_EMISSION = 5, - MATERIAL_MAP_HEIGHT = 6, - MATERIAL_MAP_BRDG = 7, - MATERIAL_MAP_CUBEMAP = 8, - MATERIAL_MAP_IRRADIANCE = 9, - MATERIAL_MAP_PREFILTER = 10, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum ShaderLocationIndex { - SHADER_LOC_VERTEX_POSITION = 0, - SHADER_LOC_VERTEX_TEXCOORD01 = 1, - SHADER_LOC_VERTEX_TEXCOORD02 = 2, - SHADER_LOC_VERTEX_NORMAL = 3, - SHADER_LOC_VERTEX_TANGENT = 4, - SHADER_LOC_VERTEX_COLOR = 5, - SHADER_LOC_MATRIX_MVP = 6, - SHADER_LOC_MATRIX_VIEW = 7, - SHADER_LOC_MATRIX_PROJECTION = 8, - SHADER_LOC_MATRIX_MODEL = 9, - SHADER_LOC_MATRIX_NORMAL = 10, - SHADER_LOC_VECTOR_VIEW = 11, - SHADER_LOC_COLOR_DIFFUSE = 12, - SHADER_LOC_COLOR_SPECULAR = 13, - SHADER_LOC_COLOR_AMBIENT = 14, - SHADER_LOC_MAP_ALBEDO = 15, - SHADER_LOC_MAP_METALNESS = 16, - SHADER_LOC_MAP_NORMAL = 17, - SHADER_LOC_MAP_ROUGHNESS = 18, - SHADER_LOC_MAP_OCCLUSION = 19, - SHADER_LOC_MAP_EMISSION = 20, - SHADER_LOC_MAP_HEIGHT = 21, - SHADER_LOC_MAP_CUBEMAP = 22, - SHADER_LOC_MAP_IRRADIANCE = 23, - SHADER_LOC_MAP_PREFILTER = 24, - SHADER_LOC_MAP_BRDF = 25, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum ShaderUniformDataType { - SHADER_UNIFORM_FLOAT = 0, - SHADER_UNIFORM_VEC2 = 1, - SHADER_UNIFORM_VEC3 = 2, - SHADER_UNIFORM_VEC4 = 3, - SHADER_UNIFORM_INT = 4, - SHADER_UNIFORM_IVEC2 = 5, - SHADER_UNIFORM_IVEC3 = 6, - SHADER_UNIFORM_IVEC4 = 7, - SHADER_UNIFORM_SAMPLER2D = 8, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum PixelFormat { - PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, - PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA = 2, - PIXELFORMAT_UNCOMPRESSED_R5G6B5 = 3, - PIXELFORMAT_UNCOMPRESSED_R8G8B8 = 4, - PIXELFORMAT_UNCOMPRESSED_R5G5B5A1 = 5, - PIXELFORMAT_UNCOMPRESSED_R4G4B4A4 = 6, - PIXELFORMAT_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8 = 7, - PIXELFORMAT_UNCOMPRESSED_R32 = 8, - PIXELFORMAT_UNCOMPRESSED_R32G32B32 = 9, - PIXELFORMAT_UNCOMPRESSED_R32G32B32A32 = 10, - PIXELFORMAT_COMPRESSED_DXT1_RGB = 11, - PIXELFORMAT_COMPRESSED_DXT1_RGBA = 12, - PIXELFORMAT_COMPRESSED_DXT3_RGBA = 13, - PIXELFORMAT_COMPRESSED_DXT5_RGBA = 14, - PIXELFORMAT_COMPRESSED_ETC1_RGB = 15, - PIXELFORMAT_COMPRESSED_ETC2_RGB = 16, - PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA = 17, - PIXELFORMAT_COMPRESSED_PVRT_RGB = 18, - PIXELFORMAT_COMPRESSED_PVRT_RGBA = 19, - PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA = 20, - PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA = 21, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum TextureFilter { - TEXTURE_FILTER_POINT = 0, - TEXTURE_FILTER_BILINEAR = 1, - TEXTURE_FILTER_TRILINEAR = 2, - TEXTURE_FILTER_ANISOTROPIC_4X = 3, - TEXTURE_FILTER_ANISOTROPIC_8X = 4, - TEXTURE_FILTER_ANISOTROPIC_16X = 5, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum TextureWrap { - TEXTURE_WRAP_REPEAT = 0, - TEXTURE_WRAP_CLAMP = 1, - TEXTURE_WRAP_MIRROR_REPEAT = 2, - TEXTURE_WRAP_MIRROR_CLAMP = 3, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum CubemapLayout { - CUBEMAP_LAYOUT_AUTO_DETECT = 0, - CUBEMAP_LAYOUT_LINE_VERTICAL = 1, - CUBEMAP_LAYOUT_LINE_HORIZONTAL = 2, - CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR = 3, - CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE = 4, - CUBEMAP_LAYOUT_PANORAMA = 5, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum FontType { - FONT_DEFAULT = 0, - FONT_BITMAP = 1, - FONT_SDF = 2, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum BlendMode { - BLEND_ALPHA = 0, - BLEND_ADDITIVE = 1, - BLEND_MULTIPLIED = 2, - BLEND_ADD_COLORS = 3, - BLEND_SUBTRACT_COLORS = 4, - BLEND_CUSTOM = 5, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum Gestures { - GESTURE_NONE = 0, - GESTURE_TAP = 1, - GESTURE_DOUBLETAP = 2, - GESTURE_HOLD = 4, - GESTURE_DRAG = 8, - GESTURE_SWIPE_RIGHT = 16, - GESTURE_SWIPE_LEFT = 32, - GESTURE_SWIPE_UP = 64, - GESTURE_SWIPE_DOWN = 128, - GESTURE_PINCH_IN = 256, - GESTURE_PINCH_OUT = 512, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum CameraMode { - CAMERA_CUSTOM = 0, - CAMERA_FREE = 1, - CAMERA_ORBITAL = 2, - CAMERA_FIRST_PERSON = 3, - CAMERA_THIRD_PERSON = 4, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum CameraProjection { - CAMERA_PERSPECTIVE = 0, - CAMERA_ORTHOGRAPHIC = 1, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum NPatchLayout { - NPATCH_NINE_PATCH = 0, - NPATCH_THREE_PATCH_VERTICAL = 1, - NPATCH_THREE_PATCH_HORIZONTAL = 2, -} -pub type TraceLogCallback = ::std::option::Option< - unsafe extern "C" fn( - logLevel: ::std::os::raw::c_int, - text: *const ::std::os::raw::c_char, - args: va_list, - ), ->; -pub type LoadFileDataCallback = ::std::option::Option< - unsafe extern "C" fn( - fileName: *const ::std::os::raw::c_char, - bytesRead: *mut ::std::os::raw::c_uint, - ) -> *mut ::std::os::raw::c_uchar, ->; -pub type SaveFileDataCallback = ::std::option::Option< - unsafe extern "C" fn( - fileName: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_void, - bytesToWrite: ::std::os::raw::c_uint, - ) -> bool, ->; -pub type LoadFileTextCallback = ::std::option::Option< - unsafe extern "C" fn(fileName: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char, ->; -pub type SaveFileTextCallback = ::std::option::Option< - unsafe extern "C" fn( - fileName: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> bool, ->; -extern "C" { - pub fn InitWindow( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - title: *const ::std::os::raw::c_char, - ); -} -extern "C" { - pub fn WindowShouldClose() -> bool; -} -extern "C" { - pub fn CloseWindow(); -} -extern "C" { - pub fn IsWindowReady() -> bool; -} -extern "C" { - pub fn IsWindowFullscreen() -> bool; -} -extern "C" { - pub fn IsWindowHidden() -> bool; -} -extern "C" { - pub fn IsWindowMinimized() -> bool; -} -extern "C" { - pub fn IsWindowMaximized() -> bool; -} -extern "C" { - pub fn IsWindowFocused() -> bool; -} -extern "C" { - pub fn IsWindowResized() -> bool; -} -extern "C" { - pub fn IsWindowState(flag: ::std::os::raw::c_uint) -> bool; -} -extern "C" { - pub fn SetWindowState(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn ClearWindowState(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn ToggleFullscreen(); -} -extern "C" { - pub fn MaximizeWindow(); -} -extern "C" { - pub fn MinimizeWindow(); -} -extern "C" { - pub fn RestoreWindow(); -} -extern "C" { - pub fn SetWindowIcon(image: Image); -} -extern "C" { - pub fn SetWindowTitle(title: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn SetWindowPosition(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowMonitor(monitor: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowMinSize(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetWindowSize(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetWindowHandle() -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn GetScreenWidth() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetScreenHeight() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorCount() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCurrentMonitor() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPosition(monitor: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn GetMonitorWidth(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorHeight(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPhysicalWidth(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorPhysicalHeight(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMonitorRefreshRate(monitor: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetWindowPosition() -> Vector2; -} -extern "C" { - pub fn GetWindowScaleDPI() -> Vector2; -} -extern "C" { - pub fn GetMonitorName(monitor: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn SetClipboardText(text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GetClipboardText() -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn ShowCursor(); -} -extern "C" { - pub fn HideCursor(); -} -extern "C" { - pub fn IsCursorHidden() -> bool; -} -extern "C" { - pub fn EnableCursor(); -} -extern "C" { - pub fn DisableCursor(); -} -extern "C" { - pub fn IsCursorOnScreen() -> bool; -} -extern "C" { - pub fn ClearBackground(color: Color); -} -extern "C" { - pub fn BeginDrawing(); -} -extern "C" { - pub fn EndDrawing(); -} -extern "C" { - pub fn BeginMode2D(camera: Camera2D); -} -extern "C" { - pub fn EndMode2D(); -} -extern "C" { - pub fn BeginMode3D(camera: Camera3D); -} -extern "C" { - pub fn EndMode3D(); -} -extern "C" { - pub fn BeginTextureMode(target: RenderTexture2D); -} -extern "C" { - pub fn EndTextureMode(); -} -extern "C" { - pub fn BeginShaderMode(shader: Shader); -} -extern "C" { - pub fn EndShaderMode(); -} -extern "C" { - pub fn BeginBlendMode(mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn EndBlendMode(); -} -extern "C" { - pub fn BeginScissorMode( - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn EndScissorMode(); -} -extern "C" { - pub fn BeginVrStereoMode(config: VrStereoConfig); -} -extern "C" { - pub fn EndVrStereoMode(); -} -extern "C" { - pub fn LoadVrStereoConfig(device: VrDeviceInfo) -> VrStereoConfig; -} -extern "C" { - pub fn UnloadVrStereoConfig(config: VrStereoConfig); -} -extern "C" { - pub fn LoadShader( - vsFileName: *const ::std::os::raw::c_char, - fsFileName: *const ::std::os::raw::c_char, - ) -> Shader; -} -extern "C" { - pub fn LoadShaderFromMemory( - vsCode: *const ::std::os::raw::c_char, - fsCode: *const ::std::os::raw::c_char, - ) -> Shader; -} -extern "C" { - pub fn GetShaderLocation( - shader: Shader, - uniformName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetShaderLocationAttrib( - shader: Shader, - attribName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn SetShaderValue( - shader: Shader, - locIndex: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - uniformType: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShaderValueV( - shader: Shader, - locIndex: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - uniformType: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShaderValueMatrix(shader: Shader, locIndex: ::std::os::raw::c_int, mat: Matrix); -} -extern "C" { - pub fn SetShaderValueTexture( - shader: Shader, - locIndex: ::std::os::raw::c_int, - texture: Texture2D, - ); -} -extern "C" { - pub fn UnloadShader(shader: Shader); -} -extern "C" { - pub fn GetMouseRay(mousePosition: Vector2, camera: Camera) -> Ray; -} -extern "C" { - pub fn GetCameraMatrix(camera: Camera) -> Matrix; -} -extern "C" { - pub fn GetCameraMatrix2D(camera: Camera2D) -> Matrix; -} -extern "C" { - pub fn GetWorldToScreen(position: Vector3, camera: Camera) -> Vector2; -} -extern "C" { - pub fn GetWorldToScreenEx( - position: Vector3, - camera: Camera, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> Vector2; -} -extern "C" { - pub fn GetWorldToScreen2D(position: Vector2, camera: Camera2D) -> Vector2; -} -extern "C" { - pub fn GetScreenToWorld2D(position: Vector2, camera: Camera2D) -> Vector2; -} -extern "C" { - pub fn SetTargetFPS(fps: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetFPS() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetFrameTime() -> f32; -} -extern "C" { - pub fn GetTime() -> f64; -} -extern "C" { - pub fn GetRandomValue( - min: ::std::os::raw::c_int, - max: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TakeScreenshot(fileName: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn SetConfigFlags(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn TraceLog(logLevel: ::std::os::raw::c_int, text: *const ::std::os::raw::c_char, ...); -} -extern "C" { - pub fn SetTraceLogLevel(logLevel: ::std::os::raw::c_int); -} -extern "C" { - pub fn MemAlloc(size: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn MemRealloc( - ptr: *mut ::std::os::raw::c_void, - size: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn MemFree(ptr: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn SetTraceLogCallback(callback: TraceLogCallback); -} -extern "C" { - pub fn SetLoadFileDataCallback(callback: LoadFileDataCallback); -} -extern "C" { - pub fn SetSaveFileDataCallback(callback: SaveFileDataCallback); -} -extern "C" { - pub fn SetLoadFileTextCallback(callback: LoadFileTextCallback); -} -extern "C" { - pub fn SetSaveFileTextCallback(callback: SaveFileTextCallback); -} -extern "C" { - pub fn LoadFileData( - fileName: *const ::std::os::raw::c_char, - bytesRead: *mut ::std::os::raw::c_uint, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn UnloadFileData(data: *mut ::std::os::raw::c_uchar); -} -extern "C" { - pub fn SaveFileData( - fileName: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_void, - bytesToWrite: ::std::os::raw::c_uint, - ) -> bool; -} -extern "C" { - pub fn LoadFileText(fileName: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn UnloadFileText(text: *mut ::std::os::raw::c_uchar); -} -extern "C" { - pub fn SaveFileText( - fileName: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn FileExists(fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn DirectoryExists(dirPath: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn IsFileExtension( - fileName: *const ::std::os::raw::c_char, - ext: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn GetFileExtension( - fileName: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetFileName(filePath: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetFileNameWithoutExt( - filePath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetDirectoryPath( - filePath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetPrevDirectoryPath( - dirPath: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetWorkingDirectory() -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GetDirectoryFiles( - dirPath: *const ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ClearDirectoryFiles(); -} -extern "C" { - pub fn ChangeDirectory(dir: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn IsFileDropped() -> bool; -} -extern "C" { - pub fn GetDroppedFiles(count: *mut ::std::os::raw::c_int) -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ClearDroppedFiles(); -} -extern "C" { - pub fn GetFileModTime(fileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn CompressData( - data: *mut ::std::os::raw::c_uchar, - dataLength: ::std::os::raw::c_int, - compDataLength: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn DecompressData( - compData: *mut ::std::os::raw::c_uchar, - compDataLength: ::std::os::raw::c_int, - dataLength: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn SaveStorageValue(position: ::std::os::raw::c_uint, value: ::std::os::raw::c_int) - -> bool; -} -extern "C" { - pub fn LoadStorageValue(position: ::std::os::raw::c_uint) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn OpenURL(url: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn IsKeyPressed(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyDown(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyReleased(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsKeyUp(key: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn SetExitKey(key: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetKeyPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCharPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsGamepadAvailable(gamepad: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsGamepadName( - gamepad: ::std::os::raw::c_int, - name: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn GetGamepadName(gamepad: ::std::os::raw::c_int) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn IsGamepadButtonPressed( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonDown( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonReleased( - gamepad: ::std::os::raw::c_int, - button: ::std::os::raw::c_int, - ) -> bool; -} -extern "C" { - pub fn IsGamepadButtonUp(gamepad: ::std::os::raw::c_int, button: ::std::os::raw::c_int) - -> bool; -} -extern "C" { - pub fn GetGamepadButtonPressed() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGamepadAxisCount(gamepad: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGamepadAxisMovement( - gamepad: ::std::os::raw::c_int, - axis: ::std::os::raw::c_int, - ) -> f32; -} -extern "C" { - pub fn SetGamepadMappings(mappings: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsMouseButtonPressed(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonDown(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonReleased(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn IsMouseButtonUp(button: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn GetMouseX() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMouseY() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetMousePosition() -> Vector2; -} -extern "C" { - pub fn SetMousePosition(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetMouseOffset(offsetX: ::std::os::raw::c_int, offsetY: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetMouseScale(scaleX: f32, scaleY: f32); -} -extern "C" { - pub fn GetMouseWheelMove() -> f32; -} -extern "C" { - pub fn SetMouseCursor(cursor: ::std::os::raw::c_int); -} -extern "C" { - pub fn GetTouchX() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchY() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchPosition(index: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn SetGesturesEnabled(flags: ::std::os::raw::c_uint); -} -extern "C" { - pub fn IsGestureDetected(gesture: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn GetGestureDetected() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetTouchPointsCount() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetGestureHoldDuration() -> f32; -} -extern "C" { - pub fn GetGestureDragVector() -> Vector2; -} -extern "C" { - pub fn GetGestureDragAngle() -> f32; -} -extern "C" { - pub fn GetGesturePinchVector() -> Vector2; -} -extern "C" { - pub fn GetGesturePinchAngle() -> f32; -} -extern "C" { - pub fn SetCameraMode(camera: Camera, mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn UpdateCamera(camera: *mut Camera); -} -extern "C" { - pub fn SetCameraPanControl(keyPan: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraAltControl(keyAlt: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraSmoothZoomControl(keySmoothZoom: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetCameraMoveControls( - keyFront: ::std::os::raw::c_int, - keyBack: ::std::os::raw::c_int, - keyRight: ::std::os::raw::c_int, - keyLeft: ::std::os::raw::c_int, - keyUp: ::std::os::raw::c_int, - keyDown: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn SetShapesTexture(texture: Texture2D, source: Rectangle); -} -extern "C" { - pub fn DrawPixel(posX: ::std::os::raw::c_int, posY: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawPixelV(position: Vector2, color: Color); -} -extern "C" { - pub fn DrawLine( - startPosX: ::std::os::raw::c_int, - startPosY: ::std::os::raw::c_int, - endPosX: ::std::os::raw::c_int, - endPosY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawLineV(startPos: Vector2, endPos: Vector2, color: Color); -} -extern "C" { - pub fn DrawLineEx(startPos: Vector2, endPos: Vector2, thick: f32, color: Color); -} -extern "C" { - pub fn DrawLineBezier(startPos: Vector2, endPos: Vector2, thick: f32, color: Color); -} -extern "C" { - pub fn DrawLineBezierQuad( - startPos: Vector2, - endPos: Vector2, - controlPos: Vector2, - thick: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawLineStrip(points: *mut Vector2, pointsCount: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawCircle( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleSector( - center: Vector2, - radius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleSectorLines( - center: Vector2, - radius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCircleGradient( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawCircleV(center: Vector2, radius: f32, color: Color); -} -extern "C" { - pub fn DrawCircleLines( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawEllipse( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radiusH: f32, - radiusV: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawEllipseLines( - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radiusH: f32, - radiusV: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawRing( - center: Vector2, - innerRadius: f32, - outerRadius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRingLines( - center: Vector2, - innerRadius: f32, - outerRadius: f32, - startAngle: f32, - endAngle: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangle( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleV(position: Vector2, size: Vector2, color: Color); -} -extern "C" { - pub fn DrawRectangleRec(rec: Rectangle, color: Color); -} -extern "C" { - pub fn DrawRectanglePro(rec: Rectangle, origin: Vector2, rotation: f32, color: Color); -} -extern "C" { - pub fn DrawRectangleGradientV( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawRectangleGradientH( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color1: Color, - color2: Color, - ); -} -extern "C" { - pub fn DrawRectangleGradientEx( - rec: Rectangle, - col1: Color, - col2: Color, - col3: Color, - col4: Color, - ); -} -extern "C" { - pub fn DrawRectangleLines( - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleLinesEx(rec: Rectangle, lineThick: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawRectangleRounded( - rec: Rectangle, - roundness: f32, - segments: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawRectangleRoundedLines( - rec: Rectangle, - roundness: f32, - segments: ::std::os::raw::c_int, - lineThick: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawTriangle(v1: Vector2, v2: Vector2, v3: Vector2, color: Color); -} -extern "C" { - pub fn DrawTriangleLines(v1: Vector2, v2: Vector2, v3: Vector2, color: Color); -} -extern "C" { - pub fn DrawTriangleFan(points: *mut Vector2, pointsCount: ::std::os::raw::c_int, color: Color); -} -extern "C" { - pub fn DrawTriangleStrip( - points: *mut Vector2, - pointsCount: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawPoly( - center: Vector2, - sides: ::std::os::raw::c_int, - radius: f32, - rotation: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawPolyLines( - center: Vector2, - sides: ::std::os::raw::c_int, - radius: f32, - rotation: f32, - color: Color, - ); -} -extern "C" { - pub fn CheckCollisionRecs(rec1: Rectangle, rec2: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionCircles( - center1: Vector2, - radius1: f32, - center2: Vector2, - radius2: f32, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionCircleRec(center: Vector2, radius: f32, rec: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionPointRec(point: Vector2, rec: Rectangle) -> bool; -} -extern "C" { - pub fn CheckCollisionPointCircle(point: Vector2, center: Vector2, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionPointTriangle( - point: Vector2, - p1: Vector2, - p2: Vector2, - p3: Vector2, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionLines( - startPos1: Vector2, - endPos1: Vector2, - startPos2: Vector2, - endPos2: Vector2, - collisionPoint: *mut Vector2, - ) -> bool; -} -extern "C" { - pub fn GetCollisionRec(rec1: Rectangle, rec2: Rectangle) -> Rectangle; -} -extern "C" { - pub fn LoadImage(fileName: *const ::std::os::raw::c_char) -> Image; -} -extern "C" { - pub fn LoadImageRaw( - fileName: *const ::std::os::raw::c_char, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - headerSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn LoadImageAnim( - fileName: *const ::std::os::raw::c_char, - frames: *mut ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn LoadImageFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn UnloadImage(image: Image); -} -extern "C" { - pub fn ExportImage(image: Image, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn ExportImageAsCode(image: Image, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GenImageColor( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientV( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - top: Color, - bottom: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientH( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - left: Color, - right: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageGradientRadial( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - density: f32, - inner: Color, - outer: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageChecked( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - checksX: ::std::os::raw::c_int, - checksY: ::std::os::raw::c_int, - col1: Color, - col2: Color, - ) -> Image; -} -extern "C" { - pub fn GenImageWhiteNoise( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - factor: f32, - ) -> Image; -} -extern "C" { - pub fn GenImagePerlinNoise( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - scale: f32, - ) -> Image; -} -extern "C" { - pub fn GenImageCellular( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - tileSize: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn ImageCopy(image: Image) -> Image; -} -extern "C" { - pub fn ImageFromImage(image: Image, rec: Rectangle) -> Image; -} -extern "C" { - pub fn ImageText( - text: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - color: Color, - ) -> Image; -} -extern "C" { - pub fn ImageTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - fontSize: f32, - spacing: f32, - tint: Color, - ) -> Image; -} -extern "C" { - pub fn ImageFormat(image: *mut Image, newFormat: ::std::os::raw::c_int); -} -extern "C" { - pub fn ImageToPOT(image: *mut Image, fill: Color); -} -extern "C" { - pub fn ImageCrop(image: *mut Image, crop: Rectangle); -} -extern "C" { - pub fn ImageAlphaCrop(image: *mut Image, threshold: f32); -} -extern "C" { - pub fn ImageAlphaClear(image: *mut Image, color: Color, threshold: f32); -} -extern "C" { - pub fn ImageAlphaMask(image: *mut Image, alphaMask: Image); -} -extern "C" { - pub fn ImageAlphaPremultiply(image: *mut Image); -} -extern "C" { - pub fn ImageResize( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageResizeNN( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageResizeCanvas( - image: *mut Image, - newWidth: ::std::os::raw::c_int, - newHeight: ::std::os::raw::c_int, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - fill: Color, - ); -} -extern "C" { - pub fn ImageMipmaps(image: *mut Image); -} -extern "C" { - pub fn ImageDither( - image: *mut Image, - rBpp: ::std::os::raw::c_int, - gBpp: ::std::os::raw::c_int, - bBpp: ::std::os::raw::c_int, - aBpp: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ImageFlipVertical(image: *mut Image); -} -extern "C" { - pub fn ImageFlipHorizontal(image: *mut Image); -} -extern "C" { - pub fn ImageRotateCW(image: *mut Image); -} -extern "C" { - pub fn ImageRotateCCW(image: *mut Image); -} -extern "C" { - pub fn ImageColorTint(image: *mut Image, color: Color); -} -extern "C" { - pub fn ImageColorInvert(image: *mut Image); -} -extern "C" { - pub fn ImageColorGrayscale(image: *mut Image); -} -extern "C" { - pub fn ImageColorContrast(image: *mut Image, contrast: f32); -} -extern "C" { - pub fn ImageColorBrightness(image: *mut Image, brightness: ::std::os::raw::c_int); -} -extern "C" { - pub fn ImageColorReplace(image: *mut Image, color: Color, replace: Color); -} -extern "C" { - pub fn LoadImageColors(image: Image) -> *mut Color; -} -extern "C" { - pub fn LoadImagePalette( - image: Image, - maxPaletteSize: ::std::os::raw::c_int, - colorsCount: *mut ::std::os::raw::c_int, - ) -> *mut Color; -} -extern "C" { - pub fn UnloadImageColors(colors: *mut Color); -} -extern "C" { - pub fn UnloadImagePalette(colors: *mut Color); -} -extern "C" { - pub fn GetImageAlphaBorder(image: Image, threshold: f32) -> Rectangle; -} -extern "C" { - pub fn ImageClearBackground(dst: *mut Image, color: Color); -} -extern "C" { - pub fn ImageDrawPixel( - dst: *mut Image, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawPixelV(dst: *mut Image, position: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawLine( - dst: *mut Image, - startPosX: ::std::os::raw::c_int, - startPosY: ::std::os::raw::c_int, - endPosX: ::std::os::raw::c_int, - endPosY: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawLineV(dst: *mut Image, start: Vector2, end: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawCircle( - dst: *mut Image, - centerX: ::std::os::raw::c_int, - centerY: ::std::os::raw::c_int, - radius: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawCircleV( - dst: *mut Image, - center: Vector2, - radius: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawRectangle( - dst: *mut Image, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawRectangleV(dst: *mut Image, position: Vector2, size: Vector2, color: Color); -} -extern "C" { - pub fn ImageDrawRectangleRec(dst: *mut Image, rec: Rectangle, color: Color); -} -extern "C" { - pub fn ImageDrawRectangleLines( - dst: *mut Image, - rec: Rectangle, - thick: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDraw( - dst: *mut Image, - src: Image, - srcRec: Rectangle, - dstRec: Rectangle, - tint: Color, - ); -} -extern "C" { - pub fn ImageDrawText( - dst: *mut Image, - text: *const ::std::os::raw::c_char, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn ImageDrawTextEx( - dst: *mut Image, - font: Font, - text: *const ::std::os::raw::c_char, - position: Vector2, - fontSize: f32, - spacing: f32, - tint: Color, - ); -} -extern "C" { - pub fn LoadTexture(fileName: *const ::std::os::raw::c_char) -> Texture2D; -} -extern "C" { - pub fn LoadTextureFromImage(image: Image) -> Texture2D; -} -extern "C" { - pub fn LoadTextureCubemap(image: Image, layout: ::std::os::raw::c_int) -> TextureCubemap; -} -extern "C" { - pub fn LoadRenderTexture( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> RenderTexture2D; -} -extern "C" { - pub fn UnloadTexture(texture: Texture2D); -} -extern "C" { - pub fn UnloadRenderTexture(target: RenderTexture2D); -} -extern "C" { - pub fn UpdateTexture(texture: Texture2D, pixels: *const ::std::os::raw::c_void); -} -extern "C" { - pub fn UpdateTextureRec( - texture: Texture2D, - rec: Rectangle, - pixels: *const ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn GetTextureData(texture: Texture2D) -> Image; -} -extern "C" { - pub fn GetScreenData() -> Image; -} -extern "C" { - pub fn GenTextureMipmaps(texture: *mut Texture2D); -} -extern "C" { - pub fn SetTextureFilter(texture: Texture2D, filter: ::std::os::raw::c_int); -} -extern "C" { - pub fn SetTextureWrap(texture: Texture2D, wrap: ::std::os::raw::c_int); -} -extern "C" { - pub fn DrawTexture( - texture: Texture2D, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureV(texture: Texture2D, position: Vector2, tint: Color); -} -extern "C" { - pub fn DrawTextureEx( - texture: Texture2D, - position: Vector2, - rotation: f32, - scale: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureRec(texture: Texture2D, source: Rectangle, position: Vector2, tint: Color); -} -extern "C" { - pub fn DrawTextureQuad( - texture: Texture2D, - tiling: Vector2, - offset: Vector2, - quad: Rectangle, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureTiled( - texture: Texture2D, - source: Rectangle, - dest: Rectangle, - origin: Vector2, - rotation: f32, - scale: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTexturePro( - texture: Texture2D, - source: Rectangle, - dest: Rectangle, - origin: Vector2, - rotation: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextureNPatch( - texture: Texture2D, - nPatchInfo: NPatchInfo, - dest: Rectangle, - origin: Vector2, - rotation: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTexturePoly( - texture: Texture2D, - center: Vector2, - points: *mut Vector2, - texcoords: *mut Vector2, - pointsCount: ::std::os::raw::c_int, - tint: Color, - ); -} -extern "C" { - pub fn Fade(color: Color, alpha: f32) -> Color; -} -extern "C" { - pub fn ColorToInt(color: Color) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ColorNormalize(color: Color) -> Vector4; -} -extern "C" { - pub fn ColorFromNormalized(normalized: Vector4) -> Color; -} -extern "C" { - pub fn ColorToHSV(color: Color) -> Vector3; -} -extern "C" { - pub fn ColorFromHSV(hue: f32, saturation: f32, value: f32) -> Color; -} -extern "C" { - pub fn ColorAlpha(color: Color, alpha: f32) -> Color; -} -extern "C" { - pub fn ColorAlphaBlend(dst: Color, src: Color, tint: Color) -> Color; -} -extern "C" { - pub fn GetColor(hexValue: ::std::os::raw::c_int) -> Color; -} -extern "C" { - pub fn GetPixelColor( - srcPtr: *mut ::std::os::raw::c_void, - format: ::std::os::raw::c_int, - ) -> Color; -} -extern "C" { - pub fn SetPixelColor( - dstPtr: *mut ::std::os::raw::c_void, - color: Color, - format: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GetPixelDataSize( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetFontDefault() -> Font; -} -extern "C" { - pub fn LoadFont(fileName: *const ::std::os::raw::c_char) -> Font; -} -extern "C" { - pub fn LoadFontEx( - fileName: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - ) -> Font; -} -extern "C" { - pub fn LoadFontFromImage(image: Image, key: Color, firstChar: ::std::os::raw::c_int) -> Font; -} -extern "C" { - pub fn LoadFontFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - ) -> Font; -} -extern "C" { - pub fn LoadFontData( - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - fontChars: *mut ::std::os::raw::c_int, - charsCount: ::std::os::raw::c_int, - type_: ::std::os::raw::c_int, - ) -> *mut CharInfo; -} -extern "C" { - pub fn GenImageFontAtlas( - chars: *const CharInfo, - recs: *mut *mut Rectangle, - charsCount: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - padding: ::std::os::raw::c_int, - packMethod: ::std::os::raw::c_int, - ) -> Image; -} -extern "C" { - pub fn UnloadFontData(chars: *mut CharInfo, charsCount: ::std::os::raw::c_int); -} -extern "C" { - pub fn UnloadFont(font: Font); -} -extern "C" { - pub fn DrawFPS(posX: ::std::os::raw::c_int, posY: ::std::os::raw::c_int); -} -extern "C" { - pub fn DrawText( - text: *const ::std::os::raw::c_char, - posX: ::std::os::raw::c_int, - posY: ::std::os::raw::c_int, - fontSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - position: Vector2, - fontSize: f32, - spacing: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextRec( - font: Font, - text: *const ::std::os::raw::c_char, - rec: Rectangle, - fontSize: f32, - spacing: f32, - wordWrap: bool, - tint: Color, - ); -} -extern "C" { - pub fn DrawTextRecEx( - font: Font, - text: *const ::std::os::raw::c_char, - rec: Rectangle, - fontSize: f32, - spacing: f32, - wordWrap: bool, - tint: Color, - selectStart: ::std::os::raw::c_int, - selectLength: ::std::os::raw::c_int, - selectTint: Color, - selectBackTint: Color, - ); -} -extern "C" { - pub fn DrawTextCodepoint( - font: Font, - codepoint: ::std::os::raw::c_int, - position: Vector2, - fontSize: f32, - tint: Color, - ); -} -extern "C" { - pub fn MeasureText( - text: *const ::std::os::raw::c_char, - fontSize: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn MeasureTextEx( - font: Font, - text: *const ::std::os::raw::c_char, - fontSize: f32, - spacing: f32, - ) -> Vector2; -} -extern "C" { - pub fn GetGlyphIndex(font: Font, codepoint: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextCopy( - dst: *mut ::std::os::raw::c_char, - src: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextIsEqual( - text1: *const ::std::os::raw::c_char, - text2: *const ::std::os::raw::c_char, - ) -> bool; -} -extern "C" { - pub fn TextLength(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn TextFormat(text: *const ::std::os::raw::c_char, ...) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextSubtext( - text: *const ::std::os::raw::c_char, - position: ::std::os::raw::c_int, - length: ::std::os::raw::c_int, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextReplace( - text: *mut ::std::os::raw::c_char, - replace: *const ::std::os::raw::c_char, - by: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn TextInsert( - text: *const ::std::os::raw::c_char, - insert: *const ::std::os::raw::c_char, - position: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn TextJoin( - textList: *mut *const ::std::os::raw::c_char, - count: ::std::os::raw::c_int, - delimiter: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextSplit( - text: *const ::std::os::raw::c_char, - delimiter: ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextAppend( - text: *mut ::std::os::raw::c_char, - append: *const ::std::os::raw::c_char, - position: *mut ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn TextFindIndex( - text: *const ::std::os::raw::c_char, - find: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextToUpper(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToLower(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToPascal(text: *const ::std::os::raw::c_char) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn TextToInteger(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn TextToUtf8( - codepoints: *mut ::std::os::raw::c_int, - length: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn GetCodepoints( - text: *const ::std::os::raw::c_char, - count: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_int; -} -extern "C" { - pub fn GetCodepointsCount(text: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GetNextCodepoint( - text: *const ::std::os::raw::c_char, - bytesProcessed: *mut ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn CodepointToUtf8( - codepoint: ::std::os::raw::c_int, - byteLength: *mut ::std::os::raw::c_int, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn DrawLine3D(startPos: Vector3, endPos: Vector3, color: Color); -} -extern "C" { - pub fn DrawPoint3D(position: Vector3, color: Color); -} -extern "C" { - pub fn DrawCircle3D( - center: Vector3, - radius: f32, - rotationAxis: Vector3, - rotationAngle: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawTriangle3D(v1: Vector3, v2: Vector3, v3: Vector3, color: Color); -} -extern "C" { - pub fn DrawTriangleStrip3D( - points: *mut Vector3, - pointsCount: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCube(position: Vector3, width: f32, height: f32, length: f32, color: Color); -} -extern "C" { - pub fn DrawCubeV(position: Vector3, size: Vector3, color: Color); -} -extern "C" { - pub fn DrawCubeWires(position: Vector3, width: f32, height: f32, length: f32, color: Color); -} -extern "C" { - pub fn DrawCubeWiresV(position: Vector3, size: Vector3, color: Color); -} -extern "C" { - pub fn DrawCubeTexture( - texture: Texture2D, - position: Vector3, - width: f32, - height: f32, - length: f32, - color: Color, - ); -} -extern "C" { - pub fn DrawSphere(centerPos: Vector3, radius: f32, color: Color); -} -extern "C" { - pub fn DrawSphereEx( - centerPos: Vector3, - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawSphereWires( - centerPos: Vector3, - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCylinder( - position: Vector3, - radiusTop: f32, - radiusBottom: f32, - height: f32, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawCylinderWires( - position: Vector3, - radiusTop: f32, - radiusBottom: f32, - height: f32, - slices: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn DrawPlane(centerPos: Vector3, size: Vector2, color: Color); -} -extern "C" { - pub fn DrawRay(ray: Ray, color: Color); -} -extern "C" { - pub fn DrawGrid(slices: ::std::os::raw::c_int, spacing: f32); -} -extern "C" { - pub fn LoadModel(fileName: *const ::std::os::raw::c_char) -> Model; -} -extern "C" { - pub fn LoadModelFromMesh(mesh: Mesh) -> Model; -} -extern "C" { - pub fn UnloadModel(model: Model); -} -extern "C" { - pub fn UnloadModelKeepMeshes(model: Model); -} -extern "C" { - pub fn UploadMesh(mesh: *mut Mesh, dynamic: bool); -} -extern "C" { - pub fn UpdateMeshBuffer( - mesh: Mesh, - index: ::std::os::raw::c_int, - data: *mut ::std::os::raw::c_void, - dataSize: ::std::os::raw::c_int, - offset: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn DrawMesh(mesh: Mesh, material: Material, transform: Matrix); -} -extern "C" { - pub fn DrawMeshInstanced( - mesh: Mesh, - material: Material, - transforms: *mut Matrix, - instances: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn UnloadMesh(mesh: Mesh); -} -extern "C" { - pub fn ExportMesh(mesh: Mesh, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn LoadMaterials( - fileName: *const ::std::os::raw::c_char, - materialCount: *mut ::std::os::raw::c_int, - ) -> *mut Material; -} -extern "C" { - pub fn LoadMaterialDefault() -> Material; -} -extern "C" { - pub fn UnloadMaterial(material: Material); -} -extern "C" { - pub fn SetMaterialTexture( - material: *mut Material, - mapType: ::std::os::raw::c_int, - texture: Texture2D, - ); -} -extern "C" { - pub fn SetModelMeshMaterial( - model: *mut Model, - meshId: ::std::os::raw::c_int, - materialId: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn LoadModelAnimations( - fileName: *const ::std::os::raw::c_char, - animsCount: *mut ::std::os::raw::c_int, - ) -> *mut ModelAnimation; -} -extern "C" { - pub fn UpdateModelAnimation(model: Model, anim: ModelAnimation, frame: ::std::os::raw::c_int); -} -extern "C" { - pub fn UnloadModelAnimation(anim: ModelAnimation); -} -extern "C" { - pub fn UnloadModelAnimations(animations: *mut ModelAnimation, count: ::std::os::raw::c_uint); -} -extern "C" { - pub fn IsModelAnimationValid(model: Model, anim: ModelAnimation) -> bool; -} -extern "C" { - pub fn GenMeshPoly(sides: ::std::os::raw::c_int, radius: f32) -> Mesh; -} -extern "C" { - pub fn GenMeshPlane( - width: f32, - length: f32, - resX: ::std::os::raw::c_int, - resZ: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshCube(width: f32, height: f32, length: f32) -> Mesh; -} -extern "C" { - pub fn GenMeshSphere( - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshHemiSphere( - radius: f32, - rings: ::std::os::raw::c_int, - slices: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshCylinder(radius: f32, height: f32, slices: ::std::os::raw::c_int) -> Mesh; -} -extern "C" { - pub fn GenMeshTorus( - radius: f32, - size: f32, - radSeg: ::std::os::raw::c_int, - sides: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshKnot( - radius: f32, - size: f32, - radSeg: ::std::os::raw::c_int, - sides: ::std::os::raw::c_int, - ) -> Mesh; -} -extern "C" { - pub fn GenMeshHeightmap(heightmap: Image, size: Vector3) -> Mesh; -} -extern "C" { - pub fn GenMeshCubicmap(cubicmap: Image, cubeSize: Vector3) -> Mesh; -} -extern "C" { - pub fn MeshBoundingBox(mesh: Mesh) -> BoundingBox; -} -extern "C" { - pub fn MeshTangents(mesh: *mut Mesh); -} -extern "C" { - pub fn MeshBinormals(mesh: *mut Mesh); -} -extern "C" { - pub fn DrawModel(model: Model, position: Vector3, scale: f32, tint: Color); -} -extern "C" { - pub fn DrawModelEx( - model: Model, - position: Vector3, - rotationAxis: Vector3, - rotationAngle: f32, - scale: Vector3, - tint: Color, - ); -} -extern "C" { - pub fn DrawModelWires(model: Model, position: Vector3, scale: f32, tint: Color); -} -extern "C" { - pub fn DrawModelWiresEx( - model: Model, - position: Vector3, - rotationAxis: Vector3, - rotationAngle: f32, - scale: Vector3, - tint: Color, - ); -} -extern "C" { - pub fn DrawBoundingBox(box_: BoundingBox, color: Color); -} -extern "C" { - pub fn DrawBillboard( - camera: Camera, - texture: Texture2D, - center: Vector3, - size: f32, - tint: Color, - ); -} -extern "C" { - pub fn DrawBillboardRec( - camera: Camera, - texture: Texture2D, - source: Rectangle, - center: Vector3, - size: f32, - tint: Color, - ); -} -extern "C" { - pub fn CheckCollisionSpheres( - center1: Vector3, - radius1: f32, - center2: Vector3, - radius2: f32, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionBoxes(box1: BoundingBox, box2: BoundingBox) -> bool; -} -extern "C" { - pub fn CheckCollisionBoxSphere(box_: BoundingBox, center: Vector3, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionRaySphere(ray: Ray, center: Vector3, radius: f32) -> bool; -} -extern "C" { - pub fn CheckCollisionRaySphereEx( - ray: Ray, - center: Vector3, - radius: f32, - collisionPoint: *mut Vector3, - ) -> bool; -} -extern "C" { - pub fn CheckCollisionRayBox(ray: Ray, box_: BoundingBox) -> bool; -} -extern "C" { - pub fn GetCollisionRayMesh(ray: Ray, mesh: Mesh, transform: Matrix) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayModel(ray: Ray, model: Model) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayTriangle(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3) -> RayHitInfo; -} -extern "C" { - pub fn GetCollisionRayGround(ray: Ray, groundHeight: f32) -> RayHitInfo; -} -extern "C" { - pub fn InitAudioDevice(); -} -extern "C" { - pub fn CloseAudioDevice(); -} -extern "C" { - pub fn IsAudioDeviceReady() -> bool; -} -extern "C" { - pub fn SetMasterVolume(volume: f32); -} -extern "C" { - pub fn LoadWave(fileName: *const ::std::os::raw::c_char) -> Wave; -} -extern "C" { - pub fn LoadWaveFromMemory( - fileType: *const ::std::os::raw::c_char, - fileData: *const ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Wave; -} -extern "C" { - pub fn LoadSound(fileName: *const ::std::os::raw::c_char) -> Sound; -} -extern "C" { - pub fn LoadSoundFromWave(wave: Wave) -> Sound; -} -extern "C" { - pub fn UpdateSound( - sound: Sound, - data: *const ::std::os::raw::c_void, - samplesCount: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn UnloadWave(wave: Wave); -} -extern "C" { - pub fn UnloadSound(sound: Sound); -} -extern "C" { - pub fn ExportWave(wave: Wave, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn ExportWaveAsCode(wave: Wave, fileName: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn PlaySound(sound: Sound); -} -extern "C" { - pub fn StopSound(sound: Sound); -} -extern "C" { - pub fn PauseSound(sound: Sound); -} -extern "C" { - pub fn ResumeSound(sound: Sound); -} -extern "C" { - pub fn PlaySoundMulti(sound: Sound); -} -extern "C" { - pub fn StopSoundMulti(); -} -extern "C" { - pub fn GetSoundsPlaying() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn IsSoundPlaying(sound: Sound) -> bool; -} -extern "C" { - pub fn SetSoundVolume(sound: Sound, volume: f32); -} -extern "C" { - pub fn SetSoundPitch(sound: Sound, pitch: f32); -} -extern "C" { - pub fn WaveFormat( - wave: *mut Wave, - sampleRate: ::std::os::raw::c_int, - sampleSize: ::std::os::raw::c_int, - channels: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn WaveCopy(wave: Wave) -> Wave; -} -extern "C" { - pub fn WaveCrop( - wave: *mut Wave, - initSample: ::std::os::raw::c_int, - finalSample: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn LoadWaveSamples(wave: Wave) -> *mut f32; -} -extern "C" { - pub fn UnloadWaveSamples(samples: *mut f32); -} -extern "C" { - pub fn LoadMusicStream(fileName: *const ::std::os::raw::c_char) -> Music; -} -extern "C" { - pub fn LoadMusicStreamFromMemory( - fileType: *const ::std::os::raw::c_char, - data: *mut ::std::os::raw::c_uchar, - dataSize: ::std::os::raw::c_int, - ) -> Music; -} -extern "C" { - pub fn UnloadMusicStream(music: Music); -} -extern "C" { - pub fn PlayMusicStream(music: Music); -} -extern "C" { - pub fn IsMusicPlaying(music: Music) -> bool; -} -extern "C" { - pub fn UpdateMusicStream(music: Music); -} -extern "C" { - pub fn StopMusicStream(music: Music); -} -extern "C" { - pub fn PauseMusicStream(music: Music); -} -extern "C" { - pub fn ResumeMusicStream(music: Music); -} -extern "C" { - pub fn SetMusicVolume(music: Music, volume: f32); -} -extern "C" { - pub fn SetMusicPitch(music: Music, pitch: f32); -} -extern "C" { - pub fn GetMusicTimeLength(music: Music) -> f32; -} -extern "C" { - pub fn GetMusicTimePlayed(music: Music) -> f32; -} -extern "C" { - pub fn InitAudioStream( - sampleRate: ::std::os::raw::c_uint, - sampleSize: ::std::os::raw::c_uint, - channels: ::std::os::raw::c_uint, - ) -> AudioStream; -} -extern "C" { - pub fn UpdateAudioStream( - stream: AudioStream, - data: *const ::std::os::raw::c_void, - samplesCount: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn CloseAudioStream(stream: AudioStream); -} -extern "C" { - pub fn IsAudioStreamProcessed(stream: AudioStream) -> bool; -} -extern "C" { - pub fn PlayAudioStream(stream: AudioStream); -} -extern "C" { - pub fn PauseAudioStream(stream: AudioStream); -} -extern "C" { - pub fn ResumeAudioStream(stream: AudioStream); -} -extern "C" { - pub fn IsAudioStreamPlaying(stream: AudioStream) -> bool; -} -extern "C" { - pub fn StopAudioStream(stream: AudioStream); -} -extern "C" { - pub fn SetAudioStreamVolume(stream: AudioStream, volume: f32); -} -extern "C" { - pub fn SetAudioStreamPitch(stream: AudioStream, pitch: f32); -} -extern "C" { - pub fn SetAudioStreamBufferSizeDefault(size: ::std::os::raw::c_int); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct float3 { - pub v: [f32; 3usize], -} -#[test] -fn bindgen_test_layout_float3() { - assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!("Size of: ", stringify!(float3)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(float3)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).v as *const _ as usize }, - 0usize, - concat!("Offset of field: ", stringify!(float3), "::", stringify!(v)) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct float16 { - pub v: [f32; 16usize], -} -#[test] -fn bindgen_test_layout_float16() { - assert_eq!( - ::std::mem::size_of::(), - 64usize, - concat!("Size of: ", stringify!(float16)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(float16)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).v as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(float16), - "::", - stringify!(v) - ) - ); -} -extern "C" { - pub fn __va_start(arg1: *mut *mut ::std::os::raw::c_char, ...); -} -pub type size_t = ::std::os::raw::c_ulonglong; -pub type __vcrt_bool = bool; -pub type wchar_t = ::std::os::raw::c_ushort; -extern "C" { - pub fn __security_init_cookie(); -} -extern "C" { - pub fn __security_check_cookie(_StackCookie: usize); -} -extern "C" { - pub fn __report_gsfailure(_StackCookie: usize); -} -extern "C" { - pub static mut __security_cookie: usize; -} -pub type __crt_bool = bool; -extern "C" { - pub fn _invalid_parameter_noinfo(); -} -extern "C" { - pub fn _invalid_parameter_noinfo_noreturn(); -} -extern "C" { - pub fn _invoke_watson( - _Expression: *const wchar_t, - _FunctionName: *const wchar_t, - _FileName: *const wchar_t, - _LineNo: ::std::os::raw::c_uint, - _Reserved: usize, - ); -} -pub type errno_t = ::std::os::raw::c_int; -pub type wint_t = ::std::os::raw::c_ushort; -pub type wctype_t = ::std::os::raw::c_ushort; -pub type __time32_t = ::std::os::raw::c_long; -pub type __time64_t = ::std::os::raw::c_longlong; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __crt_locale_data_public { - pub _locale_pctype: *const ::std::os::raw::c_ushort, - pub _locale_mb_cur_max: ::std::os::raw::c_int, - pub _locale_lc_codepage: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout___crt_locale_data_public() { - assert_eq!( - ::std::mem::size_of::<__crt_locale_data_public>(), - 16usize, - concat!("Size of: ", stringify!(__crt_locale_data_public)) - ); - assert_eq!( - ::std::mem::align_of::<__crt_locale_data_public>(), - 8usize, - concat!("Alignment of ", stringify!(__crt_locale_data_public)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__crt_locale_data_public>()))._locale_pctype as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__crt_locale_data_public), - "::", - stringify!(_locale_pctype) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__crt_locale_data_public>()))._locale_mb_cur_max as *const _ - as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__crt_locale_data_public), - "::", - stringify!(_locale_mb_cur_max) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::<__crt_locale_data_public>()))._locale_lc_codepage as *const _ - as usize - }, - 12usize, - concat!( - "Offset of field: ", - stringify!(__crt_locale_data_public), - "::", - stringify!(_locale_lc_codepage) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __crt_locale_pointers { - pub locinfo: *mut __crt_locale_data, - pub mbcinfo: *mut __crt_multibyte_data, -} -#[test] -fn bindgen_test_layout___crt_locale_pointers() { - assert_eq!( - ::std::mem::size_of::<__crt_locale_pointers>(), - 16usize, - concat!("Size of: ", stringify!(__crt_locale_pointers)) - ); - assert_eq!( - ::std::mem::align_of::<__crt_locale_pointers>(), - 8usize, - concat!("Alignment of ", stringify!(__crt_locale_pointers)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__crt_locale_pointers>())).locinfo as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__crt_locale_pointers), - "::", - stringify!(locinfo) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__crt_locale_pointers>())).mbcinfo as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(__crt_locale_pointers), - "::", - stringify!(mbcinfo) - ) - ); -} -pub type _locale_t = *mut __crt_locale_pointers; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _Mbstatet { - pub _Wchar: ::std::os::raw::c_ulong, - pub _Byte: ::std::os::raw::c_ushort, - pub _State: ::std::os::raw::c_ushort, -} -#[test] -fn bindgen_test_layout__Mbstatet() { - assert_eq!( - ::std::mem::size_of::<_Mbstatet>(), - 8usize, - concat!("Size of: ", stringify!(_Mbstatet)) - ); - assert_eq!( - ::std::mem::align_of::<_Mbstatet>(), - 4usize, - concat!("Alignment of ", stringify!(_Mbstatet)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_Mbstatet>()))._Wchar as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_Mbstatet), - "::", - stringify!(_Wchar) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_Mbstatet>()))._Byte as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(_Mbstatet), - "::", - stringify!(_Byte) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_Mbstatet>()))._State as *const _ as usize }, - 6usize, - concat!( - "Offset of field: ", - stringify!(_Mbstatet), - "::", - stringify!(_State) - ) - ); -} -pub type mbstate_t = _Mbstatet; -pub type time_t = __time64_t; -pub type rsize_t = size_t; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _exception { - pub type_: ::std::os::raw::c_int, - pub name: *mut ::std::os::raw::c_char, - pub arg1: f64, - pub arg2: f64, - pub retval: f64, -} -#[test] -fn bindgen_test_layout__exception() { - assert_eq!( - ::std::mem::size_of::<_exception>(), - 40usize, - concat!("Size of: ", stringify!(_exception)) - ); - assert_eq!( - ::std::mem::align_of::<_exception>(), - 8usize, - concat!("Alignment of ", stringify!(_exception)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_exception>())).type_ as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_exception), - "::", - stringify!(type_) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_exception>())).name as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_exception), - "::", - stringify!(name) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_exception>())).arg1 as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(_exception), - "::", - stringify!(arg1) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_exception>())).arg2 as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(_exception), - "::", - stringify!(arg2) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_exception>())).retval as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(_exception), - "::", - stringify!(retval) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _complex { - pub x: f64, - pub y: f64, -} -#[test] -fn bindgen_test_layout__complex() { - assert_eq!( - ::std::mem::size_of::<_complex>(), - 16usize, - concat!("Size of: ", stringify!(_complex)) - ); - assert_eq!( - ::std::mem::align_of::<_complex>(), - 8usize, - concat!("Alignment of ", stringify!(_complex)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_complex>())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_complex), - "::", - stringify!(x) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_complex>())).y as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_complex), - "::", - stringify!(y) - ) - ); -} -pub type float_t = f32; -pub type double_t = f64; -extern "C" { - pub static _HUGE: f64; -} -extern "C" { - pub fn _fperrraise(_Except: ::std::os::raw::c_int); -} -extern "C" { - pub fn _dclass(_X: f64) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _ldclass(_X: f64) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _fdclass(_X: f32) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _dsign(_X: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _ldsign(_X: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fdsign(_X: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _dpcomp(_X: f64, _Y: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _ldpcomp(_X: f64, _Y: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fdpcomp(_X: f32, _Y: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _dtest(_Px: *mut f64) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _ldtest(_Px: *mut f64) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _fdtest(_Px: *mut f32) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _d_int(_Px: *mut f64, _Xexp: ::std::os::raw::c_short) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _ld_int(_Px: *mut f64, _Xexp: ::std::os::raw::c_short) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _fd_int(_Px: *mut f32, _Xexp: ::std::os::raw::c_short) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _dscale(_Px: *mut f64, _Lexp: ::std::os::raw::c_long) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _ldscale(_Px: *mut f64, _Lexp: ::std::os::raw::c_long) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _fdscale(_Px: *mut f32, _Lexp: ::std::os::raw::c_long) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _dunscale(_Pex: *mut ::std::os::raw::c_short, _Px: *mut f64) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _ldunscale(_Pex: *mut ::std::os::raw::c_short, _Px: *mut f64) - -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _fdunscale(_Pex: *mut ::std::os::raw::c_short, _Px: *mut f32) - -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _dexp(_Px: *mut f64, _Y: f64, _Eoff: ::std::os::raw::c_long) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _ldexp(_Px: *mut f64, _Y: f64, _Eoff: ::std::os::raw::c_long) - -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _fdexp(_Px: *mut f32, _Y: f32, _Eoff: ::std::os::raw::c_long) - -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _dnorm(_Ps: *mut ::std::os::raw::c_ushort) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _fdnorm(_Ps: *mut ::std::os::raw::c_ushort) -> ::std::os::raw::c_short; -} -extern "C" { - pub fn _dpoly(_X: f64, _Tab: *const f64, _N: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn _ldpoly(_X: f64, _Tab: *const f64, _N: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn _fdpoly(_X: f32, _Tab: *const f32, _N: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn _dlog(_X: f64, _Baseflag: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn _ldlog(_X: f64, _Baseflag: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn _fdlog(_X: f32, _Baseflag: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn _dsin(_X: f64, _Qoff: ::std::os::raw::c_uint) -> f64; -} -extern "C" { - pub fn _ldsin(_X: f64, _Qoff: ::std::os::raw::c_uint) -> f64; -} -extern "C" { - pub fn _fdsin(_X: f32, _Qoff: ::std::os::raw::c_uint) -> f32; -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union _double_val { - pub _Sh: [::std::os::raw::c_ushort; 4usize], - pub _Val: f64, - _bindgen_union_align: u64, -} -#[test] -fn bindgen_test_layout__double_val() { - assert_eq!( - ::std::mem::size_of::<_double_val>(), - 8usize, - concat!("Size of: ", stringify!(_double_val)) - ); - assert_eq!( - ::std::mem::align_of::<_double_val>(), - 8usize, - concat!("Alignment of ", stringify!(_double_val)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_double_val>()))._Sh as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_double_val), - "::", - stringify!(_Sh) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_double_val>()))._Val as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_double_val), - "::", - stringify!(_Val) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union _float_val { - pub _Sh: [::std::os::raw::c_ushort; 2usize], - pub _Val: f32, - _bindgen_union_align: u32, -} -#[test] -fn bindgen_test_layout__float_val() { - assert_eq!( - ::std::mem::size_of::<_float_val>(), - 4usize, - concat!("Size of: ", stringify!(_float_val)) - ); - assert_eq!( - ::std::mem::align_of::<_float_val>(), - 4usize, - concat!("Alignment of ", stringify!(_float_val)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_float_val>()))._Sh as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_float_val), - "::", - stringify!(_Sh) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_float_val>()))._Val as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_float_val), - "::", - stringify!(_Val) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union _ldouble_val { - pub _Sh: [::std::os::raw::c_ushort; 4usize], - pub _Val: f64, - _bindgen_union_align: u64, -} -#[test] -fn bindgen_test_layout__ldouble_val() { - assert_eq!( - ::std::mem::size_of::<_ldouble_val>(), - 8usize, - concat!("Size of: ", stringify!(_ldouble_val)) - ); - assert_eq!( - ::std::mem::align_of::<_ldouble_val>(), - 8usize, - concat!("Alignment of ", stringify!(_ldouble_val)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_ldouble_val>()))._Sh as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_ldouble_val), - "::", - stringify!(_Sh) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_ldouble_val>()))._Val as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_ldouble_val), - "::", - stringify!(_Val) - ) - ); -} -#[repr(C)] -#[derive(Copy, Clone)] -pub union _float_const { - pub _Word: [::std::os::raw::c_ushort; 4usize], - pub _Float: f32, - pub _Double: f64, - pub _Long_double: f64, - _bindgen_union_align: u64, -} -#[test] -fn bindgen_test_layout__float_const() { - assert_eq!( - ::std::mem::size_of::<_float_const>(), - 8usize, - concat!("Size of: ", stringify!(_float_const)) - ); - assert_eq!( - ::std::mem::align_of::<_float_const>(), - 8usize, - concat!("Alignment of ", stringify!(_float_const)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_float_const>()))._Word as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_float_const), - "::", - stringify!(_Word) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_float_const>()))._Float as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_float_const), - "::", - stringify!(_Float) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_float_const>()))._Double as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_float_const), - "::", - stringify!(_Double) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_float_const>()))._Long_double as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_float_const), - "::", - stringify!(_Long_double) - ) - ); -} -extern "C" { - pub static _Denorm_C: _float_const; -} -extern "C" { - pub static _Inf_C: _float_const; -} -extern "C" { - pub static _Nan_C: _float_const; -} -extern "C" { - pub static _Snan_C: _float_const; -} -extern "C" { - pub static _Hugeval_C: _float_const; -} -extern "C" { - pub static _FDenorm_C: _float_const; -} -extern "C" { - pub static _FInf_C: _float_const; -} -extern "C" { - pub static _FNan_C: _float_const; -} -extern "C" { - pub static _FSnan_C: _float_const; -} -extern "C" { - pub static _LDenorm_C: _float_const; -} -extern "C" { - pub static _LInf_C: _float_const; -} -extern "C" { - pub static _LNan_C: _float_const; -} -extern "C" { - pub static _LSnan_C: _float_const; -} -extern "C" { - pub static _Eps_C: _float_const; -} -extern "C" { - pub static _Rteps_C: _float_const; -} -extern "C" { - pub static _FEps_C: _float_const; -} -extern "C" { - pub static _FRteps_C: _float_const; -} -extern "C" { - pub static _LEps_C: _float_const; -} -extern "C" { - pub static _LRteps_C: _float_const; -} -extern "C" { - pub static _Zero_C: f64; -} -extern "C" { - pub static _Xbig_C: f64; -} -extern "C" { - pub static _FZero_C: f32; -} -extern "C" { - pub static _FXbig_C: f32; -} -extern "C" { - pub static _LZero_C: f64; -} -extern "C" { - pub static _LXbig_C: f64; -} -extern "C" { - pub fn abs(_X: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn labs(_X: ::std::os::raw::c_long) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn llabs(_X: ::std::os::raw::c_longlong) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn acos(_X: f64) -> f64; -} -extern "C" { - pub fn asin(_X: f64) -> f64; -} -extern "C" { - pub fn atan(_X: f64) -> f64; -} -extern "C" { - pub fn atan2(_Y: f64, _X: f64) -> f64; -} -extern "C" { - pub fn cos(_X: f64) -> f64; -} -extern "C" { - pub fn cosh(_X: f64) -> f64; -} -extern "C" { - pub fn exp(_X: f64) -> f64; -} -extern "C" { - pub fn fabs(_X: f64) -> f64; -} -extern "C" { - pub fn fmod(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn log(_X: f64) -> f64; -} -extern "C" { - pub fn log10(_X: f64) -> f64; -} -extern "C" { - pub fn pow(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn sin(_X: f64) -> f64; -} -extern "C" { - pub fn sinh(_X: f64) -> f64; -} -extern "C" { - pub fn sqrt(_X: f64) -> f64; -} -extern "C" { - pub fn tan(_X: f64) -> f64; -} -extern "C" { - pub fn tanh(_X: f64) -> f64; -} -extern "C" { - pub fn acosh(_X: f64) -> f64; -} -extern "C" { - pub fn asinh(_X: f64) -> f64; -} -extern "C" { - pub fn atanh(_X: f64) -> f64; -} -extern "C" { - pub fn atof(_String: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn _atof_l(_String: *const ::std::os::raw::c_char, _Locale: _locale_t) -> f64; -} -extern "C" { - pub fn _cabs(_Complex_value: _complex) -> f64; -} -extern "C" { - pub fn cbrt(_X: f64) -> f64; -} -extern "C" { - pub fn ceil(_X: f64) -> f64; -} -extern "C" { - pub fn _chgsign(_X: f64) -> f64; -} -extern "C" { - pub fn copysign(_Number: f64, _Sign: f64) -> f64; -} -extern "C" { - pub fn _copysign(_Number: f64, _Sign: f64) -> f64; -} -extern "C" { - pub fn erf(_X: f64) -> f64; -} -extern "C" { - pub fn erfc(_X: f64) -> f64; -} -extern "C" { - pub fn exp2(_X: f64) -> f64; -} -extern "C" { - pub fn expm1(_X: f64) -> f64; -} -extern "C" { - pub fn fdim(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn floor(_X: f64) -> f64; -} -extern "C" { - pub fn fma(_X: f64, _Y: f64, _Z: f64) -> f64; -} -extern "C" { - pub fn fmax(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn fmin(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn frexp(_X: f64, _Y: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn hypot(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn _hypot(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn ilogb(_X: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ldexp(_X: f64, _Y: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn lgamma(_X: f64) -> f64; -} -extern "C" { - pub fn llrint(_X: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn llround(_X: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn log1p(_X: f64) -> f64; -} -extern "C" { - pub fn log2(_X: f64) -> f64; -} -extern "C" { - pub fn logb(_X: f64) -> f64; -} -extern "C" { - pub fn lrint(_X: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn lround(_X: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn _matherr(_Except: *mut _exception) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn modf(_X: f64, _Y: *mut f64) -> f64; -} -extern "C" { - pub fn nan(_X: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn nearbyint(_X: f64) -> f64; -} -extern "C" { - pub fn nextafter(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn nexttoward(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn remainder(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn remquo(_X: f64, _Y: f64, _Z: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn rint(_X: f64) -> f64; -} -extern "C" { - pub fn round(_X: f64) -> f64; -} -extern "C" { - pub fn scalbln(_X: f64, _Y: ::std::os::raw::c_long) -> f64; -} -extern "C" { - pub fn scalbn(_X: f64, _Y: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn tgamma(_X: f64) -> f64; -} -extern "C" { - pub fn trunc(_X: f64) -> f64; -} -extern "C" { - pub fn _j0(_X: f64) -> f64; -} -extern "C" { - pub fn _j1(_X: f64) -> f64; -} -extern "C" { - pub fn _jn(_X: ::std::os::raw::c_int, _Y: f64) -> f64; -} -extern "C" { - pub fn _y0(_X: f64) -> f64; -} -extern "C" { - pub fn _y1(_X: f64) -> f64; -} -extern "C" { - pub fn _yn(_X: ::std::os::raw::c_int, _Y: f64) -> f64; -} -extern "C" { - pub fn acoshf(_X: f32) -> f32; -} -extern "C" { - pub fn asinhf(_X: f32) -> f32; -} -extern "C" { - pub fn atanhf(_X: f32) -> f32; -} -extern "C" { - pub fn cbrtf(_X: f32) -> f32; -} -extern "C" { - pub fn _chgsignf(_X: f32) -> f32; -} -extern "C" { - pub fn copysignf(_Number: f32, _Sign: f32) -> f32; -} -extern "C" { - pub fn _copysignf(_Number: f32, _Sign: f32) -> f32; -} -extern "C" { - pub fn erff(_X: f32) -> f32; -} -extern "C" { - pub fn erfcf(_X: f32) -> f32; -} -extern "C" { - pub fn expm1f(_X: f32) -> f32; -} -extern "C" { - pub fn exp2f(_X: f32) -> f32; -} -extern "C" { - pub fn fdimf(_X: f32, _Y: f32) -> f32; -} -extern "C" { - pub fn fmaf(_X: f32, _Y: f32, _Z: f32) -> f32; -} -extern "C" { - pub fn fmaxf(_X: f32, _Y: f32) -> f32; -} -extern "C" { - pub fn fminf(_X: f32, _Y: f32) -> f32; -} -extern "C" { - pub fn _hypotf(_X: f32, _Y: f32) -> f32; -} -extern "C" { - pub fn ilogbf(_X: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn lgammaf(_X: f32) -> f32; -} -extern "C" { - pub fn llrintf(_X: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn llroundf(_X: f32) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn log1pf(_X: f32) -> f32; -} -extern "C" { - pub fn log2f(_X: f32) -> f32; -} -extern "C" { - pub fn logbf(_X: f32) -> f32; -} -extern "C" { - pub fn lrintf(_X: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn lroundf(_X: f32) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn nanf(_X: *const ::std::os::raw::c_char) -> f32; -} -extern "C" { - pub fn nearbyintf(_X: f32) -> f32; -} -extern "C" { - pub fn nextafterf(_X: f32, _Y: f32) -> f32; -} -extern "C" { - pub fn nexttowardf(_X: f32, _Y: f64) -> f32; -} -extern "C" { - pub fn remainderf(_X: f32, _Y: f32) -> f32; -} -extern "C" { - pub fn remquof(_X: f32, _Y: f32, _Z: *mut ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn rintf(_X: f32) -> f32; -} -extern "C" { - pub fn roundf(_X: f32) -> f32; -} -extern "C" { - pub fn scalblnf(_X: f32, _Y: ::std::os::raw::c_long) -> f32; -} -extern "C" { - pub fn scalbnf(_X: f32, _Y: ::std::os::raw::c_int) -> f32; -} -extern "C" { - pub fn tgammaf(_X: f32) -> f32; -} -extern "C" { - pub fn truncf(_X: f32) -> f32; -} -extern "C" { - pub fn _logbf(_X: f32) -> f32; -} -extern "C" { - pub fn _nextafterf(_X: f32, _Y: f32) -> f32; -} -extern "C" { - pub fn _finitef(_X: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _isnanf(_X: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fpclassf(_X: f32) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _set_FMA3_enable(_Flag: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _get_FMA3_enable() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn acosf(_X: f32) -> f32; -} -extern "C" { - pub fn asinf(_X: f32) -> f32; -} -extern "C" { - pub fn atan2f(_Y: f32, _X: f32) -> f32; -} -extern "C" { - pub fn atanf(_X: f32) -> f32; -} -extern "C" { - pub fn ceilf(_X: f32) -> f32; -} -extern "C" { - pub fn cosf(_X: f32) -> f32; -} -extern "C" { - pub fn coshf(_X: f32) -> f32; -} -extern "C" { - pub fn expf(_X: f32) -> f32; -} -extern "C" { - pub fn floorf(_X: f32) -> f32; -} -extern "C" { - pub fn fmodf(_X: f32, _Y: f32) -> f32; -} -extern "C" { - pub fn log10f(_X: f32) -> f32; -} -extern "C" { - pub fn logf(_X: f32) -> f32; -} -extern "C" { - pub fn modff(_X: f32, _Y: *mut f32) -> f32; -} -extern "C" { - pub fn powf(_X: f32, _Y: f32) -> f32; -} -extern "C" { - pub fn sinf(_X: f32) -> f32; -} -extern "C" { - pub fn sinhf(_X: f32) -> f32; -} -extern "C" { - pub fn sqrtf(_X: f32) -> f32; -} -extern "C" { - pub fn tanf(_X: f32) -> f32; -} -extern "C" { - pub fn tanhf(_X: f32) -> f32; -} -extern "C" { - pub fn acoshl(_X: f64) -> f64; -} -extern "C" { - pub fn asinhl(_X: f64) -> f64; -} -extern "C" { - pub fn atanhl(_X: f64) -> f64; -} -extern "C" { - pub fn cbrtl(_X: f64) -> f64; -} -extern "C" { - pub fn copysignl(_Number: f64, _Sign: f64) -> f64; -} -extern "C" { - pub fn erfl(_X: f64) -> f64; -} -extern "C" { - pub fn erfcl(_X: f64) -> f64; -} -extern "C" { - pub fn exp2l(_X: f64) -> f64; -} -extern "C" { - pub fn expm1l(_X: f64) -> f64; -} -extern "C" { - pub fn fdiml(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn fmal(_X: f64, _Y: f64, _Z: f64) -> f64; -} -extern "C" { - pub fn fmaxl(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn fminl(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn ilogbl(_X: f64) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn lgammal(_X: f64) -> f64; -} -extern "C" { - pub fn llrintl(_X: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn llroundl(_X: f64) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn log1pl(_X: f64) -> f64; -} -extern "C" { - pub fn log2l(_X: f64) -> f64; -} -extern "C" { - pub fn logbl(_X: f64) -> f64; -} -extern "C" { - pub fn lrintl(_X: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn lroundl(_X: f64) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn nanl(_X: *const ::std::os::raw::c_char) -> f64; -} -extern "C" { - pub fn nearbyintl(_X: f64) -> f64; -} -extern "C" { - pub fn nextafterl(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn nexttowardl(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn remainderl(_X: f64, _Y: f64) -> f64; -} -extern "C" { - pub fn remquol(_X: f64, _Y: f64, _Z: *mut ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn rintl(_X: f64) -> f64; -} -extern "C" { - pub fn roundl(_X: f64) -> f64; -} -extern "C" { - pub fn scalblnl(_X: f64, _Y: ::std::os::raw::c_long) -> f64; -} -extern "C" { - pub fn scalbnl(_X: f64, _Y: ::std::os::raw::c_int) -> f64; -} -extern "C" { - pub fn tgammal(_X: f64) -> f64; -} -extern "C" { - pub fn truncl(_X: f64) -> f64; -} -extern "C" { - pub static mut HUGE: f64; -} -extern "C" { - pub fn j0(_X: f64) -> f64; -} -extern "C" { - pub fn j1(_X: f64) -> f64; -} -extern "C" { - pub fn jn(_X: ::std::os::raw::c_int, _Y: f64) -> f64; -} -extern "C" { - pub fn y0(_X: f64) -> f64; -} -extern "C" { - pub fn y1(_X: f64) -> f64; -} -extern "C" { - pub fn yn(_X: ::std::os::raw::c_int, _Y: f64) -> f64; -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GlVersion { - OPENGL_11 = 1, - OPENGL_21 = 2, - OPENGL_33 = 3, - OPENGL_ES_20 = 4, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum FramebufferAttachType { - RL_ATTACHMENT_COLOR_CHANNEL0 = 0, - RL_ATTACHMENT_COLOR_CHANNEL1 = 1, - RL_ATTACHMENT_COLOR_CHANNEL2 = 2, - RL_ATTACHMENT_COLOR_CHANNEL3 = 3, - RL_ATTACHMENT_COLOR_CHANNEL4 = 4, - RL_ATTACHMENT_COLOR_CHANNEL5 = 5, - RL_ATTACHMENT_COLOR_CHANNEL6 = 6, - RL_ATTACHMENT_COLOR_CHANNEL7 = 7, - RL_ATTACHMENT_DEPTH = 100, - RL_ATTACHMENT_STENCIL = 200, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum FramebufferAttachTextureType { - RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0, - RL_ATTACHMENT_CUBEMAP_NEGATIVE_X = 1, - RL_ATTACHMENT_CUBEMAP_POSITIVE_Y = 2, - RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y = 3, - RL_ATTACHMENT_CUBEMAP_POSITIVE_Z = 4, - RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z = 5, - RL_ATTACHMENT_TEXTURE2D = 100, - RL_ATTACHMENT_RENDERBUFFER = 200, -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct VertexBuffer { - pub elementsCount: ::std::os::raw::c_int, - pub vCounter: ::std::os::raw::c_int, - pub tcCounter: ::std::os::raw::c_int, - pub cCounter: ::std::os::raw::c_int, - pub vertices: *mut f32, - pub texcoords: *mut f32, - pub colors: *mut ::std::os::raw::c_uchar, - pub indices: *mut ::std::os::raw::c_uint, - pub vaoId: ::std::os::raw::c_uint, - pub vboId: [::std::os::raw::c_uint; 4usize], -} -#[test] -fn bindgen_test_layout_VertexBuffer() { - assert_eq!( - ::std::mem::size_of::(), - 72usize, - concat!("Size of: ", stringify!(VertexBuffer)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(VertexBuffer)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).elementsCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(elementsCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vCounter as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(vCounter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).tcCounter as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(tcCounter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).cCounter as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(cCounter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertices as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(vertices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texcoords as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(texcoords) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).colors as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(colors) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).indices as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(indices) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vaoId as *const _ as usize }, - 48usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(vaoId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vboId as *const _ as usize }, - 52usize, - concat!( - "Offset of field: ", - stringify!(VertexBuffer), - "::", - stringify!(vboId) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct DrawCall { - pub mode: ::std::os::raw::c_int, - pub vertexCount: ::std::os::raw::c_int, - pub vertexAlignment: ::std::os::raw::c_int, - pub textureId: ::std::os::raw::c_uint, -} -#[test] -fn bindgen_test_layout_DrawCall() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(DrawCall)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(DrawCall)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mode as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(DrawCall), - "::", - stringify!(mode) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexCount as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(DrawCall), - "::", - stringify!(vertexCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexAlignment as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(DrawCall), - "::", - stringify!(vertexAlignment) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).textureId as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(DrawCall), - "::", - stringify!(textureId) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct RenderBatch { - pub buffersCount: ::std::os::raw::c_int, - pub currentBuffer: ::std::os::raw::c_int, - pub vertexBuffer: *mut VertexBuffer, - pub draws: *mut DrawCall, - pub drawsCounter: ::std::os::raw::c_int, - pub currentDepth: f32, -} -#[test] -fn bindgen_test_layout_RenderBatch() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(RenderBatch)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(RenderBatch)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).buffersCount as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(buffersCount) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).currentBuffer as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(currentBuffer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vertexBuffer as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(vertexBuffer) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).draws as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(draws) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).drawsCounter as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(drawsCounter) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).currentDepth as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(RenderBatch), - "::", - stringify!(currentDepth) - ) - ); -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum ShaderAttributeDataType { - SHADER_ATTRIB_FLOAT = 0, - SHADER_ATTRIB_VEC2 = 1, - SHADER_ATTRIB_VEC3 = 2, - SHADER_ATTRIB_VEC4 = 3, -} -extern "C" { - pub fn rlMatrixMode(mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlPushMatrix(); -} -extern "C" { - pub fn rlPopMatrix(); -} -extern "C" { - pub fn rlLoadIdentity(); -} -extern "C" { - pub fn rlTranslatef(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlRotatef(angleDeg: f32, x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlScalef(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlMultMatrixf(matf: *mut f32); -} -extern "C" { - pub fn rlFrustum(left: f64, right: f64, bottom: f64, top: f64, znear: f64, zfar: f64); -} -extern "C" { - pub fn rlOrtho(left: f64, right: f64, bottom: f64, top: f64, znear: f64, zfar: f64); -} -extern "C" { - pub fn rlViewport( - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlBegin(mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlEnd(); -} -extern "C" { - pub fn rlVertex2i(x: ::std::os::raw::c_int, y: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlVertex2f(x: f32, y: f32); -} -extern "C" { - pub fn rlVertex3f(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlTexCoord2f(x: f32, y: f32); -} -extern "C" { - pub fn rlNormal3f(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlColor4ub( - r: ::std::os::raw::c_uchar, - g: ::std::os::raw::c_uchar, - b: ::std::os::raw::c_uchar, - a: ::std::os::raw::c_uchar, - ); -} -extern "C" { - pub fn rlColor3f(x: f32, y: f32, z: f32); -} -extern "C" { - pub fn rlColor4f(x: f32, y: f32, z: f32, w: f32); -} -extern "C" { - pub fn rlEnableVertexArray(vaoId: ::std::os::raw::c_uint) -> bool; -} -extern "C" { - pub fn rlDisableVertexArray(); -} -extern "C" { - pub fn rlEnableVertexBuffer(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableVertexBuffer(); -} -extern "C" { - pub fn rlEnableVertexBufferElement(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableVertexBufferElement(); -} -extern "C" { - pub fn rlEnableVertexAttribute(index: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableVertexAttribute(index: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlActiveTextureSlot(slot: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlEnableTexture(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableTexture(); -} -extern "C" { - pub fn rlEnableTextureCubemap(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableTextureCubemap(); -} -extern "C" { - pub fn rlTextureParameters( - id: ::std::os::raw::c_uint, - param: ::std::os::raw::c_int, - value: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlEnableShader(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableShader(); -} -extern "C" { - pub fn rlEnableFramebuffer(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlDisableFramebuffer(); -} -extern "C" { - pub fn rlEnableDepthTest(); -} -extern "C" { - pub fn rlDisableDepthTest(); -} -extern "C" { - pub fn rlEnableDepthMask(); -} -extern "C" { - pub fn rlDisableDepthMask(); -} -extern "C" { - pub fn rlEnableBackfaceCulling(); -} -extern "C" { - pub fn rlDisableBackfaceCulling(); -} -extern "C" { - pub fn rlEnableScissorTest(); -} -extern "C" { - pub fn rlDisableScissorTest(); -} -extern "C" { - pub fn rlScissor( - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlEnableWireMode(); -} -extern "C" { - pub fn rlDisableWireMode(); -} -extern "C" { - pub fn rlSetLineWidth(width: f32); -} -extern "C" { - pub fn rlGetLineWidth() -> f32; -} -extern "C" { - pub fn rlEnableSmoothLines(); -} -extern "C" { - pub fn rlDisableSmoothLines(); -} -extern "C" { - pub fn rlEnableStereoRender(); -} -extern "C" { - pub fn rlDisableStereoRender(); -} -extern "C" { - pub fn rlIsStereoRenderEnabled() -> bool; -} -extern "C" { - pub fn rlClearColor( - r: ::std::os::raw::c_uchar, - g: ::std::os::raw::c_uchar, - b: ::std::os::raw::c_uchar, - a: ::std::os::raw::c_uchar, - ); -} -extern "C" { - pub fn rlClearScreenBuffers(); -} -extern "C" { - pub fn rlCheckErrors(); -} -extern "C" { - pub fn rlSetBlendMode(mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlSetBlendFactors( - glSrcFactor: ::std::os::raw::c_int, - glDstFactor: ::std::os::raw::c_int, - glEquation: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlglInit(width: ::std::os::raw::c_int, height: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlglClose(); -} -extern "C" { - pub fn rlLoadExtensions(loader: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn rlGetVersion() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rlGetFramebufferWidth() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rlGetFramebufferHeight() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rlGetShaderDefault() -> Shader; -} -extern "C" { - pub fn rlGetTextureDefault() -> Texture2D; -} -extern "C" { - pub fn rlLoadRenderBatch( - numBuffers: ::std::os::raw::c_int, - bufferElements: ::std::os::raw::c_int, - ) -> RenderBatch; -} -extern "C" { - pub fn rlUnloadRenderBatch(batch: RenderBatch); -} -extern "C" { - pub fn rlDrawRenderBatch(batch: *mut RenderBatch); -} -extern "C" { - pub fn rlSetRenderBatchActive(batch: *mut RenderBatch); -} -extern "C" { - pub fn rlDrawRenderBatchActive(); -} -extern "C" { - pub fn rlCheckRenderBatchLimit(vCount: ::std::os::raw::c_int) -> bool; -} -extern "C" { - pub fn rlSetTexture(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlLoadVertexArray() -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlLoadVertexBuffer( - buffer: *mut ::std::os::raw::c_void, - size: ::std::os::raw::c_int, - dynamic: bool, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlLoadVertexBufferElement( - buffer: *mut ::std::os::raw::c_void, - size: ::std::os::raw::c_int, - dynamic: bool, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlUpdateVertexBuffer( - bufferId: ::std::os::raw::c_int, - data: *mut ::std::os::raw::c_void, - dataSize: ::std::os::raw::c_int, - offset: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlUnloadVertexArray(vaoId: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlUnloadVertexBuffer(vboId: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlSetVertexAttribute( - index: ::std::os::raw::c_uint, - compSize: ::std::os::raw::c_int, - type_: ::std::os::raw::c_int, - normalized: bool, - stride: ::std::os::raw::c_int, - pointer: *mut ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn rlSetVertexAttributeDivisor( - index: ::std::os::raw::c_uint, - divisor: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlSetVertexAttributeDefault( - locIndex: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - attribType: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlDrawVertexArray(offset: ::std::os::raw::c_int, count: ::std::os::raw::c_int); -} -extern "C" { - pub fn rlDrawVertexArrayElements( - offset: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - buffer: *mut ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn rlDrawVertexArrayInstanced( - offset: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - instances: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlDrawVertexArrayElementsInstanced( - offset: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - buffer: *mut ::std::os::raw::c_void, - instances: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlLoadTexture( - data: *mut ::std::os::raw::c_void, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - mipmapCount: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlLoadTextureDepth( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - useRenderBuffer: bool, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlLoadTextureCubemap( - data: *mut ::std::os::raw::c_void, - size: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlUpdateTexture( - id: ::std::os::raw::c_uint, - offsetX: ::std::os::raw::c_int, - offsetY: ::std::os::raw::c_int, - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - format: ::std::os::raw::c_int, - data: *const ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn rlGetGlTextureFormats( - format: ::std::os::raw::c_int, - glInternalFormat: *mut ::std::os::raw::c_uint, - glFormat: *mut ::std::os::raw::c_uint, - glType: *mut ::std::os::raw::c_uint, - ); -} -extern "C" { - pub fn rlUnloadTexture(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlGenerateMipmaps(texture: *mut Texture2D); -} -extern "C" { - pub fn rlReadTexturePixels(texture: Texture2D) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn rlReadScreenPixels( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_uchar; -} -extern "C" { - pub fn rlLoadFramebuffer( - width: ::std::os::raw::c_int, - height: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlFramebufferAttach( - fboId: ::std::os::raw::c_uint, - texId: ::std::os::raw::c_uint, - attachType: ::std::os::raw::c_int, - texType: ::std::os::raw::c_int, - mipLevel: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlFramebufferComplete(id: ::std::os::raw::c_uint) -> bool; -} -extern "C" { - pub fn rlUnloadFramebuffer(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlLoadShaderCode( - vsCode: *const ::std::os::raw::c_char, - fsCode: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlCompileShader( - shaderCode: *const ::std::os::raw::c_char, - type_: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlLoadShaderProgram( - vShaderId: ::std::os::raw::c_uint, - fShaderId: ::std::os::raw::c_uint, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn rlUnloadShaderProgram(id: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlGetLocationUniform( - shaderId: ::std::os::raw::c_uint, - uniformName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rlGetLocationAttrib( - shaderId: ::std::os::raw::c_uint, - attribName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rlSetUniform( - locIndex: ::std::os::raw::c_int, - value: *const ::std::os::raw::c_void, - uniformType: ::std::os::raw::c_int, - count: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn rlSetUniformMatrix(locIndex: ::std::os::raw::c_int, mat: Matrix); -} -extern "C" { - pub fn rlSetUniformSampler(locIndex: ::std::os::raw::c_int, textureId: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rlSetShader(shader: Shader); -} -extern "C" { - pub fn rlGetMatrixModelview() -> Matrix; -} -extern "C" { - pub fn rlGetMatrixProjection() -> Matrix; -} -extern "C" { - pub fn rlGetMatrixTransform() -> Matrix; -} -extern "C" { - pub fn rlGetMatrixProjectionStereo(eye: ::std::os::raw::c_int) -> Matrix; -} -extern "C" { - pub fn rlGetMatrixViewOffsetStereo(eye: ::std::os::raw::c_int) -> Matrix; -} -extern "C" { - pub fn rlSetMatrixProjection(proj: Matrix); -} -extern "C" { - pub fn rlSetMatrixModelview(view: Matrix); -} -extern "C" { - pub fn rlSetMatrixProjectionStereo(right: Matrix, left: Matrix); -} -extern "C" { - pub fn rlSetMatrixViewOffsetStereo(right: Matrix, left: Matrix); -} -extern "C" { - pub fn rlLoadDrawCube(); -} -extern "C" { - pub fn rlLoadDrawQuad(); -} -extern "C" { - pub fn _calloc_base(_Count: size_t, _Size: size_t) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn calloc( - _Count: ::std::os::raw::c_ulonglong, - _Size: ::std::os::raw::c_ulonglong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _callnewh(_Size: size_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _expand( - _Block: *mut ::std::os::raw::c_void, - _Size: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _free_base(_Block: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn free(_Block: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn _malloc_base(_Size: size_t) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn malloc(_Size: ::std::os::raw::c_ulonglong) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _msize_base(_Block: *mut ::std::os::raw::c_void) -> size_t; -} -extern "C" { - pub fn _msize(_Block: *mut ::std::os::raw::c_void) -> size_t; -} -extern "C" { - pub fn _realloc_base( - _Block: *mut ::std::os::raw::c_void, - _Size: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn realloc( - _Block: *mut ::std::os::raw::c_void, - _Size: ::std::os::raw::c_ulonglong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _recalloc_base( - _Block: *mut ::std::os::raw::c_void, - _Count: size_t, - _Size: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _recalloc( - _Block: *mut ::std::os::raw::c_void, - _Count: size_t, - _Size: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _aligned_free(_Block: *mut ::std::os::raw::c_void); -} -extern "C" { - pub fn _aligned_malloc(_Size: size_t, _Alignment: size_t) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _aligned_offset_malloc( - _Size: size_t, - _Alignment: size_t, - _Offset: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _aligned_msize( - _Block: *mut ::std::os::raw::c_void, - _Alignment: size_t, - _Offset: size_t, - ) -> size_t; -} -extern "C" { - pub fn _aligned_offset_realloc( - _Block: *mut ::std::os::raw::c_void, - _Size: size_t, - _Alignment: size_t, - _Offset: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _aligned_offset_recalloc( - _Block: *mut ::std::os::raw::c_void, - _Count: size_t, - _Size: size_t, - _Alignment: size_t, - _Offset: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _aligned_realloc( - _Block: *mut ::std::os::raw::c_void, - _Size: size_t, - _Alignment: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _aligned_recalloc( - _Block: *mut ::std::os::raw::c_void, - _Count: size_t, - _Size: size_t, - _Alignment: size_t, - ) -> *mut ::std::os::raw::c_void; -} -pub type max_align_t = f64; -pub type _CoreCrtSecureSearchSortCompareFunction = ::std::option::Option< - unsafe extern "C" fn( - arg1: *mut ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - arg3: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, ->; -pub type _CoreCrtNonSecureSearchSortCompareFunction = ::std::option::Option< - unsafe extern "C" fn( - arg1: *const ::std::os::raw::c_void, - arg2: *const ::std::os::raw::c_void, - ) -> ::std::os::raw::c_int, ->; -extern "C" { - pub fn bsearch_s( - _Key: *const ::std::os::raw::c_void, - _Base: *const ::std::os::raw::c_void, - _NumOfElements: rsize_t, - _SizeOfElements: rsize_t, - _CompareFunction: _CoreCrtSecureSearchSortCompareFunction, - _Context: *mut ::std::os::raw::c_void, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn qsort_s( - _Base: *mut ::std::os::raw::c_void, - _NumOfElements: rsize_t, - _SizeOfElements: rsize_t, - _CompareFunction: _CoreCrtSecureSearchSortCompareFunction, - _Context: *mut ::std::os::raw::c_void, - ); -} -extern "C" { - pub fn bsearch( - _Key: *const ::std::os::raw::c_void, - _Base: *const ::std::os::raw::c_void, - _NumOfElements: size_t, - _SizeOfElements: size_t, - _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn qsort( - _Base: *mut ::std::os::raw::c_void, - _NumOfElements: size_t, - _SizeOfElements: size_t, - _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction, - ); -} -extern "C" { - pub fn _lfind_s( - _Key: *const ::std::os::raw::c_void, - _Base: *const ::std::os::raw::c_void, - _NumOfElements: *mut ::std::os::raw::c_uint, - _SizeOfElements: size_t, - _CompareFunction: _CoreCrtSecureSearchSortCompareFunction, - _Context: *mut ::std::os::raw::c_void, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _lfind( - _Key: *const ::std::os::raw::c_void, - _Base: *const ::std::os::raw::c_void, - _NumOfElements: *mut ::std::os::raw::c_uint, - _SizeOfElements: ::std::os::raw::c_uint, - _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _lsearch_s( - _Key: *const ::std::os::raw::c_void, - _Base: *mut ::std::os::raw::c_void, - _NumOfElements: *mut ::std::os::raw::c_uint, - _SizeOfElements: size_t, - _CompareFunction: _CoreCrtSecureSearchSortCompareFunction, - _Context: *mut ::std::os::raw::c_void, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _lsearch( - _Key: *const ::std::os::raw::c_void, - _Base: *mut ::std::os::raw::c_void, - _NumOfElements: *mut ::std::os::raw::c_uint, - _SizeOfElements: ::std::os::raw::c_uint, - _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn lfind( - _Key: *const ::std::os::raw::c_void, - _Base: *const ::std::os::raw::c_void, - _NumOfElements: *mut ::std::os::raw::c_uint, - _SizeOfElements: ::std::os::raw::c_uint, - _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn lsearch( - _Key: *const ::std::os::raw::c_void, - _Base: *mut ::std::os::raw::c_void, - _NumOfElements: *mut ::std::os::raw::c_uint, - _SizeOfElements: ::std::os::raw::c_uint, - _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn _itow_s( - _Value: ::std::os::raw::c_int, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _itow( - _Value: ::std::os::raw::c_int, - _Buffer: *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> *mut wchar_t; -} -extern "C" { - pub fn _ltow_s( - _Value: ::std::os::raw::c_long, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _ltow( - _Value: ::std::os::raw::c_long, - _Buffer: *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> *mut wchar_t; -} -extern "C" { - pub fn _ultow_s( - _Value: ::std::os::raw::c_ulong, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _ultow( - _Value: ::std::os::raw::c_ulong, - _Buffer: *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> *mut wchar_t; -} -extern "C" { - pub fn wcstod(_String: *const wchar_t, _EndPtr: *mut *mut wchar_t) -> f64; -} -extern "C" { - pub fn _wcstod_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Locale: _locale_t, - ) -> f64; -} -extern "C" { - pub fn wcstol( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn _wcstol_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn wcstoll( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _wcstoll_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn wcstoul( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn _wcstoul_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn wcstoull( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _wcstoull_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn wcstold(_String: *const wchar_t, _EndPtr: *mut *mut wchar_t) -> f64; -} -extern "C" { - pub fn _wcstold_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Locale: _locale_t, - ) -> f64; -} -extern "C" { - pub fn wcstof(_String: *const wchar_t, _EndPtr: *mut *mut wchar_t) -> f32; -} -extern "C" { - pub fn _wcstof_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Locale: _locale_t, - ) -> f32; -} -extern "C" { - pub fn _wtof(_String: *const wchar_t) -> f64; -} -extern "C" { - pub fn _wtof_l(_String: *const wchar_t, _Locale: _locale_t) -> f64; -} -extern "C" { - pub fn _wtoi(_String: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wtoi_l(_String: *const wchar_t, _Locale: _locale_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wtol(_String: *const wchar_t) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn _wtol_l(_String: *const wchar_t, _Locale: _locale_t) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn _wtoll(_String: *const wchar_t) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _wtoll_l(_String: *const wchar_t, _Locale: _locale_t) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _i64tow_s( - _Value: ::std::os::raw::c_longlong, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _i64tow( - _Value: ::std::os::raw::c_longlong, - _Buffer: *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> *mut wchar_t; -} -extern "C" { - pub fn _ui64tow_s( - _Value: ::std::os::raw::c_ulonglong, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _ui64tow( - _Value: ::std::os::raw::c_ulonglong, - _Buffer: *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> *mut wchar_t; -} -extern "C" { - pub fn _wtoi64(_String: *const wchar_t) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _wtoi64_l(_String: *const wchar_t, _Locale: _locale_t) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _wcstoi64( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _wcstoi64_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _wcstoui64( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _wcstoui64_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _wfullpath( - _Buffer: *mut wchar_t, - _Path: *const wchar_t, - _BufferCount: size_t, - ) -> *mut wchar_t; -} -extern "C" { - pub fn _wmakepath_s( - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _Drive: *const wchar_t, - _Dir: *const wchar_t, - _Filename: *const wchar_t, - _Ext: *const wchar_t, - ) -> errno_t; -} -extern "C" { - pub fn _wmakepath( - _Buffer: *mut wchar_t, - _Drive: *const wchar_t, - _Dir: *const wchar_t, - _Filename: *const wchar_t, - _Ext: *const wchar_t, - ); -} -extern "C" { - pub fn _wperror(_ErrorMessage: *const wchar_t); -} -extern "C" { - pub fn _wsplitpath( - _FullPath: *const wchar_t, - _Drive: *mut wchar_t, - _Dir: *mut wchar_t, - _Filename: *mut wchar_t, - _Ext: *mut wchar_t, - ); -} -extern "C" { - pub fn _wsplitpath_s( - _FullPath: *const wchar_t, - _Drive: *mut wchar_t, - _DriveCount: size_t, - _Dir: *mut wchar_t, - _DirCount: size_t, - _Filename: *mut wchar_t, - _FilenameCount: size_t, - _Ext: *mut wchar_t, - _ExtCount: size_t, - ) -> errno_t; -} -extern "C" { - pub fn _wdupenv_s( - _Buffer: *mut *mut wchar_t, - _BufferCount: *mut size_t, - _VarName: *const wchar_t, - ) -> errno_t; -} -extern "C" { - pub fn _wgetenv(_VarName: *const wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn _wgetenv_s( - _RequiredCount: *mut size_t, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _VarName: *const wchar_t, - ) -> errno_t; -} -extern "C" { - pub fn _wputenv(_EnvString: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wputenv_s(_Name: *const wchar_t, _Value: *const wchar_t) -> errno_t; -} -extern "C" { - pub fn _wsearchenv_s( - _Filename: *const wchar_t, - _VarName: *const wchar_t, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - ) -> errno_t; -} -extern "C" { - pub fn _wsearchenv( - _Filename: *const wchar_t, - _VarName: *const wchar_t, - _ResultPath: *mut wchar_t, - ); -} -extern "C" { - pub fn _wsystem(_Command: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _swab( - _Buf1: *mut ::std::os::raw::c_char, - _Buf2: *mut ::std::os::raw::c_char, - _SizeInBytes: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn exit(_Code: ::std::os::raw::c_int); -} -extern "C" { - pub fn _exit(_Code: ::std::os::raw::c_int); -} -extern "C" { - pub fn _Exit(_Code: ::std::os::raw::c_int); -} -extern "C" { - pub fn quick_exit(_Code: ::std::os::raw::c_int); -} -extern "C" { - pub fn abort(); -} -extern "C" { - pub fn _set_abort_behavior( - _Flags: ::std::os::raw::c_uint, - _Mask: ::std::os::raw::c_uint, - ) -> ::std::os::raw::c_uint; -} -pub type _onexit_t = ::std::option::Option ::std::os::raw::c_int>; -extern "C" { - pub fn atexit(arg1: ::std::option::Option) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _onexit(_Func: _onexit_t) -> _onexit_t; -} -extern "C" { - pub fn at_quick_exit( - arg1: ::std::option::Option, - ) -> ::std::os::raw::c_int; -} -pub type _purecall_handler = ::std::option::Option; -pub type _invalid_parameter_handler = ::std::option::Option< - unsafe extern "C" fn( - arg1: *const wchar_t, - arg2: *const wchar_t, - arg3: *const wchar_t, - arg4: ::std::os::raw::c_uint, - arg5: usize, - ), ->; -extern "C" { - pub fn _set_purecall_handler(_Handler: _purecall_handler) -> _purecall_handler; -} -extern "C" { - pub fn _get_purecall_handler() -> _purecall_handler; -} -extern "C" { - pub fn _set_invalid_parameter_handler( - _Handler: _invalid_parameter_handler, - ) -> _invalid_parameter_handler; -} -extern "C" { - pub fn _get_invalid_parameter_handler() -> _invalid_parameter_handler; -} -extern "C" { - pub fn _set_thread_local_invalid_parameter_handler( - _Handler: _invalid_parameter_handler, - ) -> _invalid_parameter_handler; -} -extern "C" { - pub fn _get_thread_local_invalid_parameter_handler() -> _invalid_parameter_handler; -} -extern "C" { - pub fn _set_error_mode(_Mode: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _errno() -> *mut ::std::os::raw::c_int; -} -extern "C" { - pub fn _set_errno(_Value: ::std::os::raw::c_int) -> errno_t; -} -extern "C" { - pub fn _get_errno(_Value: *mut ::std::os::raw::c_int) -> errno_t; -} -extern "C" { - pub fn __doserrno() -> *mut ::std::os::raw::c_ulong; -} -extern "C" { - pub fn _set_doserrno(_Value: ::std::os::raw::c_ulong) -> errno_t; -} -extern "C" { - pub fn _get_doserrno(_Value: *mut ::std::os::raw::c_ulong) -> errno_t; -} -extern "C" { - pub fn __sys_errlist() -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn __sys_nerr() -> *mut ::std::os::raw::c_int; -} -extern "C" { - pub fn perror(_ErrMsg: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn __p__pgmptr() -> *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn __p__wpgmptr() -> *mut *mut wchar_t; -} -extern "C" { - pub fn __p__fmode() -> *mut ::std::os::raw::c_int; -} -extern "C" { - pub fn _get_pgmptr(_Value: *mut *mut ::std::os::raw::c_char) -> errno_t; -} -extern "C" { - pub fn _get_wpgmptr(_Value: *mut *mut wchar_t) -> errno_t; -} -extern "C" { - pub fn _set_fmode(_Mode: ::std::os::raw::c_int) -> errno_t; -} -extern "C" { - pub fn _get_fmode(_PMode: *mut ::std::os::raw::c_int) -> errno_t; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _div_t { - pub quot: ::std::os::raw::c_int, - pub rem: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout__div_t() { - assert_eq!( - ::std::mem::size_of::<_div_t>(), - 8usize, - concat!("Size of: ", stringify!(_div_t)) - ); - assert_eq!( - ::std::mem::align_of::<_div_t>(), - 4usize, - concat!("Alignment of ", stringify!(_div_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_div_t>())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_div_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_div_t>())).rem as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(_div_t), - "::", - stringify!(rem) - ) - ); -} -pub type div_t = _div_t; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _ldiv_t { - pub quot: ::std::os::raw::c_long, - pub rem: ::std::os::raw::c_long, -} -#[test] -fn bindgen_test_layout__ldiv_t() { - assert_eq!( - ::std::mem::size_of::<_ldiv_t>(), - 8usize, - concat!("Size of: ", stringify!(_ldiv_t)) - ); - assert_eq!( - ::std::mem::align_of::<_ldiv_t>(), - 4usize, - concat!("Alignment of ", stringify!(_ldiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_ldiv_t>())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_ldiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_ldiv_t>())).rem as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(_ldiv_t), - "::", - stringify!(rem) - ) - ); -} -pub type ldiv_t = _ldiv_t; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _lldiv_t { - pub quot: ::std::os::raw::c_longlong, - pub rem: ::std::os::raw::c_longlong, -} -#[test] -fn bindgen_test_layout__lldiv_t() { - assert_eq!( - ::std::mem::size_of::<_lldiv_t>(), - 16usize, - concat!("Size of: ", stringify!(_lldiv_t)) - ); - assert_eq!( - ::std::mem::align_of::<_lldiv_t>(), - 8usize, - concat!("Alignment of ", stringify!(_lldiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_lldiv_t>())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_lldiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_lldiv_t>())).rem as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_lldiv_t), - "::", - stringify!(rem) - ) - ); -} -pub type lldiv_t = _lldiv_t; -extern "C" { - pub fn _abs64(_Number: ::std::os::raw::c_longlong) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _byteswap_ushort(_Number: ::std::os::raw::c_ushort) -> ::std::os::raw::c_ushort; -} -extern "C" { - pub fn _byteswap_ulong(_Number: ::std::os::raw::c_ulong) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn _byteswap_uint64(_Number: ::std::os::raw::c_ulonglong) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn div(_Numerator: ::std::os::raw::c_int, _Denominator: ::std::os::raw::c_int) -> div_t; -} -extern "C" { - pub fn ldiv(_Numerator: ::std::os::raw::c_long, _Denominator: ::std::os::raw::c_long) - -> ldiv_t; -} -extern "C" { - pub fn lldiv( - _Numerator: ::std::os::raw::c_longlong, - _Denominator: ::std::os::raw::c_longlong, - ) -> lldiv_t; -} -extern "C" { - pub fn _rotl( - _Value: ::std::os::raw::c_uint, - _Shift: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn _lrotl( - _Value: ::std::os::raw::c_ulong, - _Shift: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn _rotl64( - _Value: ::std::os::raw::c_ulonglong, - _Shift: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _rotr( - _Value: ::std::os::raw::c_uint, - _Shift: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_uint; -} -extern "C" { - pub fn _lrotr( - _Value: ::std::os::raw::c_ulong, - _Shift: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn _rotr64( - _Value: ::std::os::raw::c_ulonglong, - _Shift: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn srand(_Seed: ::std::os::raw::c_uint); -} -extern "C" { - pub fn rand() -> ::std::os::raw::c_int; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _LDOUBLE { - pub ld: [::std::os::raw::c_uchar; 10usize], -} -#[test] -fn bindgen_test_layout__LDOUBLE() { - assert_eq!( - ::std::mem::size_of::<_LDOUBLE>(), - 10usize, - concat!("Size of: ", stringify!(_LDOUBLE)) - ); - assert_eq!( - ::std::mem::align_of::<_LDOUBLE>(), - 1usize, - concat!("Alignment of ", stringify!(_LDOUBLE)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_LDOUBLE>())).ld as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_LDOUBLE), - "::", - stringify!(ld) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _CRT_DOUBLE { - pub x: f64, -} -#[test] -fn bindgen_test_layout__CRT_DOUBLE() { - assert_eq!( - ::std::mem::size_of::<_CRT_DOUBLE>(), - 8usize, - concat!("Size of: ", stringify!(_CRT_DOUBLE)) - ); - assert_eq!( - ::std::mem::align_of::<_CRT_DOUBLE>(), - 8usize, - concat!("Alignment of ", stringify!(_CRT_DOUBLE)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_CRT_DOUBLE>())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_CRT_DOUBLE), - "::", - stringify!(x) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _CRT_FLOAT { - pub f: f32, -} -#[test] -fn bindgen_test_layout__CRT_FLOAT() { - assert_eq!( - ::std::mem::size_of::<_CRT_FLOAT>(), - 4usize, - concat!("Size of: ", stringify!(_CRT_FLOAT)) - ); - assert_eq!( - ::std::mem::align_of::<_CRT_FLOAT>(), - 4usize, - concat!("Alignment of ", stringify!(_CRT_FLOAT)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_CRT_FLOAT>())).f as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_CRT_FLOAT), - "::", - stringify!(f) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _LONGDOUBLE { - pub x: f64, -} -#[test] -fn bindgen_test_layout__LONGDOUBLE() { - assert_eq!( - ::std::mem::size_of::<_LONGDOUBLE>(), - 8usize, - concat!("Size of: ", stringify!(_LONGDOUBLE)) - ); - assert_eq!( - ::std::mem::align_of::<_LONGDOUBLE>(), - 8usize, - concat!("Alignment of ", stringify!(_LONGDOUBLE)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_LONGDOUBLE>())).x as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_LONGDOUBLE), - "::", - stringify!(x) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _LDBL12 { - pub ld12: [::std::os::raw::c_uchar; 12usize], -} -#[test] -fn bindgen_test_layout__LDBL12() { - assert_eq!( - ::std::mem::size_of::<_LDBL12>(), - 12usize, - concat!("Size of: ", stringify!(_LDBL12)) - ); - assert_eq!( - ::std::mem::align_of::<_LDBL12>(), - 1usize, - concat!("Alignment of ", stringify!(_LDBL12)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_LDBL12>())).ld12 as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_LDBL12), - "::", - stringify!(ld12) - ) - ); -} -extern "C" { - pub fn atoi(_String: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn atol(_String: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn atoll(_String: *const ::std::os::raw::c_char) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _atoi64(_String: *const ::std::os::raw::c_char) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _atoi_l( - _String: *const ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _atol_l( - _String: *const ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn _atoll_l( - _String: *const ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _atoi64_l( - _String: *const ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _atoflt( - _Result: *mut _CRT_FLOAT, - _String: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _atodbl( - _Result: *mut _CRT_DOUBLE, - _String: *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _atoldbl( - _Result: *mut _LDOUBLE, - _String: *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _atoflt_l( - _Result: *mut _CRT_FLOAT, - _String: *const ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _atodbl_l( - _Result: *mut _CRT_DOUBLE, - _String: *mut ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _atoldbl_l( - _Result: *mut _LDOUBLE, - _String: *mut ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strtof( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - ) -> f32; -} -extern "C" { - pub fn _strtof_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> f32; -} -extern "C" { - pub fn strtod( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - ) -> f64; -} -extern "C" { - pub fn _strtod_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> f64; -} -extern "C" { - pub fn strtold( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - ) -> f64; -} -extern "C" { - pub fn _strtold_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> f64; -} -extern "C" { - pub fn strtol( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn _strtol_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn strtoll( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _strtoll_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn strtoul( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn _strtoul_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_ulong; -} -extern "C" { - pub fn strtoull( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _strtoull_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _strtoi64( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _strtoi64_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _strtoui64( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _strtoui64_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _itoa_s( - _Value: ::std::os::raw::c_int, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _itoa( - _Value: ::std::os::raw::c_int, - _Buffer: *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _ltoa_s( - _Value: ::std::os::raw::c_long, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _ltoa( - _Value: ::std::os::raw::c_long, - _Buffer: *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _ultoa_s( - _Value: ::std::os::raw::c_ulong, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _ultoa( - _Value: ::std::os::raw::c_ulong, - _Buffer: *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _i64toa_s( - _Value: ::std::os::raw::c_longlong, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _i64toa( - _Value: ::std::os::raw::c_longlong, - _Buffer: *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _ui64toa_s( - _Value: ::std::os::raw::c_ulonglong, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Radix: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _ui64toa( - _Value: ::std::os::raw::c_ulonglong, - _Buffer: *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _ecvt_s( - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Value: f64, - _DigitCount: ::std::os::raw::c_int, - _PtDec: *mut ::std::os::raw::c_int, - _PtSign: *mut ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _ecvt( - _Value: f64, - _DigitCount: ::std::os::raw::c_int, - _PtDec: *mut ::std::os::raw::c_int, - _PtSign: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _fcvt_s( - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Value: f64, - _FractionalDigitCount: ::std::os::raw::c_int, - _PtDec: *mut ::std::os::raw::c_int, - _PtSign: *mut ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _fcvt( - _Value: f64, - _FractionalDigitCount: ::std::os::raw::c_int, - _PtDec: *mut ::std::os::raw::c_int, - _PtSign: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _gcvt_s( - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Value: f64, - _DigitCount: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _gcvt( - _Value: f64, - _DigitCount: ::std::os::raw::c_int, - _Buffer: *mut ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ___mb_cur_max_func() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ___mb_cur_max_l_func(_Locale: _locale_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mblen(_Ch: *const ::std::os::raw::c_char, _MaxCount: size_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _mblen_l( - _Ch: *const ::std::os::raw::c_char, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _mbstrlen(_String: *const ::std::os::raw::c_char) -> size_t; -} -extern "C" { - pub fn _mbstrlen_l(_String: *const ::std::os::raw::c_char, _Locale: _locale_t) -> size_t; -} -extern "C" { - pub fn _mbstrnlen(_String: *const ::std::os::raw::c_char, _MaxCount: size_t) -> size_t; -} -extern "C" { - pub fn _mbstrnlen_l( - _String: *const ::std::os::raw::c_char, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> size_t; -} -extern "C" { - pub fn mbtowc( - _DstCh: *mut wchar_t, - _SrcCh: *const ::std::os::raw::c_char, - _SrcSizeInBytes: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _mbtowc_l( - _DstCh: *mut wchar_t, - _SrcCh: *const ::std::os::raw::c_char, - _SrcSizeInBytes: size_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn mbstowcs_s( - _PtNumOfCharConverted: *mut size_t, - _DstBuf: *mut wchar_t, - _SizeInWords: size_t, - _SrcBuf: *const ::std::os::raw::c_char, - _MaxCount: size_t, - ) -> errno_t; -} -extern "C" { - pub fn mbstowcs( - _Dest: *mut wchar_t, - _Source: *const ::std::os::raw::c_char, - _MaxCount: size_t, - ) -> size_t; -} -extern "C" { - pub fn _mbstowcs_s_l( - _PtNumOfCharConverted: *mut size_t, - _DstBuf: *mut wchar_t, - _SizeInWords: size_t, - _SrcBuf: *const ::std::os::raw::c_char, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> errno_t; -} -extern "C" { - pub fn _mbstowcs_l( - _Dest: *mut wchar_t, - _Source: *const ::std::os::raw::c_char, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> size_t; -} -extern "C" { - pub fn wctomb(_MbCh: *mut ::std::os::raw::c_char, _WCh: wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wctomb_l( - _MbCh: *mut ::std::os::raw::c_char, - _WCh: wchar_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wctomb_s( - _SizeConverted: *mut ::std::os::raw::c_int, - _MbCh: *mut ::std::os::raw::c_char, - _SizeInBytes: rsize_t, - _WCh: wchar_t, - ) -> errno_t; -} -extern "C" { - pub fn _wctomb_s_l( - _SizeConverted: *mut ::std::os::raw::c_int, - _MbCh: *mut ::std::os::raw::c_char, - _SizeInBytes: size_t, - _WCh: wchar_t, - _Locale: _locale_t, - ) -> errno_t; -} -extern "C" { - pub fn wcstombs_s( - _PtNumOfCharConverted: *mut size_t, - _Dst: *mut ::std::os::raw::c_char, - _DstSizeInBytes: size_t, - _Src: *const wchar_t, - _MaxCountInBytes: size_t, - ) -> errno_t; -} -extern "C" { - pub fn wcstombs( - _Dest: *mut ::std::os::raw::c_char, - _Source: *const wchar_t, - _MaxCount: size_t, - ) -> size_t; -} -extern "C" { - pub fn _wcstombs_s_l( - _PtNumOfCharConverted: *mut size_t, - _Dst: *mut ::std::os::raw::c_char, - _DstSizeInBytes: size_t, - _Src: *const wchar_t, - _MaxCountInBytes: size_t, - _Locale: _locale_t, - ) -> errno_t; -} -extern "C" { - pub fn _wcstombs_l( - _Dest: *mut ::std::os::raw::c_char, - _Source: *const wchar_t, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> size_t; -} -extern "C" { - pub fn _fullpath( - _Buffer: *mut ::std::os::raw::c_char, - _Path: *const ::std::os::raw::c_char, - _BufferCount: size_t, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _makepath_s( - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Drive: *const ::std::os::raw::c_char, - _Dir: *const ::std::os::raw::c_char, - _Filename: *const ::std::os::raw::c_char, - _Ext: *const ::std::os::raw::c_char, - ) -> errno_t; -} -extern "C" { - pub fn _makepath( - _Buffer: *mut ::std::os::raw::c_char, - _Drive: *const ::std::os::raw::c_char, - _Dir: *const ::std::os::raw::c_char, - _Filename: *const ::std::os::raw::c_char, - _Ext: *const ::std::os::raw::c_char, - ); -} -extern "C" { - pub fn _splitpath( - _FullPath: *const ::std::os::raw::c_char, - _Drive: *mut ::std::os::raw::c_char, - _Dir: *mut ::std::os::raw::c_char, - _Filename: *mut ::std::os::raw::c_char, - _Ext: *mut ::std::os::raw::c_char, - ); -} -extern "C" { - pub fn _splitpath_s( - _FullPath: *const ::std::os::raw::c_char, - _Drive: *mut ::std::os::raw::c_char, - _DriveCount: size_t, - _Dir: *mut ::std::os::raw::c_char, - _DirCount: size_t, - _Filename: *mut ::std::os::raw::c_char, - _FilenameCount: size_t, - _Ext: *mut ::std::os::raw::c_char, - _ExtCount: size_t, - ) -> errno_t; -} -extern "C" { - pub fn getenv_s( - _RequiredCount: *mut size_t, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: rsize_t, - _VarName: *const ::std::os::raw::c_char, - ) -> errno_t; -} -extern "C" { - pub fn __p___argc() -> *mut ::std::os::raw::c_int; -} -extern "C" { - pub fn __p___argv() -> *mut *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn __p___wargv() -> *mut *mut *mut wchar_t; -} -extern "C" { - pub fn __p__environ() -> *mut *mut *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn __p__wenviron() -> *mut *mut *mut wchar_t; -} -extern "C" { - pub fn getenv(_VarName: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _dupenv_s( - _Buffer: *mut *mut ::std::os::raw::c_char, - _BufferCount: *mut size_t, - _VarName: *const ::std::os::raw::c_char, - ) -> errno_t; -} -extern "C" { - pub fn system(_Command: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _putenv(_EnvString: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _putenv_s( - _Name: *const ::std::os::raw::c_char, - _Value: *const ::std::os::raw::c_char, - ) -> errno_t; -} -extern "C" { - pub fn _searchenv_s( - _Filename: *const ::std::os::raw::c_char, - _VarName: *const ::std::os::raw::c_char, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - ) -> errno_t; -} -extern "C" { - pub fn _searchenv( - _Filename: *const ::std::os::raw::c_char, - _VarName: *const ::std::os::raw::c_char, - _Buffer: *mut ::std::os::raw::c_char, - ); -} -extern "C" { - pub fn _seterrormode(_Mode: ::std::os::raw::c_int); -} -extern "C" { - pub fn _beep(_Frequency: ::std::os::raw::c_uint, _Duration: ::std::os::raw::c_uint); -} -extern "C" { - pub fn _sleep(_Duration: ::std::os::raw::c_ulong); -} -extern "C" { - pub fn ecvt( - _Value: f64, - _DigitCount: ::std::os::raw::c_int, - _PtDec: *mut ::std::os::raw::c_int, - _PtSign: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fcvt( - _Value: f64, - _FractionalDigitCount: ::std::os::raw::c_int, - _PtDec: *mut ::std::os::raw::c_int, - _PtSign: *mut ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn gcvt( - _Value: f64, - _DigitCount: ::std::os::raw::c_int, - _DstBuf: *mut ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn itoa( - _Value: ::std::os::raw::c_int, - _Buffer: *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ltoa( - _Value: ::std::os::raw::c_long, - _Buffer: *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn swab( - _Buf1: *mut ::std::os::raw::c_char, - _Buf2: *mut ::std::os::raw::c_char, - _SizeInBytes: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn ultoa( - _Value: ::std::os::raw::c_ulong, - _Buffer: *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn putenv(_EnvString: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn onexit(_Func: _onexit_t) -> _onexit_t; -} -extern "C" { - pub fn memchr( - _Buf: *const ::std::os::raw::c_void, - _Val: ::std::os::raw::c_int, - _MaxCount: ::std::os::raw::c_ulonglong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memcmp( - _Buf1: *const ::std::os::raw::c_void, - _Buf2: *const ::std::os::raw::c_void, - _Size: ::std::os::raw::c_ulonglong, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn memcpy( - _Dst: *mut ::std::os::raw::c_void, - _Src: *const ::std::os::raw::c_void, - _Size: ::std::os::raw::c_ulonglong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memmove( - _Dst: *mut ::std::os::raw::c_void, - _Src: *const ::std::os::raw::c_void, - _Size: ::std::os::raw::c_ulonglong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memset( - _Dst: *mut ::std::os::raw::c_void, - _Val: ::std::os::raw::c_int, - _Size: ::std::os::raw::c_ulonglong, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn strchr( - _Str: *const ::std::os::raw::c_char, - _Val: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strrchr( - _Str: *const ::std::os::raw::c_char, - _Ch: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strstr( - _Str: *const ::std::os::raw::c_char, - _SubStr: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn wcschr( - _Str: *const ::std::os::raw::c_ushort, - _Ch: ::std::os::raw::c_ushort, - ) -> *mut ::std::os::raw::c_ushort; -} -extern "C" { - pub fn wcsrchr(_Str: *const wchar_t, _Ch: wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcsstr(_Str: *const wchar_t, _SubStr: *const wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn _memicmp( - _Buf1: *const ::std::os::raw::c_void, - _Buf2: *const ::std::os::raw::c_void, - _Size: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _memicmp_l( - _Buf1: *const ::std::os::raw::c_void, - _Buf2: *const ::std::os::raw::c_void, - _Size: size_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn memccpy( - _Dst: *mut ::std::os::raw::c_void, - _Src: *const ::std::os::raw::c_void, - _Val: ::std::os::raw::c_int, - _Size: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn memicmp( - _Buf1: *const ::std::os::raw::c_void, - _Buf2: *const ::std::os::raw::c_void, - _Size: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wcscat_s( - _Destination: *mut wchar_t, - _SizeInWords: rsize_t, - _Source: *const wchar_t, - ) -> errno_t; -} -extern "C" { - pub fn wcscpy_s( - _Destination: *mut wchar_t, - _SizeInWords: rsize_t, - _Source: *const wchar_t, - ) -> errno_t; -} -extern "C" { - pub fn wcsncat_s( - _Destination: *mut wchar_t, - _SizeInWords: rsize_t, - _Source: *const wchar_t, - _MaxCount: rsize_t, - ) -> errno_t; -} -extern "C" { - pub fn wcsncpy_s( - _Destination: *mut wchar_t, - _SizeInWords: rsize_t, - _Source: *const wchar_t, - _MaxCount: rsize_t, - ) -> errno_t; -} -extern "C" { - pub fn wcstok_s( - _String: *mut wchar_t, - _Delimiter: *const wchar_t, - _Context: *mut *mut wchar_t, - ) -> *mut wchar_t; -} -extern "C" { - pub fn _wcsdup(_String: *const wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcscat(_Destination: *mut wchar_t, _Source: *const wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcscmp( - _String1: *const ::std::os::raw::c_ushort, - _String2: *const ::std::os::raw::c_ushort, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wcscpy(_Destination: *mut wchar_t, _Source: *const wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcscspn(_String: *const wchar_t, _Control: *const wchar_t) -> size_t; -} -extern "C" { - pub fn wcslen(_String: *const ::std::os::raw::c_ushort) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn wcsnlen(_Source: *const wchar_t, _MaxCount: size_t) -> size_t; -} -extern "C" { - pub fn wcsncat( - _Destination: *mut wchar_t, - _Source: *const wchar_t, - _Count: size_t, - ) -> *mut wchar_t; -} -extern "C" { - pub fn wcsncmp( - _String1: *const ::std::os::raw::c_ushort, - _String2: *const ::std::os::raw::c_ushort, - _MaxCount: ::std::os::raw::c_ulonglong, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wcsncpy( - _Destination: *mut wchar_t, - _Source: *const wchar_t, - _Count: size_t, - ) -> *mut wchar_t; -} -extern "C" { - pub fn wcspbrk(_String: *const wchar_t, _Control: *const wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcsspn(_String: *const wchar_t, _Control: *const wchar_t) -> size_t; -} -extern "C" { - pub fn wcstok( - _String: *mut wchar_t, - _Delimiter: *const wchar_t, - _Context: *mut *mut wchar_t, - ) -> *mut wchar_t; -} -extern "C" { - pub fn _wcserror(_ErrorNumber: ::std::os::raw::c_int) -> *mut wchar_t; -} -extern "C" { - pub fn _wcserror_s( - _Buffer: *mut wchar_t, - _SizeInWords: size_t, - _ErrorNumber: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn __wcserror(_String: *const wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn __wcserror_s( - _Buffer: *mut wchar_t, - _SizeInWords: size_t, - _ErrorMessage: *const wchar_t, - ) -> errno_t; -} -extern "C" { - pub fn _wcsicmp(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsicmp_l( - _String1: *const wchar_t, - _String2: *const wchar_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsnicmp( - _String1: *const wchar_t, - _String2: *const wchar_t, - _MaxCount: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsnicmp_l( - _String1: *const wchar_t, - _String2: *const wchar_t, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsnset_s( - _Destination: *mut wchar_t, - _SizeInWords: size_t, - _Value: wchar_t, - _MaxCount: size_t, - ) -> errno_t; -} -extern "C" { - pub fn _wcsnset(_String: *mut wchar_t, _Value: wchar_t, _MaxCount: size_t) -> *mut wchar_t; -} -extern "C" { - pub fn _wcsrev(_String: *mut wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn _wcsset_s(_Destination: *mut wchar_t, _SizeInWords: size_t, _Value: wchar_t) -> errno_t; -} -extern "C" { - pub fn _wcsset(_String: *mut wchar_t, _Value: wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn _wcslwr_s(_String: *mut wchar_t, _SizeInWords: size_t) -> errno_t; -} -extern "C" { - pub fn _wcslwr(_String: *mut wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn _wcslwr_s_l(_String: *mut wchar_t, _SizeInWords: size_t, _Locale: _locale_t) -> errno_t; -} -extern "C" { - pub fn _wcslwr_l(_String: *mut wchar_t, _Locale: _locale_t) -> *mut wchar_t; -} -extern "C" { - pub fn _wcsupr_s(_String: *mut wchar_t, _Size: size_t) -> errno_t; -} -extern "C" { - pub fn _wcsupr(_String: *mut wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn _wcsupr_s_l(_String: *mut wchar_t, _Size: size_t, _Locale: _locale_t) -> errno_t; -} -extern "C" { - pub fn _wcsupr_l(_String: *mut wchar_t, _Locale: _locale_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcsxfrm( - _Destination: *mut wchar_t, - _Source: *const wchar_t, - _MaxCount: size_t, - ) -> size_t; -} -extern "C" { - pub fn _wcsxfrm_l( - _Destination: *mut wchar_t, - _Source: *const wchar_t, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> size_t; -} -extern "C" { - pub fn wcscoll(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcscoll_l( - _String1: *const wchar_t, - _String2: *const wchar_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsicoll(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsicoll_l( - _String1: *const wchar_t, - _String2: *const wchar_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsncoll( - _String1: *const wchar_t, - _String2: *const wchar_t, - _MaxCount: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsncoll_l( - _String1: *const wchar_t, - _String2: *const wchar_t, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsnicoll( - _String1: *const wchar_t, - _String2: *const wchar_t, - _MaxCount: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wcsnicoll_l( - _String1: *const wchar_t, - _String2: *const wchar_t, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wcsdup(_String: *const wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcsicmp(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wcsnicmp( - _String1: *const wchar_t, - _String2: *const wchar_t, - _MaxCount: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn wcsnset(_String: *mut wchar_t, _Value: wchar_t, _MaxCount: size_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcsrev(_String: *mut wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcsset(_String: *mut wchar_t, _Value: wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcslwr(_String: *mut wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcsupr(_String: *mut wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn wcsicoll(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strcpy_s( - _Destination: *mut ::std::os::raw::c_char, - _SizeInBytes: rsize_t, - _Source: *const ::std::os::raw::c_char, - ) -> errno_t; -} -extern "C" { - pub fn strcat_s( - _Destination: *mut ::std::os::raw::c_char, - _SizeInBytes: rsize_t, - _Source: *const ::std::os::raw::c_char, - ) -> errno_t; -} -extern "C" { - pub fn strerror_s( - _Buffer: *mut ::std::os::raw::c_char, - _SizeInBytes: size_t, - _ErrorNumber: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn strncat_s( - _Destination: *mut ::std::os::raw::c_char, - _SizeInBytes: rsize_t, - _Source: *const ::std::os::raw::c_char, - _MaxCount: rsize_t, - ) -> errno_t; -} -extern "C" { - pub fn strncpy_s( - _Destination: *mut ::std::os::raw::c_char, - _SizeInBytes: rsize_t, - _Source: *const ::std::os::raw::c_char, - _MaxCount: rsize_t, - ) -> errno_t; -} -extern "C" { - pub fn strtok_s( - _String: *mut ::std::os::raw::c_char, - _Delimiter: *const ::std::os::raw::c_char, - _Context: *mut *mut ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _memccpy( - _Dst: *mut ::std::os::raw::c_void, - _Src: *const ::std::os::raw::c_void, - _Val: ::std::os::raw::c_int, - _MaxCount: size_t, - ) -> *mut ::std::os::raw::c_void; -} -extern "C" { - pub fn strcat( - _Destination: *mut ::std::os::raw::c_char, - _Source: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcmp( - _Str1: *const ::std::os::raw::c_char, - _Str2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _strcmpi( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strcoll( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _strcoll_l( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strcpy( - _Destination: *mut ::std::os::raw::c_char, - _Source: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcspn( - _Str: *const ::std::os::raw::c_char, - _Control: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _strdup(_Source: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _strerror(_ErrorMessage: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _strerror_s( - _Buffer: *mut ::std::os::raw::c_char, - _SizeInBytes: size_t, - _ErrorMessage: *const ::std::os::raw::c_char, - ) -> errno_t; -} -extern "C" { - pub fn strerror(_ErrorMessage: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _stricmp( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _stricoll( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _stricoll_l( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _stricmp_l( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strlen(_Str: *const ::std::os::raw::c_char) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _strlwr_s(_String: *mut ::std::os::raw::c_char, _Size: size_t) -> errno_t; -} -extern "C" { - pub fn _strlwr(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _strlwr_s_l( - _String: *mut ::std::os::raw::c_char, - _Size: size_t, - _Locale: _locale_t, - ) -> errno_t; -} -extern "C" { - pub fn _strlwr_l( - _String: *mut ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strncat( - _Destination: *mut ::std::os::raw::c_char, - _Source: *const ::std::os::raw::c_char, - _Count: ::std::os::raw::c_ulonglong, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strncmp( - _Str1: *const ::std::os::raw::c_char, - _Str2: *const ::std::os::raw::c_char, - _MaxCount: ::std::os::raw::c_ulonglong, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _strnicmp( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _MaxCount: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _strnicmp_l( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _strnicoll( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _MaxCount: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _strnicoll_l( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _strncoll( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _MaxCount: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _strncoll_l( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __strncnt(_String: *const ::std::os::raw::c_char, _Count: size_t) -> size_t; -} -extern "C" { - pub fn strncpy( - _Destination: *mut ::std::os::raw::c_char, - _Source: *const ::std::os::raw::c_char, - _Count: ::std::os::raw::c_ulonglong, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strnlen(_String: *const ::std::os::raw::c_char, _MaxCount: size_t) -> size_t; -} -extern "C" { - pub fn _strnset_s( - _String: *mut ::std::os::raw::c_char, - _SizeInBytes: size_t, - _Value: ::std::os::raw::c_int, - _MaxCount: size_t, - ) -> errno_t; -} -extern "C" { - pub fn _strnset( - _Destination: *mut ::std::os::raw::c_char, - _Value: ::std::os::raw::c_int, - _Count: size_t, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strpbrk( - _Str: *const ::std::os::raw::c_char, - _Control: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _strrev(_Str: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _strset_s( - _Destination: *mut ::std::os::raw::c_char, - _DestinationSize: size_t, - _Value: ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn _strset( - _Destination: *mut ::std::os::raw::c_char, - _Value: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strspn( - _Str: *const ::std::os::raw::c_char, - _Control: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn strtok( - _String: *mut ::std::os::raw::c_char, - _Delimiter: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _strupr_s(_String: *mut ::std::os::raw::c_char, _Size: size_t) -> errno_t; -} -extern "C" { - pub fn _strupr(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _strupr_s_l( - _String: *mut ::std::os::raw::c_char, - _Size: size_t, - _Locale: _locale_t, - ) -> errno_t; -} -extern "C" { - pub fn _strupr_l( - _String: *mut ::std::os::raw::c_char, - _Locale: _locale_t, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strxfrm( - _Destination: *mut ::std::os::raw::c_char, - _Source: *const ::std::os::raw::c_char, - _MaxCount: ::std::os::raw::c_ulonglong, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn _strxfrm_l( - _Destination: *mut ::std::os::raw::c_char, - _Source: *const ::std::os::raw::c_char, - _MaxCount: size_t, - _Locale: _locale_t, - ) -> size_t; -} -extern "C" { - pub fn strdup(_String: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strcmpi( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn stricmp( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strlwr(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strnicmp( - _String1: *const ::std::os::raw::c_char, - _String2: *const ::std::os::raw::c_char, - _MaxCount: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn strnset( - _String: *mut ::std::os::raw::c_char, - _Value: ::std::os::raw::c_int, - _MaxCount: size_t, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strrev(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strset( - _String: *mut ::std::os::raw::c_char, - _Value: ::std::os::raw::c_int, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn strupr(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct gladGLversionStruct { - pub major: ::std::os::raw::c_int, - pub minor: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_gladGLversionStruct() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(gladGLversionStruct)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(gladGLversionStruct)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).major as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(gladGLversionStruct), - "::", - stringify!(major) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).minor as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(gladGLversionStruct), - "::", - stringify!(minor) - ) - ); -} -pub type GLADloadproc = ::std::option::Option< - unsafe extern "C" fn(name: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_void, ->; -extern "C" { - pub static mut GLVersion: gladGLversionStruct; -} -extern "C" { - pub fn gladLoadGLLoader(arg1: GLADloadproc) -> ::std::os::raw::c_int; -} -pub type int_least8_t = ::std::os::raw::c_schar; -pub type int_least16_t = ::std::os::raw::c_short; -pub type int_least32_t = ::std::os::raw::c_int; -pub type int_least64_t = ::std::os::raw::c_longlong; -pub type uint_least8_t = ::std::os::raw::c_uchar; -pub type uint_least16_t = ::std::os::raw::c_ushort; -pub type uint_least32_t = ::std::os::raw::c_uint; -pub type uint_least64_t = ::std::os::raw::c_ulonglong; -pub type int_fast8_t = ::std::os::raw::c_schar; -pub type int_fast16_t = ::std::os::raw::c_int; -pub type int_fast32_t = ::std::os::raw::c_int; -pub type int_fast64_t = ::std::os::raw::c_longlong; -pub type uint_fast8_t = ::std::os::raw::c_uchar; -pub type uint_fast16_t = ::std::os::raw::c_uint; -pub type uint_fast32_t = ::std::os::raw::c_uint; -pub type uint_fast64_t = ::std::os::raw::c_ulonglong; -pub type intmax_t = ::std::os::raw::c_longlong; -pub type uintmax_t = ::std::os::raw::c_ulonglong; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _Lldiv_t { - pub quot: intmax_t, - pub rem: intmax_t, -} -#[test] -fn bindgen_test_layout__Lldiv_t() { - assert_eq!( - ::std::mem::size_of::<_Lldiv_t>(), - 16usize, - concat!("Size of: ", stringify!(_Lldiv_t)) - ); - assert_eq!( - ::std::mem::align_of::<_Lldiv_t>(), - 8usize, - concat!("Alignment of ", stringify!(_Lldiv_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_Lldiv_t>())).quot as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_Lldiv_t), - "::", - stringify!(quot) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_Lldiv_t>())).rem as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(_Lldiv_t), - "::", - stringify!(rem) - ) - ); -} -pub type imaxdiv_t = _Lldiv_t; -extern "C" { - pub fn imaxabs(_Number: intmax_t) -> intmax_t; -} -extern "C" { - pub fn imaxdiv(_Numerator: intmax_t, _Denominator: intmax_t) -> imaxdiv_t; -} -extern "C" { - pub fn strtoimax( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> intmax_t; -} -extern "C" { - pub fn _strtoimax_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> intmax_t; -} -extern "C" { - pub fn strtoumax( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - ) -> uintmax_t; -} -extern "C" { - pub fn _strtoumax_l( - _String: *const ::std::os::raw::c_char, - _EndPtr: *mut *mut ::std::os::raw::c_char, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> uintmax_t; -} -extern "C" { - pub fn wcstoimax( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> intmax_t; -} -extern "C" { - pub fn _wcstoimax_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> intmax_t; -} -extern "C" { - pub fn wcstoumax( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - ) -> uintmax_t; -} -extern "C" { - pub fn _wcstoumax_l( - _String: *const wchar_t, - _EndPtr: *mut *mut wchar_t, - _Radix: ::std::os::raw::c_int, - _Locale: _locale_t, - ) -> uintmax_t; -} -pub type GLenum = ::std::os::raw::c_uint; -pub type GLboolean = ::std::os::raw::c_uchar; -pub type GLbitfield = ::std::os::raw::c_uint; -pub type GLvoid = ::std::os::raw::c_void; -pub type GLbyte = ::std::os::raw::c_schar; -pub type GLshort = ::std::os::raw::c_short; -pub type GLint = ::std::os::raw::c_int; -pub type GLclampx = ::std::os::raw::c_int; -pub type GLubyte = ::std::os::raw::c_uchar; -pub type GLushort = ::std::os::raw::c_ushort; -pub type GLuint = ::std::os::raw::c_uint; -pub type GLsizei = ::std::os::raw::c_int; -pub type GLfloat = f32; -pub type GLclampf = f32; -pub type GLdouble = f64; -pub type GLclampd = f64; -pub type GLeglImageOES = *mut ::std::os::raw::c_void; -pub type GLchar = ::std::os::raw::c_char; -pub type GLcharARB = ::std::os::raw::c_char; -pub type GLhandleARB = ::std::os::raw::c_uint; -pub type GLhalfARB = ::std::os::raw::c_ushort; -pub type GLhalf = ::std::os::raw::c_ushort; -pub type GLfixed = GLint; -pub type GLintptr = isize; -pub type GLsizeiptr = isize; -pub type GLint64 = i64; -pub type GLuint64 = u64; -pub type GLintptrARB = isize; -pub type GLsizeiptrARB = isize; -pub type GLint64EXT = i64; -pub type GLuint64EXT = u64; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __GLsync { - _unused: [u8; 0], -} -pub type GLsync = *mut __GLsync; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _cl_context { - _unused: [u8; 0], -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _cl_event { - _unused: [u8; 0], -} -pub type GLDEBUGPROC = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - id: GLuint, - severity: GLenum, - length: GLsizei, - message: *const GLchar, - userParam: *const ::std::os::raw::c_void, - ), ->; -pub type GLDEBUGPROCARB = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - id: GLuint, - severity: GLenum, - length: GLsizei, - message: *const GLchar, - userParam: *const ::std::os::raw::c_void, - ), ->; -pub type GLDEBUGPROCKHR = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - id: GLuint, - severity: GLenum, - length: GLsizei, - message: *const GLchar, - userParam: *const ::std::os::raw::c_void, - ), ->; -pub type GLDEBUGPROCAMD = ::std::option::Option< - unsafe extern "C" fn( - id: GLuint, - category: GLenum, - severity: GLenum, - length: GLsizei, - message: *const GLchar, - userParam: *mut ::std::os::raw::c_void, - ), ->; -pub type GLhalfNV = ::std::os::raw::c_ushort; -pub type GLvdpauSurfaceNV = GLintptr; -extern "C" { - pub static mut GLAD_GL_VERSION_1_0: ::std::os::raw::c_int; -} -pub type PFNGLCULLFACEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glCullFace: PFNGLCULLFACEPROC; -} -pub type PFNGLFRONTFACEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glFrontFace: PFNGLFRONTFACEPROC; -} -pub type PFNGLHINTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glHint: PFNGLHINTPROC; -} -pub type PFNGLLINEWIDTHPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glLineWidth: PFNGLLINEWIDTHPROC; -} -pub type PFNGLPOINTSIZEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glPointSize: PFNGLPOINTSIZEPROC; -} -pub type PFNGLPOLYGONMODEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPolygonMode: PFNGLPOLYGONMODEPROC; -} -pub type PFNGLSCISSORPROC = ::std::option::Option< - unsafe extern "C" fn(x: GLint, y: GLint, width: GLsizei, height: GLsizei), ->; -extern "C" { - pub static mut glad_glScissor: PFNGLSCISSORPROC; -} -pub type PFNGLTEXPARAMETERFPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexParameterf: PFNGLTEXPARAMETERFPROC; -} -pub type PFNGLTEXPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLfloat), ->; -extern "C" { - pub static mut glad_glTexParameterfv: PFNGLTEXPARAMETERFVPROC; -} -pub type PFNGLTEXPARAMETERIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexParameteri: PFNGLTEXPARAMETERIPROC; -} -pub type PFNGLTEXPARAMETERIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLint), ->; -extern "C" { - pub static mut glad_glTexParameteriv: PFNGLTEXPARAMETERIVPROC; -} -pub type PFNGLTEXIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLint, - width: GLsizei, - border: GLint, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexImage1D: PFNGLTEXIMAGE1DPROC; -} -pub type PFNGLTEXIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLint, - width: GLsizei, - height: GLsizei, - border: GLint, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexImage2D: PFNGLTEXIMAGE2DPROC; -} -pub type PFNGLDRAWBUFFERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDrawBuffer: PFNGLDRAWBUFFERPROC; -} -pub type PFNGLCLEARPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glClear: PFNGLCLEARPROC; -} -pub type PFNGLCLEARCOLORPROC = ::std::option::Option< - unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), ->; -extern "C" { - pub static mut glad_glClearColor: PFNGLCLEARCOLORPROC; -} -pub type PFNGLCLEARSTENCILPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glClearStencil: PFNGLCLEARSTENCILPROC; -} -pub type PFNGLCLEARDEPTHPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glClearDepth: PFNGLCLEARDEPTHPROC; -} -pub type PFNGLSTENCILMASKPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glStencilMask: PFNGLSTENCILMASKPROC; -} -pub type PFNGLCOLORMASKPROC = ::std::option::Option< - unsafe extern "C" fn(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean), ->; -extern "C" { - pub static mut glad_glColorMask: PFNGLCOLORMASKPROC; -} -pub type PFNGLDEPTHMASKPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDepthMask: PFNGLDEPTHMASKPROC; -} -pub type PFNGLDISABLEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDisable: PFNGLDISABLEPROC; -} -pub type PFNGLENABLEPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEnable: PFNGLENABLEPROC; -} -pub type PFNGLFINISHPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glFinish: PFNGLFINISHPROC; -} -pub type PFNGLFLUSHPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glFlush: PFNGLFLUSHPROC; -} -pub type PFNGLBLENDFUNCPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendFunc: PFNGLBLENDFUNCPROC; -} -pub type PFNGLLOGICOPPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glLogicOp: PFNGLLOGICOPPROC; -} -pub type PFNGLSTENCILFUNCPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glStencilFunc: PFNGLSTENCILFUNCPROC; -} -pub type PFNGLSTENCILOPPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glStencilOp: PFNGLSTENCILOPPROC; -} -pub type PFNGLDEPTHFUNCPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDepthFunc: PFNGLDEPTHFUNCPROC; -} -pub type PFNGLPIXELSTOREFPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPixelStoref: PFNGLPIXELSTOREFPROC; -} -pub type PFNGLPIXELSTOREIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPixelStorei: PFNGLPIXELSTOREIPROC; -} -pub type PFNGLREADBUFFERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glReadBuffer: PFNGLREADBUFFERPROC; -} -pub type PFNGLREADPIXELSPROC = ::std::option::Option< - unsafe extern "C" fn( - x: GLint, - y: GLint, - width: GLsizei, - height: GLsizei, - format: GLenum, - type_: GLenum, - pixels: *mut ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glReadPixels: PFNGLREADPIXELSPROC; -} -pub type PFNGLGETBOOLEANVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetBooleanv: PFNGLGETBOOLEANVPROC; -} -pub type PFNGLGETDOUBLEVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetDoublev: PFNGLGETDOUBLEVPROC; -} -pub type PFNGLGETERRORPROC = ::std::option::Option GLenum>; -extern "C" { - pub static mut glad_glGetError: PFNGLGETERRORPROC; -} -pub type PFNGLGETFLOATVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetFloatv: PFNGLGETFLOATVPROC; -} -pub type PFNGLGETINTEGERVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetIntegerv: PFNGLGETINTEGERVPROC; -} -pub type PFNGLGETSTRINGPROC = - ::std::option::Option *const GLubyte>; -extern "C" { - pub static mut glad_glGetString: PFNGLGETSTRINGPROC; -} -pub type PFNGLGETTEXIMAGEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - format: GLenum, - type_: GLenum, - pixels: *mut ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glGetTexImage: PFNGLGETTEXIMAGEPROC; -} -pub type PFNGLGETTEXPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetTexParameterfv: PFNGLGETTEXPARAMETERFVPROC; -} -pub type PFNGLGETTEXPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetTexParameteriv: PFNGLGETTEXPARAMETERIVPROC; -} -pub type PFNGLGETTEXLEVELPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, level: GLint, pname: GLenum, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetTexLevelParameterfv: PFNGLGETTEXLEVELPARAMETERFVPROC; -} -pub type PFNGLGETTEXLEVELPARAMETERIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, level: GLint, pname: GLenum, params: *mut GLint), ->; -extern "C" { - pub static mut glad_glGetTexLevelParameteriv: PFNGLGETTEXLEVELPARAMETERIVPROC; -} -pub type PFNGLISENABLEDPROC = ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsEnabled: PFNGLISENABLEDPROC; -} -pub type PFNGLDEPTHRANGEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDepthRange: PFNGLDEPTHRANGEPROC; -} -pub type PFNGLVIEWPORTPROC = ::std::option::Option< - unsafe extern "C" fn(x: GLint, y: GLint, width: GLsizei, height: GLsizei), ->; -extern "C" { - pub static mut glad_glViewport: PFNGLVIEWPORTPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_1: ::std::os::raw::c_int; -} -pub type PFNGLDRAWARRAYSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawArrays: PFNGLDRAWARRAYSPROC; -} -pub type PFNGLDRAWELEMENTSPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glDrawElements: PFNGLDRAWELEMENTSPROC; -} -pub type PFNGLPOLYGONOFFSETPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPolygonOffset: PFNGLPOLYGONOFFSETPROC; -} -pub type PFNGLCOPYTEXIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - x: GLint, - y: GLint, - width: GLsizei, - border: GLint, - ), ->; -extern "C" { - pub static mut glad_glCopyTexImage1D: PFNGLCOPYTEXIMAGE1DPROC; -} -pub type PFNGLCOPYTEXIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - x: GLint, - y: GLint, - width: GLsizei, - height: GLsizei, - border: GLint, - ), ->; -extern "C" { - pub static mut glad_glCopyTexImage2D: PFNGLCOPYTEXIMAGE2DPROC; -} -pub type PFNGLCOPYTEXSUBIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - x: GLint, - y: GLint, - width: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glCopyTexSubImage1D: PFNGLCOPYTEXSUBIMAGE1DPROC; -} -pub type PFNGLCOPYTEXSUBIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - x: GLint, - y: GLint, - width: GLsizei, - height: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glCopyTexSubImage2D: PFNGLCOPYTEXSUBIMAGE2DPROC; -} -pub type PFNGLTEXSUBIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - width: GLsizei, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexSubImage1D: PFNGLTEXSUBIMAGE1DPROC; -} -pub type PFNGLTEXSUBIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - width: GLsizei, - height: GLsizei, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexSubImage2D: PFNGLTEXSUBIMAGE2DPROC; -} -pub type PFNGLBINDTEXTUREPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindTexture: PFNGLBINDTEXTUREPROC; -} -pub type PFNGLDELETETEXTURESPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteTextures: PFNGLDELETETEXTURESPROC; -} -pub type PFNGLGENTEXTURESPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenTextures: PFNGLGENTEXTURESPROC; -} -pub type PFNGLISTEXTUREPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsTexture: PFNGLISTEXTUREPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_2: ::std::os::raw::c_int; -} -pub type PFNGLDRAWRANGEELEMENTSPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - start: GLuint, - end: GLuint, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glDrawRangeElements: PFNGLDRAWRANGEELEMENTSPROC; -} -pub type PFNGLTEXIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - border: GLint, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexImage3D: PFNGLTEXIMAGE3DPROC; -} -pub type PFNGLTEXSUBIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - zoffset: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - format: GLenum, - type_: GLenum, - pixels: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexSubImage3D: PFNGLTEXSUBIMAGE3DPROC; -} -pub type PFNGLCOPYTEXSUBIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - zoffset: GLint, - x: GLint, - y: GLint, - width: GLsizei, - height: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glCopyTexSubImage3D: PFNGLCOPYTEXSUBIMAGE3DPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_3: ::std::os::raw::c_int; -} -pub type PFNGLACTIVETEXTUREPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glActiveTexture: PFNGLACTIVETEXTUREPROC; -} -pub type PFNGLSAMPLECOVERAGEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSampleCoverage: PFNGLSAMPLECOVERAGEPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage3D: PFNGLCOMPRESSEDTEXIMAGE3DPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage2D: PFNGLCOMPRESSEDTEXIMAGE2DPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage1D: PFNGLCOMPRESSEDTEXIMAGE1DPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - zoffset: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage3D: PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - width: GLsizei, - height: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage2D: PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - width: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage1D: PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC; -} -pub type PFNGLGETCOMPRESSEDTEXIMAGEPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, level: GLint, img: *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetCompressedTexImage: PFNGLGETCOMPRESSEDTEXIMAGEPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_4: ::std::os::raw::c_int; -} -pub type PFNGLBLENDFUNCSEPARATEPROC = ::std::option::Option< - unsafe extern "C" fn( - sfactorRGB: GLenum, - dfactorRGB: GLenum, - sfactorAlpha: GLenum, - dfactorAlpha: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlendFuncSeparate: PFNGLBLENDFUNCSEPARATEPROC; -} -pub type PFNGLMULTIDRAWARRAYSPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - first: *const GLint, - count: *const GLsizei, - drawcount: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glMultiDrawArrays: PFNGLMULTIDRAWARRAYSPROC; -} -pub type PFNGLMULTIDRAWELEMENTSPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: *const GLsizei, - type_: GLenum, - indices: *mut *const ::std::os::raw::c_void, - drawcount: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glMultiDrawElements: PFNGLMULTIDRAWELEMENTSPROC; -} -pub type PFNGLPOINTPARAMETERFPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPointParameterf: PFNGLPOINTPARAMETERFPROC; -} -pub type PFNGLPOINTPARAMETERFVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPointParameterfv: PFNGLPOINTPARAMETERFVPROC; -} -pub type PFNGLPOINTPARAMETERIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPointParameteri: PFNGLPOINTPARAMETERIPROC; -} -pub type PFNGLPOINTPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPointParameteriv: PFNGLPOINTPARAMETERIVPROC; -} -pub type PFNGLBLENDCOLORPROC = ::std::option::Option< - unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), ->; -extern "C" { - pub static mut glad_glBlendColor: PFNGLBLENDCOLORPROC; -} -pub type PFNGLBLENDEQUATIONPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquation: PFNGLBLENDEQUATIONPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_1_5: ::std::os::raw::c_int; -} -pub type PFNGLGENQUERIESPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenQueries: PFNGLGENQUERIESPROC; -} -pub type PFNGLDELETEQUERIESPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteQueries: PFNGLDELETEQUERIESPROC; -} -pub type PFNGLISQUERYPROC = ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsQuery: PFNGLISQUERYPROC; -} -pub type PFNGLBEGINQUERYPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBeginQuery: PFNGLBEGINQUERYPROC; -} -pub type PFNGLENDQUERYPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndQuery: PFNGLENDQUERYPROC; -} -pub type PFNGLGETQUERYIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryiv: PFNGLGETQUERYIVPROC; -} -pub type PFNGLGETQUERYOBJECTIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryObjectiv: PFNGLGETQUERYOBJECTIVPROC; -} -pub type PFNGLGETQUERYOBJECTUIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryObjectuiv: PFNGLGETQUERYOBJECTUIVPROC; -} -pub type PFNGLBINDBUFFERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindBuffer: PFNGLBINDBUFFERPROC; -} -pub type PFNGLDELETEBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteBuffers: PFNGLDELETEBUFFERSPROC; -} -pub type PFNGLGENBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenBuffers: PFNGLGENBUFFERSPROC; -} -pub type PFNGLISBUFFERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsBuffer: PFNGLISBUFFERPROC; -} -pub type PFNGLBUFFERDATAPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - size: GLsizeiptr, - data: *const ::std::os::raw::c_void, - usage: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBufferData: PFNGLBUFFERDATAPROC; -} -pub type PFNGLBUFFERSUBDATAPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptr, - size: GLsizeiptr, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glBufferSubData: PFNGLBUFFERSUBDATAPROC; -} -pub type PFNGLGETBUFFERSUBDATAPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptr, - size: GLsizeiptr, - data: *mut ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glGetBufferSubData: PFNGLGETBUFFERSUBDATAPROC; -} -pub type PFNGLMAPBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, access: GLenum) -> *mut ::std::os::raw::c_void, ->; -extern "C" { - pub static mut glad_glMapBuffer: PFNGLMAPBUFFERPROC; -} -pub type PFNGLUNMAPBUFFERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glUnmapBuffer: PFNGLUNMAPBUFFERPROC; -} -pub type PFNGLGETBUFFERPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetBufferParameteriv: PFNGLGETBUFFERPARAMETERIVPROC; -} -pub type PFNGLGETBUFFERPOINTERVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetBufferPointerv: PFNGLGETBUFFERPOINTERVPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_2_0: ::std::os::raw::c_int; -} -pub type PFNGLBLENDEQUATIONSEPARATEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquationSeparate: PFNGLBLENDEQUATIONSEPARATEPROC; -} -pub type PFNGLDRAWBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawBuffers: PFNGLDRAWBUFFERSPROC; -} -pub type PFNGLSTENCILOPSEPARATEPROC = ::std::option::Option< - unsafe extern "C" fn(face: GLenum, sfail: GLenum, dpfail: GLenum, dppass: GLenum), ->; -extern "C" { - pub static mut glad_glStencilOpSeparate: PFNGLSTENCILOPSEPARATEPROC; -} -pub type PFNGLSTENCILFUNCSEPARATEPROC = ::std::option::Option< - unsafe extern "C" fn(face: GLenum, func: GLenum, ref_: GLint, mask: GLuint), ->; -extern "C" { - pub static mut glad_glStencilFuncSeparate: PFNGLSTENCILFUNCSEPARATEPROC; -} -pub type PFNGLSTENCILMASKSEPARATEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glStencilMaskSeparate: PFNGLSTENCILMASKSEPARATEPROC; -} -pub type PFNGLATTACHSHADERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glAttachShader: PFNGLATTACHSHADERPROC; -} -pub type PFNGLBINDATTRIBLOCATIONPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, index: GLuint, name: *const GLchar), ->; -extern "C" { - pub static mut glad_glBindAttribLocation: PFNGLBINDATTRIBLOCATIONPROC; -} -pub type PFNGLCOMPILESHADERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glCompileShader: PFNGLCOMPILESHADERPROC; -} -pub type PFNGLCREATEPROGRAMPROC = ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glCreateProgram: PFNGLCREATEPROGRAMPROC; -} -pub type PFNGLCREATESHADERPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glCreateShader: PFNGLCREATESHADERPROC; -} -pub type PFNGLDELETEPROGRAMPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteProgram: PFNGLDELETEPROGRAMPROC; -} -pub type PFNGLDELETESHADERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteShader: PFNGLDELETESHADERPROC; -} -pub type PFNGLDETACHSHADERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDetachShader: PFNGLDETACHSHADERPROC; -} -pub type PFNGLDISABLEVERTEXATTRIBARRAYPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDisableVertexAttribArray: PFNGLDISABLEVERTEXATTRIBARRAYPROC; -} -pub type PFNGLENABLEVERTEXATTRIBARRAYPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glEnableVertexAttribArray: PFNGLENABLEVERTEXATTRIBARRAYPROC; -} -pub type PFNGLGETACTIVEATTRIBPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - index: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - size: *mut GLint, - type_: *mut GLenum, - name: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetActiveAttrib: PFNGLGETACTIVEATTRIBPROC; -} -pub type PFNGLGETACTIVEUNIFORMPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - index: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - size: *mut GLint, - type_: *mut GLenum, - name: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniform: PFNGLGETACTIVEUNIFORMPROC; -} -pub type PFNGLGETATTACHEDSHADERSPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - maxCount: GLsizei, - count: *mut GLsizei, - shaders: *mut GLuint, - ), ->; -extern "C" { - pub static mut glad_glGetAttachedShaders: PFNGLGETATTACHEDSHADERSPROC; -} -pub type PFNGLGETATTRIBLOCATIONPROC = - ::std::option::Option GLint>; -extern "C" { - pub static mut glad_glGetAttribLocation: PFNGLGETATTRIBLOCATIONPROC; -} -pub type PFNGLGETPROGRAMIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetProgramiv: PFNGLGETPROGRAMIVPROC; -} -pub type PFNGLGETPROGRAMINFOLOGPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - infoLog: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetProgramInfoLog: PFNGLGETPROGRAMINFOLOGPROC; -} -pub type PFNGLGETSHADERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetShaderiv: PFNGLGETSHADERIVPROC; -} -pub type PFNGLGETSHADERINFOLOGPROC = ::std::option::Option< - unsafe extern "C" fn( - shader: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - infoLog: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetShaderInfoLog: PFNGLGETSHADERINFOLOGPROC; -} -pub type PFNGLGETSHADERSOURCEPROC = ::std::option::Option< - unsafe extern "C" fn( - shader: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - source: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetShaderSource: PFNGLGETSHADERSOURCEPROC; -} -pub type PFNGLGETUNIFORMLOCATIONPROC = - ::std::option::Option GLint>; -extern "C" { - pub static mut glad_glGetUniformLocation: PFNGLGETUNIFORMLOCATIONPROC; -} -pub type PFNGLGETUNIFORMFVPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetUniformfv: PFNGLGETUNIFORMFVPROC; -} -pub type PFNGLGETUNIFORMIVPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLint), ->; -extern "C" { - pub static mut glad_glGetUniformiv: PFNGLGETUNIFORMIVPROC; -} -pub type PFNGLGETVERTEXATTRIBDVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, pname: GLenum, params: *mut GLdouble), ->; -extern "C" { - pub static mut glad_glGetVertexAttribdv: PFNGLGETVERTEXATTRIBDVPROC; -} -pub type PFNGLGETVERTEXATTRIBFVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribfv: PFNGLGETVERTEXATTRIBFVPROC; -} -pub type PFNGLGETVERTEXATTRIBIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribiv: PFNGLGETVERTEXATTRIBIVPROC; -} -pub type PFNGLGETVERTEXATTRIBPOINTERVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, pname: GLenum, pointer: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetVertexAttribPointerv: PFNGLGETVERTEXATTRIBPOINTERVPROC; -} -pub type PFNGLISPROGRAMPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsProgram: PFNGLISPROGRAMPROC; -} -pub type PFNGLISSHADERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsShader: PFNGLISSHADERPROC; -} -pub type PFNGLLINKPROGRAMPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glLinkProgram: PFNGLLINKPROGRAMPROC; -} -pub type PFNGLSHADERSOURCEPROC = ::std::option::Option< - unsafe extern "C" fn( - shader: GLuint, - count: GLsizei, - string: *mut *const GLchar, - length: *const GLint, - ), ->; -extern "C" { - pub static mut glad_glShaderSource: PFNGLSHADERSOURCEPROC; -} -pub type PFNGLUSEPROGRAMPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glUseProgram: PFNGLUSEPROGRAMPROC; -} -pub type PFNGLUNIFORM1FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform1f: PFNGLUNIFORM1FPROC; -} -pub type PFNGLUNIFORM2FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform2f: PFNGLUNIFORM2FPROC; -} -pub type PFNGLUNIFORM3FPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat), ->; -extern "C" { - pub static mut glad_glUniform3f: PFNGLUNIFORM3FPROC; -} -pub type PFNGLUNIFORM4FPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat), ->; -extern "C" { - pub static mut glad_glUniform4f: PFNGLUNIFORM4FPROC; -} -pub type PFNGLUNIFORM1IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform1i: PFNGLUNIFORM1IPROC; -} -pub type PFNGLUNIFORM2IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform2i: PFNGLUNIFORM2IPROC; -} -pub type PFNGLUNIFORM3IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform3i: PFNGLUNIFORM3IPROC; -} -pub type PFNGLUNIFORM4IPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint), ->; -extern "C" { - pub static mut glad_glUniform4i: PFNGLUNIFORM4IPROC; -} -pub type PFNGLUNIFORM1FVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glUniform1fv: PFNGLUNIFORM1FVPROC; -} -pub type PFNGLUNIFORM2FVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glUniform2fv: PFNGLUNIFORM2FVPROC; -} -pub type PFNGLUNIFORM3FVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glUniform3fv: PFNGLUNIFORM3FVPROC; -} -pub type PFNGLUNIFORM4FVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glUniform4fv: PFNGLUNIFORM4FVPROC; -} -pub type PFNGLUNIFORM1IVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), ->; -extern "C" { - pub static mut glad_glUniform1iv: PFNGLUNIFORM1IVPROC; -} -pub type PFNGLUNIFORM2IVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), ->; -extern "C" { - pub static mut glad_glUniform2iv: PFNGLUNIFORM2IVPROC; -} -pub type PFNGLUNIFORM3IVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), ->; -extern "C" { - pub static mut glad_glUniform3iv: PFNGLUNIFORM3IVPROC; -} -pub type PFNGLUNIFORM4IVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLint), ->; -extern "C" { - pub static mut glad_glUniform4iv: PFNGLUNIFORM4IVPROC; -} -pub type PFNGLUNIFORMMATRIX2FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix2fv: PFNGLUNIFORMMATRIX2FVPROC; -} -pub type PFNGLUNIFORMMATRIX3FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix3fv: PFNGLUNIFORMMATRIX3FVPROC; -} -pub type PFNGLUNIFORMMATRIX4FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix4fv: PFNGLUNIFORMMATRIX4FVPROC; -} -pub type PFNGLVALIDATEPROGRAMPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glValidateProgram: PFNGLVALIDATEPROGRAMPROC; -} -pub type PFNGLVERTEXATTRIB1DPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1d: PFNGLVERTEXATTRIB1DPROC; -} -pub type PFNGLVERTEXATTRIB1DVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1dv: PFNGLVERTEXATTRIB1DVPROC; -} -pub type PFNGLVERTEXATTRIB1FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1f: PFNGLVERTEXATTRIB1FPROC; -} -pub type PFNGLVERTEXATTRIB1FVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1fv: PFNGLVERTEXATTRIB1FVPROC; -} -pub type PFNGLVERTEXATTRIB1SPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1s: PFNGLVERTEXATTRIB1SPROC; -} -pub type PFNGLVERTEXATTRIB1SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1sv: PFNGLVERTEXATTRIB1SVPROC; -} -pub type PFNGLVERTEXATTRIB2DPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2d: PFNGLVERTEXATTRIB2DPROC; -} -pub type PFNGLVERTEXATTRIB2DVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2dv: PFNGLVERTEXATTRIB2DVPROC; -} -pub type PFNGLVERTEXATTRIB2FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2f: PFNGLVERTEXATTRIB2FPROC; -} -pub type PFNGLVERTEXATTRIB2FVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2fv: PFNGLVERTEXATTRIB2FVPROC; -} -pub type PFNGLVERTEXATTRIB2SPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2s: PFNGLVERTEXATTRIB2SPROC; -} -pub type PFNGLVERTEXATTRIB2SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2sv: PFNGLVERTEXATTRIB2SVPROC; -} -pub type PFNGLVERTEXATTRIB3DPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble), ->; -extern "C" { - pub static mut glad_glVertexAttrib3d: PFNGLVERTEXATTRIB3DPROC; -} -pub type PFNGLVERTEXATTRIB3DVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3dv: PFNGLVERTEXATTRIB3DVPROC; -} -pub type PFNGLVERTEXATTRIB3FPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3f: PFNGLVERTEXATTRIB3FPROC; -} -pub type PFNGLVERTEXATTRIB3FVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3fv: PFNGLVERTEXATTRIB3FVPROC; -} -pub type PFNGLVERTEXATTRIB3SPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3s: PFNGLVERTEXATTRIB3SPROC; -} -pub type PFNGLVERTEXATTRIB3SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3sv: PFNGLVERTEXATTRIB3SVPROC; -} -pub type PFNGLVERTEXATTRIB4NBVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nbv: PFNGLVERTEXATTRIB4NBVPROC; -} -pub type PFNGLVERTEXATTRIB4NIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Niv: PFNGLVERTEXATTRIB4NIVPROC; -} -pub type PFNGLVERTEXATTRIB4NSVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nsv: PFNGLVERTEXATTRIB4NSVPROC; -} -pub type PFNGLVERTEXATTRIB4NUBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLubyte, y: GLubyte, z: GLubyte, w: GLubyte), ->; -extern "C" { - pub static mut glad_glVertexAttrib4Nub: PFNGLVERTEXATTRIB4NUBPROC; -} -pub type PFNGLVERTEXATTRIB4NUBVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nubv: PFNGLVERTEXATTRIB4NUBVPROC; -} -pub type PFNGLVERTEXATTRIB4NUIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nuiv: PFNGLVERTEXATTRIB4NUIVPROC; -} -pub type PFNGLVERTEXATTRIB4NUSVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4Nusv: PFNGLVERTEXATTRIB4NUSVPROC; -} -pub type PFNGLVERTEXATTRIB4BVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4bv: PFNGLVERTEXATTRIB4BVPROC; -} -pub type PFNGLVERTEXATTRIB4DPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), ->; -extern "C" { - pub static mut glad_glVertexAttrib4d: PFNGLVERTEXATTRIB4DPROC; -} -pub type PFNGLVERTEXATTRIB4DVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4dv: PFNGLVERTEXATTRIB4DVPROC; -} -pub type PFNGLVERTEXATTRIB4FPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat), ->; -extern "C" { - pub static mut glad_glVertexAttrib4f: PFNGLVERTEXATTRIB4FPROC; -} -pub type PFNGLVERTEXATTRIB4FVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4fv: PFNGLVERTEXATTRIB4FVPROC; -} -pub type PFNGLVERTEXATTRIB4IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4iv: PFNGLVERTEXATTRIB4IVPROC; -} -pub type PFNGLVERTEXATTRIB4SPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLshort, y: GLshort, z: GLshort, w: GLshort), ->; -extern "C" { - pub static mut glad_glVertexAttrib4s: PFNGLVERTEXATTRIB4SPROC; -} -pub type PFNGLVERTEXATTRIB4SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4sv: PFNGLVERTEXATTRIB4SVPROC; -} -pub type PFNGLVERTEXATTRIB4UBVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4ubv: PFNGLVERTEXATTRIB4UBVPROC; -} -pub type PFNGLVERTEXATTRIB4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4uiv: PFNGLVERTEXATTRIB4UIVPROC; -} -pub type PFNGLVERTEXATTRIB4USVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4usv: PFNGLVERTEXATTRIB4USVPROC; -} -pub type PFNGLVERTEXATTRIBPOINTERPROC = ::std::option::Option< - unsafe extern "C" fn( - index: GLuint, - size: GLint, - type_: GLenum, - normalized: GLboolean, - stride: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVertexAttribPointer: PFNGLVERTEXATTRIBPOINTERPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_2_1: ::std::os::raw::c_int; -} -pub type PFNGLUNIFORMMATRIX2X3FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix2x3fv: PFNGLUNIFORMMATRIX2X3FVPROC; -} -pub type PFNGLUNIFORMMATRIX3X2FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix3x2fv: PFNGLUNIFORMMATRIX3X2FVPROC; -} -pub type PFNGLUNIFORMMATRIX2X4FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix2x4fv: PFNGLUNIFORMMATRIX2X4FVPROC; -} -pub type PFNGLUNIFORMMATRIX4X2FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix4x2fv: PFNGLUNIFORMMATRIX4X2FVPROC; -} -pub type PFNGLUNIFORMMATRIX3X4FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix3x4fv: PFNGLUNIFORMMATRIX3X4FVPROC; -} -pub type PFNGLUNIFORMMATRIX4X3FVPROC = ::std::option::Option< - unsafe extern "C" fn( - location: GLint, - count: GLsizei, - transpose: GLboolean, - value: *const GLfloat, - ), ->; -extern "C" { - pub static mut glad_glUniformMatrix4x3fv: PFNGLUNIFORMMATRIX4X3FVPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_3_0: ::std::os::raw::c_int; -} -pub type PFNGLCOLORMASKIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean), ->; -extern "C" { - pub static mut glad_glColorMaski: PFNGLCOLORMASKIPROC; -} -pub type PFNGLGETBOOLEANI_VPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, data: *mut GLboolean), ->; -extern "C" { - pub static mut glad_glGetBooleani_v: PFNGLGETBOOLEANI_VPROC; -} -pub type PFNGLGETINTEGERI_VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetIntegeri_v: PFNGLGETINTEGERI_VPROC; -} -pub type PFNGLENABLEIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glEnablei: PFNGLENABLEIPROC; -} -pub type PFNGLDISABLEIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDisablei: PFNGLDISABLEIPROC; -} -pub type PFNGLISENABLEDIPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsEnabledi: PFNGLISENABLEDIPROC; -} -pub type PFNGLBEGINTRANSFORMFEEDBACKPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBeginTransformFeedback: PFNGLBEGINTRANSFORMFEEDBACKPROC; -} -pub type PFNGLENDTRANSFORMFEEDBACKPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndTransformFeedback: PFNGLENDTRANSFORMFEEDBACKPROC; -} -pub type PFNGLBINDBUFFERRANGEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - buffer: GLuint, - offset: GLintptr, - size: GLsizeiptr, - ), ->; -extern "C" { - pub static mut glad_glBindBufferRange: PFNGLBINDBUFFERRANGEPROC; -} -pub type PFNGLBINDBUFFERBASEPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindBufferBase: PFNGLBINDBUFFERBASEPROC; -} -pub type PFNGLTRANSFORMFEEDBACKVARYINGSPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - count: GLsizei, - varyings: *mut *const GLchar, - bufferMode: GLenum, - ), ->; -extern "C" { - pub static mut glad_glTransformFeedbackVaryings: PFNGLTRANSFORMFEEDBACKVARYINGSPROC; -} -pub type PFNGLGETTRANSFORMFEEDBACKVARYINGPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - index: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - size: *mut GLsizei, - type_: *mut GLenum, - name: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetTransformFeedbackVarying: PFNGLGETTRANSFORMFEEDBACKVARYINGPROC; -} -pub type PFNGLCLAMPCOLORPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glClampColor: PFNGLCLAMPCOLORPROC; -} -pub type PFNGLBEGINCONDITIONALRENDERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBeginConditionalRender: PFNGLBEGINCONDITIONALRENDERPROC; -} -pub type PFNGLENDCONDITIONALRENDERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndConditionalRender: PFNGLENDCONDITIONALRENDERPROC; -} -pub type PFNGLVERTEXATTRIBIPOINTERPROC = ::std::option::Option< - unsafe extern "C" fn( - index: GLuint, - size: GLint, - type_: GLenum, - stride: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVertexAttribIPointer: PFNGLVERTEXATTRIBIPOINTERPROC; -} -pub type PFNGLGETVERTEXATTRIBIIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribIiv: PFNGLGETVERTEXATTRIBIIVPROC; -} -pub type PFNGLGETVERTEXATTRIBIUIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribIuiv: PFNGLGETVERTEXATTRIBIUIVPROC; -} -pub type PFNGLVERTEXATTRIBI1IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI1i: PFNGLVERTEXATTRIBI1IPROC; -} -pub type PFNGLVERTEXATTRIBI2IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI2i: PFNGLVERTEXATTRIBI2IPROC; -} -pub type PFNGLVERTEXATTRIBI3IPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI3i: PFNGLVERTEXATTRIBI3IPROC; -} -pub type PFNGLVERTEXATTRIBI4IPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint), ->; -extern "C" { - pub static mut glad_glVertexAttribI4i: PFNGLVERTEXATTRIBI4IPROC; -} -pub type PFNGLVERTEXATTRIBI1UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI1ui: PFNGLVERTEXATTRIBI1UIPROC; -} -pub type PFNGLVERTEXATTRIBI2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI2ui: PFNGLVERTEXATTRIBI2UIPROC; -} -pub type PFNGLVERTEXATTRIBI3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI3ui: PFNGLVERTEXATTRIBI3UIPROC; -} -pub type PFNGLVERTEXATTRIBI4UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribI4ui: PFNGLVERTEXATTRIBI4UIPROC; -} -pub type PFNGLVERTEXATTRIBI1IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI1iv: PFNGLVERTEXATTRIBI1IVPROC; -} -pub type PFNGLVERTEXATTRIBI2IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI2iv: PFNGLVERTEXATTRIBI2IVPROC; -} -pub type PFNGLVERTEXATTRIBI3IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI3iv: PFNGLVERTEXATTRIBI3IVPROC; -} -pub type PFNGLVERTEXATTRIBI4IVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4iv: PFNGLVERTEXATTRIBI4IVPROC; -} -pub type PFNGLVERTEXATTRIBI1UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI1uiv: PFNGLVERTEXATTRIBI1UIVPROC; -} -pub type PFNGLVERTEXATTRIBI2UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI2uiv: PFNGLVERTEXATTRIBI2UIVPROC; -} -pub type PFNGLVERTEXATTRIBI3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI3uiv: PFNGLVERTEXATTRIBI3UIVPROC; -} -pub type PFNGLVERTEXATTRIBI4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4uiv: PFNGLVERTEXATTRIBI4UIVPROC; -} -pub type PFNGLVERTEXATTRIBI4BVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4bv: PFNGLVERTEXATTRIBI4BVPROC; -} -pub type PFNGLVERTEXATTRIBI4SVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4sv: PFNGLVERTEXATTRIBI4SVPROC; -} -pub type PFNGLVERTEXATTRIBI4UBVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4ubv: PFNGLVERTEXATTRIBI4UBVPROC; -} -pub type PFNGLVERTEXATTRIBI4USVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribI4usv: PFNGLVERTEXATTRIBI4USVPROC; -} -pub type PFNGLGETUNIFORMUIVPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, location: GLint, params: *mut GLuint), ->; -extern "C" { - pub static mut glad_glGetUniformuiv: PFNGLGETUNIFORMUIVPROC; -} -pub type PFNGLBINDFRAGDATALOCATIONPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, color: GLuint, name: *const GLchar), ->; -extern "C" { - pub static mut glad_glBindFragDataLocation: PFNGLBINDFRAGDATALOCATIONPROC; -} -pub type PFNGLGETFRAGDATALOCATIONPROC = - ::std::option::Option GLint>; -extern "C" { - pub static mut glad_glGetFragDataLocation: PFNGLGETFRAGDATALOCATIONPROC; -} -pub type PFNGLUNIFORM1UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform1ui: PFNGLUNIFORM1UIPROC; -} -pub type PFNGLUNIFORM2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glUniform2ui: PFNGLUNIFORM2UIPROC; -} -pub type PFNGLUNIFORM3UIPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLuint, v1: GLuint, v2: GLuint), ->; -extern "C" { - pub static mut glad_glUniform3ui: PFNGLUNIFORM3UIPROC; -} -pub type PFNGLUNIFORM4UIPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint), ->; -extern "C" { - pub static mut glad_glUniform4ui: PFNGLUNIFORM4UIPROC; -} -pub type PFNGLUNIFORM1UIVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glUniform1uiv: PFNGLUNIFORM1UIVPROC; -} -pub type PFNGLUNIFORM2UIVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glUniform2uiv: PFNGLUNIFORM2UIVPROC; -} -pub type PFNGLUNIFORM3UIVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glUniform3uiv: PFNGLUNIFORM3UIVPROC; -} -pub type PFNGLUNIFORM4UIVPROC = ::std::option::Option< - unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glUniform4uiv: PFNGLUNIFORM4UIVPROC; -} -pub type PFNGLTEXPARAMETERIIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLint), ->; -extern "C" { - pub static mut glad_glTexParameterIiv: PFNGLTEXPARAMETERIIVPROC; -} -pub type PFNGLTEXPARAMETERIUIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *const GLuint), ->; -extern "C" { - pub static mut glad_glTexParameterIuiv: PFNGLTEXPARAMETERIUIVPROC; -} -pub type PFNGLGETTEXPARAMETERIIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetTexParameterIiv: PFNGLGETTEXPARAMETERIIVPROC; -} -pub type PFNGLGETTEXPARAMETERIUIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetTexParameterIuiv: PFNGLGETTEXPARAMETERIUIVPROC; -} -pub type PFNGLCLEARBUFFERIVPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLint), ->; -extern "C" { - pub static mut glad_glClearBufferiv: PFNGLCLEARBUFFERIVPROC; -} -pub type PFNGLCLEARBUFFERUIVPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glClearBufferuiv: PFNGLCLEARBUFFERUIVPROC; -} -pub type PFNGLCLEARBUFFERFVPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, value: *const GLfloat), ->; -extern "C" { - pub static mut glad_glClearBufferfv: PFNGLCLEARBUFFERFVPROC; -} -pub type PFNGLCLEARBUFFERFIPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint), ->; -extern "C" { - pub static mut glad_glClearBufferfi: PFNGLCLEARBUFFERFIPROC; -} -pub type PFNGLGETSTRINGIPROC = - ::std::option::Option *const GLubyte>; -extern "C" { - pub static mut glad_glGetStringi: PFNGLGETSTRINGIPROC; -} -pub type PFNGLISRENDERBUFFERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsRenderbuffer: PFNGLISRENDERBUFFERPROC; -} -pub type PFNGLBINDRENDERBUFFERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindRenderbuffer: PFNGLBINDRENDERBUFFERPROC; -} -pub type PFNGLDELETERENDERBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteRenderbuffers: PFNGLDELETERENDERBUFFERSPROC; -} -pub type PFNGLGENRENDERBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenRenderbuffers: PFNGLGENRENDERBUFFERSPROC; -} -pub type PFNGLRENDERBUFFERSTORAGEPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei), ->; -extern "C" { - pub static mut glad_glRenderbufferStorage: PFNGLRENDERBUFFERSTORAGEPROC; -} -pub type PFNGLGETRENDERBUFFERPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetRenderbufferParameteriv: PFNGLGETRENDERBUFFERPARAMETERIVPROC; -} -pub type PFNGLISFRAMEBUFFERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsFramebuffer: PFNGLISFRAMEBUFFERPROC; -} -pub type PFNGLBINDFRAMEBUFFERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindFramebuffer: PFNGLBINDFRAMEBUFFERPROC; -} -pub type PFNGLDELETEFRAMEBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteFramebuffers: PFNGLDELETEFRAMEBUFFERSPROC; -} -pub type PFNGLGENFRAMEBUFFERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenFramebuffers: PFNGLGENFRAMEBUFFERSPROC; -} -pub type PFNGLCHECKFRAMEBUFFERSTATUSPROC = - ::std::option::Option GLenum>; -extern "C" { - pub static mut glad_glCheckFramebufferStatus: PFNGLCHECKFRAMEBUFFERSTATUSPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE1DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture1D: PFNGLFRAMEBUFFERTEXTURE1DPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE2DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture2D: PFNGLFRAMEBUFFERTEXTURE2DPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE3DPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - zoffset: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture3D: PFNGLFRAMEBUFFERTEXTURE3DPROC; -} -pub type PFNGLFRAMEBUFFERRENDERBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - renderbuffertarget: GLenum, - renderbuffer: GLuint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferRenderbuffer: PFNGLFRAMEBUFFERRENDERBUFFERPROC; -} -pub type PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, attachment: GLenum, pname: GLenum, params: *mut GLint), ->; -extern "C" { - pub static mut glad_glGetFramebufferAttachmentParameteriv: - PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC; -} -pub type PFNGLGENERATEMIPMAPPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glGenerateMipmap: PFNGLGENERATEMIPMAPPROC; -} -pub type PFNGLBLITFRAMEBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn( - srcX0: GLint, - srcY0: GLint, - srcX1: GLint, - srcY1: GLint, - dstX0: GLint, - dstY0: GLint, - dstX1: GLint, - dstY1: GLint, - mask: GLbitfield, - filter: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlitFramebuffer: PFNGLBLITFRAMEBUFFERPROC; -} -pub type PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - samples: GLsizei, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glRenderbufferStorageMultisample: PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURELAYERPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - texture: GLuint, - level: GLint, - layer: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTextureLayer: PFNGLFRAMEBUFFERTEXTURELAYERPROC; -} -pub type PFNGLMAPBUFFERRANGEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptr, - length: GLsizeiptr, - access: GLbitfield, - ) -> *mut ::std::os::raw::c_void, ->; -extern "C" { - pub static mut glad_glMapBufferRange: PFNGLMAPBUFFERRANGEPROC; -} -pub type PFNGLFLUSHMAPPEDBUFFERRANGEPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, offset: GLintptr, length: GLsizeiptr), ->; -extern "C" { - pub static mut glad_glFlushMappedBufferRange: PFNGLFLUSHMAPPEDBUFFERRANGEPROC; -} -pub type PFNGLBINDVERTEXARRAYPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBindVertexArray: PFNGLBINDVERTEXARRAYPROC; -} -pub type PFNGLDELETEVERTEXARRAYSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteVertexArrays: PFNGLDELETEVERTEXARRAYSPROC; -} -pub type PFNGLGENVERTEXARRAYSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenVertexArrays: PFNGLGENVERTEXARRAYSPROC; -} -pub type PFNGLISVERTEXARRAYPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsVertexArray: PFNGLISVERTEXARRAYPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_3_1: ::std::os::raw::c_int; -} -pub type PFNGLDRAWARRAYSINSTANCEDPROC = ::std::option::Option< - unsafe extern "C" fn(mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei), ->; -extern "C" { - pub static mut glad_glDrawArraysInstanced: PFNGLDRAWARRAYSINSTANCEDPROC; -} -pub type PFNGLDRAWELEMENTSINSTANCEDPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - instancecount: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glDrawElementsInstanced: PFNGLDRAWELEMENTSINSTANCEDPROC; -} -pub type PFNGLTEXBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, internalformat: GLenum, buffer: GLuint), ->; -extern "C" { - pub static mut glad_glTexBuffer: PFNGLTEXBUFFERPROC; -} -pub type PFNGLPRIMITIVERESTARTINDEXPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPrimitiveRestartIndex: PFNGLPRIMITIVERESTARTINDEXPROC; -} -pub type PFNGLCOPYBUFFERSUBDATAPROC = ::std::option::Option< - unsafe extern "C" fn( - readTarget: GLenum, - writeTarget: GLenum, - readOffset: GLintptr, - writeOffset: GLintptr, - size: GLsizeiptr, - ), ->; -extern "C" { - pub static mut glad_glCopyBufferSubData: PFNGLCOPYBUFFERSUBDATAPROC; -} -pub type PFNGLGETUNIFORMINDICESPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformCount: GLsizei, - uniformNames: *mut *const GLchar, - uniformIndices: *mut GLuint, - ), ->; -extern "C" { - pub static mut glad_glGetUniformIndices: PFNGLGETUNIFORMINDICESPROC; -} -pub type PFNGLGETACTIVEUNIFORMSIVPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformCount: GLsizei, - uniformIndices: *const GLuint, - pname: GLenum, - params: *mut GLint, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniformsiv: PFNGLGETACTIVEUNIFORMSIVPROC; -} -pub type PFNGLGETACTIVEUNIFORMNAMEPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformIndex: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - uniformName: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniformName: PFNGLGETACTIVEUNIFORMNAMEPROC; -} -pub type PFNGLGETUNIFORMBLOCKINDEXPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, uniformBlockName: *const GLchar) -> GLuint, ->; -extern "C" { - pub static mut glad_glGetUniformBlockIndex: PFNGLGETUNIFORMBLOCKINDEXPROC; -} -pub type PFNGLGETACTIVEUNIFORMBLOCKIVPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformBlockIndex: GLuint, - pname: GLenum, - params: *mut GLint, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniformBlockiv: PFNGLGETACTIVEUNIFORMBLOCKIVPROC; -} -pub type PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC = ::std::option::Option< - unsafe extern "C" fn( - program: GLuint, - uniformBlockIndex: GLuint, - bufSize: GLsizei, - length: *mut GLsizei, - uniformBlockName: *mut GLchar, - ), ->; -extern "C" { - pub static mut glad_glGetActiveUniformBlockName: PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC; -} -pub type PFNGLUNIFORMBLOCKBINDINGPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint), ->; -extern "C" { - pub static mut glad_glUniformBlockBinding: PFNGLUNIFORMBLOCKBINDINGPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_3_2: ::std::os::raw::c_int; -} -pub type PFNGLDRAWELEMENTSBASEVERTEXPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - basevertex: GLint, - ), ->; -extern "C" { - pub static mut glad_glDrawElementsBaseVertex: PFNGLDRAWELEMENTSBASEVERTEXPROC; -} -pub type PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - start: GLuint, - end: GLuint, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - basevertex: GLint, - ), ->; -extern "C" { - pub static mut glad_glDrawRangeElementsBaseVertex: PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC; -} -pub type PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: GLsizei, - type_: GLenum, - indices: *const ::std::os::raw::c_void, - instancecount: GLsizei, - basevertex: GLint, - ), ->; -extern "C" { - pub static mut glad_glDrawElementsInstancedBaseVertex: PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC; -} -pub type PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC = ::std::option::Option< - unsafe extern "C" fn( - mode: GLenum, - count: *const GLsizei, - type_: GLenum, - indices: *mut *const ::std::os::raw::c_void, - drawcount: GLsizei, - basevertex: *const GLint, - ), ->; -extern "C" { - pub static mut glad_glMultiDrawElementsBaseVertex: PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC; -} -pub type PFNGLPROVOKINGVERTEXPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glProvokingVertex: PFNGLPROVOKINGVERTEXPROC; -} -pub type PFNGLFENCESYNCPROC = - ::std::option::Option GLsync>; -extern "C" { - pub static mut glad_glFenceSync: PFNGLFENCESYNCPROC; -} -pub type PFNGLISSYNCPROC = ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsSync: PFNGLISSYNCPROC; -} -pub type PFNGLDELETESYNCPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteSync: PFNGLDELETESYNCPROC; -} -pub type PFNGLCLIENTWAITSYNCPROC = ::std::option::Option< - unsafe extern "C" fn(sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> GLenum, ->; -extern "C" { - pub static mut glad_glClientWaitSync: PFNGLCLIENTWAITSYNCPROC; -} -pub type PFNGLWAITSYNCPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glWaitSync: PFNGLWAITSYNCPROC; -} -pub type PFNGLGETINTEGER64VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInteger64v: PFNGLGETINTEGER64VPROC; -} -pub type PFNGLGETSYNCIVPROC = ::std::option::Option< - unsafe extern "C" fn( - sync: GLsync, - pname: GLenum, - bufSize: GLsizei, - length: *mut GLsizei, - values: *mut GLint, - ), ->; -extern "C" { - pub static mut glad_glGetSynciv: PFNGLGETSYNCIVPROC; -} -pub type PFNGLGETINTEGER64I_VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInteger64i_v: PFNGLGETINTEGER64I_VPROC; -} -pub type PFNGLGETBUFFERPARAMETERI64VPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut GLint64), ->; -extern "C" { - pub static mut glad_glGetBufferParameteri64v: PFNGLGETBUFFERPARAMETERI64VPROC; -} -pub type PFNGLFRAMEBUFFERTEXTUREPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, attachment: GLenum, texture: GLuint, level: GLint), ->; -extern "C" { - pub static mut glad_glFramebufferTexture: PFNGLFRAMEBUFFERTEXTUREPROC; -} -pub type PFNGLTEXIMAGE2DMULTISAMPLEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - samples: GLsizei, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - fixedsamplelocations: GLboolean, - ), ->; -extern "C" { - pub static mut glad_glTexImage2DMultisample: PFNGLTEXIMAGE2DMULTISAMPLEPROC; -} -pub type PFNGLTEXIMAGE3DMULTISAMPLEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - samples: GLsizei, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - fixedsamplelocations: GLboolean, - ), ->; -extern "C" { - pub static mut glad_glTexImage3DMultisample: PFNGLTEXIMAGE3DMULTISAMPLEPROC; -} -pub type PFNGLGETMULTISAMPLEFVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetMultisamplefv: PFNGLGETMULTISAMPLEFVPROC; -} -pub type PFNGLSAMPLEMASKIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSampleMaski: PFNGLSAMPLEMASKIPROC; -} -extern "C" { - pub static mut GLAD_GL_VERSION_3_3: ::std::os::raw::c_int; -} -pub type PFNGLBINDFRAGDATALOCATIONINDEXEDPROC = ::std::option::Option< - unsafe extern "C" fn(program: GLuint, colorNumber: GLuint, index: GLuint, name: *const GLchar), ->; -extern "C" { - pub static mut glad_glBindFragDataLocationIndexed: PFNGLBINDFRAGDATALOCATIONINDEXEDPROC; -} -pub type PFNGLGETFRAGDATAINDEXPROC = - ::std::option::Option GLint>; -extern "C" { - pub static mut glad_glGetFragDataIndex: PFNGLGETFRAGDATAINDEXPROC; -} -pub type PFNGLGENSAMPLERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenSamplers: PFNGLGENSAMPLERSPROC; -} -pub type PFNGLDELETESAMPLERSPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteSamplers: PFNGLDELETESAMPLERSPROC; -} -pub type PFNGLISSAMPLERPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsSampler: PFNGLISSAMPLERPROC; -} -pub type PFNGLBINDSAMPLERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindSampler: PFNGLBINDSAMPLERPROC; -} -pub type PFNGLSAMPLERPARAMETERIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSamplerParameteri: PFNGLSAMPLERPARAMETERIPROC; -} -pub type PFNGLSAMPLERPARAMETERIVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLint), ->; -extern "C" { - pub static mut glad_glSamplerParameteriv: PFNGLSAMPLERPARAMETERIVPROC; -} -pub type PFNGLSAMPLERPARAMETERFPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSamplerParameterf: PFNGLSAMPLERPARAMETERFPROC; -} -pub type PFNGLSAMPLERPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLfloat), ->; -extern "C" { - pub static mut glad_glSamplerParameterfv: PFNGLSAMPLERPARAMETERFVPROC; -} -pub type PFNGLSAMPLERPARAMETERIIVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLint), ->; -extern "C" { - pub static mut glad_glSamplerParameterIiv: PFNGLSAMPLERPARAMETERIIVPROC; -} -pub type PFNGLSAMPLERPARAMETERIUIVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, param: *const GLuint), ->; -extern "C" { - pub static mut glad_glSamplerParameterIuiv: PFNGLSAMPLERPARAMETERIUIVPROC; -} -pub type PFNGLGETSAMPLERPARAMETERIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetSamplerParameteriv: PFNGLGETSAMPLERPARAMETERIVPROC; -} -pub type PFNGLGETSAMPLERPARAMETERIIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetSamplerParameterIiv: PFNGLGETSAMPLERPARAMETERIIVPROC; -} -pub type PFNGLGETSAMPLERPARAMETERFVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetSamplerParameterfv: PFNGLGETSAMPLERPARAMETERFVPROC; -} -pub type PFNGLGETSAMPLERPARAMETERIUIVPROC = ::std::option::Option< - unsafe extern "C" fn(sampler: GLuint, pname: GLenum, params: *mut GLuint), ->; -extern "C" { - pub static mut glad_glGetSamplerParameterIuiv: PFNGLGETSAMPLERPARAMETERIUIVPROC; -} -pub type PFNGLQUERYCOUNTERPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glQueryCounter: PFNGLQUERYCOUNTERPROC; -} -pub type PFNGLGETQUERYOBJECTI64VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryObjecti64v: PFNGLGETQUERYOBJECTI64VPROC; -} -pub type PFNGLGETQUERYOBJECTUI64VPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetQueryObjectui64v: PFNGLGETQUERYOBJECTUI64VPROC; -} -pub type PFNGLVERTEXATTRIBDIVISORPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribDivisor: PFNGLVERTEXATTRIBDIVISORPROC; -} -pub type PFNGLVERTEXATTRIBP1UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP1ui: PFNGLVERTEXATTRIBP1UIPROC; -} -pub type PFNGLVERTEXATTRIBP1UIVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP1uiv: PFNGLVERTEXATTRIBP1UIVPROC; -} -pub type PFNGLVERTEXATTRIBP2UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP2ui: PFNGLVERTEXATTRIBP2UIPROC; -} -pub type PFNGLVERTEXATTRIBP2UIVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP2uiv: PFNGLVERTEXATTRIBP2UIVPROC; -} -pub type PFNGLVERTEXATTRIBP3UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP3ui: PFNGLVERTEXATTRIBP3UIPROC; -} -pub type PFNGLVERTEXATTRIBP3UIVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP3uiv: PFNGLVERTEXATTRIBP3UIVPROC; -} -pub type PFNGLVERTEXATTRIBP4UIPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP4ui: PFNGLVERTEXATTRIBP4UIPROC; -} -pub type PFNGLVERTEXATTRIBP4UIVPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribP4uiv: PFNGLVERTEXATTRIBP4UIVPROC; -} -pub type PFNGLVERTEXP2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP2ui: PFNGLVERTEXP2UIPROC; -} -pub type PFNGLVERTEXP2UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP2uiv: PFNGLVERTEXP2UIVPROC; -} -pub type PFNGLVERTEXP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP3ui: PFNGLVERTEXP3UIPROC; -} -pub type PFNGLVERTEXP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP3uiv: PFNGLVERTEXP3UIVPROC; -} -pub type PFNGLVERTEXP4UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP4ui: PFNGLVERTEXP4UIPROC; -} -pub type PFNGLVERTEXP4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexP4uiv: PFNGLVERTEXP4UIVPROC; -} -pub type PFNGLTEXCOORDP1UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP1ui: PFNGLTEXCOORDP1UIPROC; -} -pub type PFNGLTEXCOORDP1UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP1uiv: PFNGLTEXCOORDP1UIVPROC; -} -pub type PFNGLTEXCOORDP2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP2ui: PFNGLTEXCOORDP2UIPROC; -} -pub type PFNGLTEXCOORDP2UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP2uiv: PFNGLTEXCOORDP2UIVPROC; -} -pub type PFNGLTEXCOORDP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP3ui: PFNGLTEXCOORDP3UIPROC; -} -pub type PFNGLTEXCOORDP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP3uiv: PFNGLTEXCOORDP3UIVPROC; -} -pub type PFNGLTEXCOORDP4UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP4ui: PFNGLTEXCOORDP4UIPROC; -} -pub type PFNGLTEXCOORDP4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glTexCoordP4uiv: PFNGLTEXCOORDP4UIVPROC; -} -pub type PFNGLMULTITEXCOORDP1UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glMultiTexCoordP1ui: PFNGLMULTITEXCOORDP1UIPROC; -} -pub type PFNGLMULTITEXCOORDP1UIVPROC = ::std::option::Option< - unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), ->; -extern "C" { - pub static mut glad_glMultiTexCoordP1uiv: PFNGLMULTITEXCOORDP1UIVPROC; -} -pub type PFNGLMULTITEXCOORDP2UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glMultiTexCoordP2ui: PFNGLMULTITEXCOORDP2UIPROC; -} -pub type PFNGLMULTITEXCOORDP2UIVPROC = ::std::option::Option< - unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), ->; -extern "C" { - pub static mut glad_glMultiTexCoordP2uiv: PFNGLMULTITEXCOORDP2UIVPROC; -} -pub type PFNGLMULTITEXCOORDP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glMultiTexCoordP3ui: PFNGLMULTITEXCOORDP3UIPROC; -} -pub type PFNGLMULTITEXCOORDP3UIVPROC = ::std::option::Option< - unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), ->; -extern "C" { - pub static mut glad_glMultiTexCoordP3uiv: PFNGLMULTITEXCOORDP3UIVPROC; -} -pub type PFNGLMULTITEXCOORDP4UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glMultiTexCoordP4ui: PFNGLMULTITEXCOORDP4UIPROC; -} -pub type PFNGLMULTITEXCOORDP4UIVPROC = ::std::option::Option< - unsafe extern "C" fn(texture: GLenum, type_: GLenum, coords: *const GLuint), ->; -extern "C" { - pub static mut glad_glMultiTexCoordP4uiv: PFNGLMULTITEXCOORDP4UIVPROC; -} -pub type PFNGLNORMALP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glNormalP3ui: PFNGLNORMALP3UIPROC; -} -pub type PFNGLNORMALP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glNormalP3uiv: PFNGLNORMALP3UIVPROC; -} -pub type PFNGLCOLORP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glColorP3ui: PFNGLCOLORP3UIPROC; -} -pub type PFNGLCOLORP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glColorP3uiv: PFNGLCOLORP3UIVPROC; -} -pub type PFNGLCOLORP4UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glColorP4ui: PFNGLCOLORP4UIPROC; -} -pub type PFNGLCOLORP4UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glColorP4uiv: PFNGLCOLORP4UIVPROC; -} -pub type PFNGLSECONDARYCOLORP3UIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSecondaryColorP3ui: PFNGLSECONDARYCOLORP3UIPROC; -} -pub type PFNGLSECONDARYCOLORP3UIVPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSecondaryColorP3uiv: PFNGLSECONDARYCOLORP3UIVPROC; -} -extern "C" { - pub static mut GLAD_GL_AMD_debug_output: ::std::os::raw::c_int; -} -pub type PFNGLDEBUGMESSAGEENABLEAMDPROC = ::std::option::Option< - unsafe extern "C" fn( - category: GLenum, - severity: GLenum, - count: GLsizei, - ids: *const GLuint, - enabled: GLboolean, - ), ->; -extern "C" { - pub static mut glad_glDebugMessageEnableAMD: PFNGLDEBUGMESSAGEENABLEAMDPROC; -} -pub type PFNGLDEBUGMESSAGEINSERTAMDPROC = ::std::option::Option< - unsafe extern "C" fn( - category: GLenum, - severity: GLenum, - id: GLuint, - length: GLsizei, - buf: *const GLchar, - ), ->; -extern "C" { - pub static mut glad_glDebugMessageInsertAMD: PFNGLDEBUGMESSAGEINSERTAMDPROC; -} -pub type PFNGLDEBUGMESSAGECALLBACKAMDPROC = ::std::option::Option< - unsafe extern "C" fn(callback: GLDEBUGPROCAMD, userParam: *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glDebugMessageCallbackAMD: PFNGLDEBUGMESSAGECALLBACKAMDPROC; -} -pub type PFNGLGETDEBUGMESSAGELOGAMDPROC = ::std::option::Option< - unsafe extern "C" fn( - count: GLuint, - bufsize: GLsizei, - categories: *mut GLenum, - severities: *mut GLuint, - ids: *mut GLuint, - lengths: *mut GLsizei, - message: *mut GLchar, - ) -> GLuint, ->; -extern "C" { - pub static mut glad_glGetDebugMessageLogAMD: PFNGLGETDEBUGMESSAGELOGAMDPROC; -} -extern "C" { - pub static mut GLAD_GL_AMD_query_buffer_object: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_ES2_compatibility: ::std::os::raw::c_int; -} -pub type PFNGLRELEASESHADERCOMPILERPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glReleaseShaderCompiler: PFNGLRELEASESHADERCOMPILERPROC; -} -pub type PFNGLSHADERBINARYPROC = ::std::option::Option< - unsafe extern "C" fn( - count: GLsizei, - shaders: *const GLuint, - binaryformat: GLenum, - binary: *const ::std::os::raw::c_void, - length: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glShaderBinary: PFNGLSHADERBINARYPROC; -} -pub type PFNGLGETSHADERPRECISIONFORMATPROC = ::std::option::Option< - unsafe extern "C" fn( - shadertype: GLenum, - precisiontype: GLenum, - range: *mut GLint, - precision: *mut GLint, - ), ->; -extern "C" { - pub static mut glad_glGetShaderPrecisionFormat: PFNGLGETSHADERPRECISIONFORMATPROC; -} -pub type PFNGLDEPTHRANGEFPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDepthRangef: PFNGLDEPTHRANGEFPROC; -} -pub type PFNGLCLEARDEPTHFPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glClearDepthf: PFNGLCLEARDEPTHFPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_ES3_compatibility: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_buffer_storage: ::std::os::raw::c_int; -} -pub type PFNGLBUFFERSTORAGEPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - size: GLsizeiptr, - data: *const ::std::os::raw::c_void, - flags: GLbitfield, - ), ->; -extern "C" { - pub static mut glad_glBufferStorage: PFNGLBUFFERSTORAGEPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_compatibility: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_compressed_texture_pixel_storage: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_debug_output: ::std::os::raw::c_int; -} -pub type PFNGLDEBUGMESSAGECONTROLARBPROC = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - severity: GLenum, - count: GLsizei, - ids: *const GLuint, - enabled: GLboolean, - ), ->; -extern "C" { - pub static mut glad_glDebugMessageControlARB: PFNGLDEBUGMESSAGECONTROLARBPROC; -} -pub type PFNGLDEBUGMESSAGEINSERTARBPROC = ::std::option::Option< - unsafe extern "C" fn( - source: GLenum, - type_: GLenum, - id: GLuint, - severity: GLenum, - length: GLsizei, - buf: *const GLchar, - ), ->; -extern "C" { - pub static mut glad_glDebugMessageInsertARB: PFNGLDEBUGMESSAGEINSERTARBPROC; -} -pub type PFNGLDEBUGMESSAGECALLBACKARBPROC = ::std::option::Option< - unsafe extern "C" fn(callback: GLDEBUGPROCARB, userParam: *const ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glDebugMessageCallbackARB: PFNGLDEBUGMESSAGECALLBACKARBPROC; -} -pub type PFNGLGETDEBUGMESSAGELOGARBPROC = ::std::option::Option< - unsafe extern "C" fn( - count: GLuint, - bufSize: GLsizei, - sources: *mut GLenum, - types: *mut GLenum, - ids: *mut GLuint, - severities: *mut GLenum, - lengths: *mut GLsizei, - messageLog: *mut GLchar, - ) -> GLuint, ->; -extern "C" { - pub static mut glad_glGetDebugMessageLogARB: PFNGLGETDEBUGMESSAGELOGARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_depth_buffer_float: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_depth_clamp: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_depth_texture: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_draw_buffers: ::std::os::raw::c_int; -} -pub type PFNGLDRAWBUFFERSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawBuffersARB: PFNGLDRAWBUFFERSARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_draw_buffers_blend: ::std::os::raw::c_int; -} -pub type PFNGLBLENDEQUATIONIARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquationiARB: PFNGLBLENDEQUATIONIARBPROC; -} -pub type PFNGLBLENDEQUATIONSEPARATEIARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquationSeparateiARB: PFNGLBLENDEQUATIONSEPARATEIARBPROC; -} -pub type PFNGLBLENDFUNCIARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendFunciARB: PFNGLBLENDFUNCIARBPROC; -} -pub type PFNGLBLENDFUNCSEPARATEIARBPROC = ::std::option::Option< - unsafe extern "C" fn( - buf: GLuint, - srcRGB: GLenum, - dstRGB: GLenum, - srcAlpha: GLenum, - dstAlpha: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlendFuncSeparateiARB: PFNGLBLENDFUNCSEPARATEIARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_explicit_attrib_location: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_explicit_uniform_location: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_fragment_program: ::std::os::raw::c_int; -} -pub type PFNGLPROGRAMSTRINGARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - format: GLenum, - len: GLsizei, - string: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glProgramStringARB: PFNGLPROGRAMSTRINGARBPROC; -} -pub type PFNGLBINDPROGRAMARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindProgramARB: PFNGLBINDPROGRAMARBPROC; -} -pub type PFNGLDELETEPROGRAMSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteProgramsARB: PFNGLDELETEPROGRAMSARBPROC; -} -pub type PFNGLGENPROGRAMSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenProgramsARB: PFNGLGENPROGRAMSARBPROC; -} -pub type PFNGLPROGRAMENVPARAMETER4DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - x: GLdouble, - y: GLdouble, - z: GLdouble, - w: GLdouble, - ), ->; -extern "C" { - pub static mut glad_glProgramEnvParameter4dARB: PFNGLPROGRAMENVPARAMETER4DARBPROC; -} -pub type PFNGLPROGRAMENVPARAMETER4DVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *const GLdouble), ->; -extern "C" { - pub static mut glad_glProgramEnvParameter4dvARB: PFNGLPROGRAMENVPARAMETER4DVARBPROC; -} -pub type PFNGLPROGRAMENVPARAMETER4FARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - x: GLfloat, - y: GLfloat, - z: GLfloat, - w: GLfloat, - ), ->; -extern "C" { - pub static mut glad_glProgramEnvParameter4fARB: PFNGLPROGRAMENVPARAMETER4FARBPROC; -} -pub type PFNGLPROGRAMENVPARAMETER4FVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *const GLfloat), ->; -extern "C" { - pub static mut glad_glProgramEnvParameter4fvARB: PFNGLPROGRAMENVPARAMETER4FVARBPROC; -} -pub type PFNGLPROGRAMLOCALPARAMETER4DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - x: GLdouble, - y: GLdouble, - z: GLdouble, - w: GLdouble, - ), ->; -extern "C" { - pub static mut glad_glProgramLocalParameter4dARB: PFNGLPROGRAMLOCALPARAMETER4DARBPROC; -} -pub type PFNGLPROGRAMLOCALPARAMETER4DVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *const GLdouble), ->; -extern "C" { - pub static mut glad_glProgramLocalParameter4dvARB: PFNGLPROGRAMLOCALPARAMETER4DVARBPROC; -} -pub type PFNGLPROGRAMLOCALPARAMETER4FARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - index: GLuint, - x: GLfloat, - y: GLfloat, - z: GLfloat, - w: GLfloat, - ), ->; -extern "C" { - pub static mut glad_glProgramLocalParameter4fARB: PFNGLPROGRAMLOCALPARAMETER4FARBPROC; -} -pub type PFNGLPROGRAMLOCALPARAMETER4FVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *const GLfloat), ->; -extern "C" { - pub static mut glad_glProgramLocalParameter4fvARB: PFNGLPROGRAMLOCALPARAMETER4FVARBPROC; -} -pub type PFNGLGETPROGRAMENVPARAMETERDVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *mut GLdouble), ->; -extern "C" { - pub static mut glad_glGetProgramEnvParameterdvARB: PFNGLGETPROGRAMENVPARAMETERDVARBPROC; -} -pub type PFNGLGETPROGRAMENVPARAMETERFVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetProgramEnvParameterfvARB: PFNGLGETPROGRAMENVPARAMETERFVARBPROC; -} -pub type PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *mut GLdouble), ->; -extern "C" { - pub static mut glad_glGetProgramLocalParameterdvARB: PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC; -} -pub type PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, index: GLuint, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetProgramLocalParameterfvARB: PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC; -} -pub type PFNGLGETPROGRAMIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetProgramivARB: PFNGLGETPROGRAMIVARBPROC; -} -pub type PFNGLGETPROGRAMSTRINGARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, string: *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetProgramStringARB: PFNGLGETPROGRAMSTRINGARBPROC; -} -pub type PFNGLISPROGRAMARBPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsProgramARB: PFNGLISPROGRAMARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_fragment_shader: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_framebuffer_object: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_framebuffer_sRGB: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_multisample: ::std::os::raw::c_int; -} -pub type PFNGLSAMPLECOVERAGEARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSampleCoverageARB: PFNGLSAMPLECOVERAGEARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_sample_locations: ::std::os::raw::c_int; -} -pub type PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, start: GLuint, count: GLsizei, v: *const GLfloat), ->; -extern "C" { - pub static mut glad_glFramebufferSampleLocationsfvARB: PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC; -} -pub type PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC = ::std::option::Option< - unsafe extern "C" fn(framebuffer: GLuint, start: GLuint, count: GLsizei, v: *const GLfloat), ->; -extern "C" { - pub static mut glad_glNamedFramebufferSampleLocationsfvARB: - PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC; -} -pub type PFNGLEVALUATEDEPTHVALUESARBPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEvaluateDepthValuesARB: PFNGLEVALUATEDEPTHVALUESARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_compression: ::std::os::raw::c_int; -} -pub type PFNGLCOMPRESSEDTEXIMAGE3DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage3DARB: PFNGLCOMPRESSEDTEXIMAGE3DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE2DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage2DARB: PFNGLCOMPRESSEDTEXIMAGE2DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXIMAGE1DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - internalformat: GLenum, - width: GLsizei, - border: GLint, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexImage1DARB: PFNGLCOMPRESSEDTEXIMAGE1DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - zoffset: GLint, - width: GLsizei, - height: GLsizei, - depth: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage3DARB: PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - yoffset: GLint, - width: GLsizei, - height: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage2DARB: PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC; -} -pub type PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - level: GLint, - xoffset: GLint, - width: GLsizei, - format: GLenum, - imageSize: GLsizei, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glCompressedTexSubImage1DARB: PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC; -} -pub type PFNGLGETCOMPRESSEDTEXIMAGEARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, level: GLint, img: *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetCompressedTexImageARB: PFNGLGETCOMPRESSEDTEXIMAGEARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_float: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_multisample: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_non_power_of_two: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_rg: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_texture_swizzle: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_uniform_buffer_object: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_array_object: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_attrib_binding: ::std::os::raw::c_int; -} -pub type PFNGLBINDVERTEXBUFFERPROC = ::std::option::Option< - unsafe extern "C" fn(bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei), ->; -extern "C" { - pub static mut glad_glBindVertexBuffer: PFNGLBINDVERTEXBUFFERPROC; -} -pub type PFNGLVERTEXATTRIBFORMATPROC = ::std::option::Option< - unsafe extern "C" fn( - attribindex: GLuint, - size: GLint, - type_: GLenum, - normalized: GLboolean, - relativeoffset: GLuint, - ), ->; -extern "C" { - pub static mut glad_glVertexAttribFormat: PFNGLVERTEXATTRIBFORMATPROC; -} -pub type PFNGLVERTEXATTRIBIFORMATPROC = ::std::option::Option< - unsafe extern "C" fn(attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribIFormat: PFNGLVERTEXATTRIBIFORMATPROC; -} -pub type PFNGLVERTEXATTRIBLFORMATPROC = ::std::option::Option< - unsafe extern "C" fn(attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint), ->; -extern "C" { - pub static mut glad_glVertexAttribLFormat: PFNGLVERTEXATTRIBLFORMATPROC; -} -pub type PFNGLVERTEXATTRIBBINDINGPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttribBinding: PFNGLVERTEXATTRIBBINDINGPROC; -} -pub type PFNGLVERTEXBINDINGDIVISORPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexBindingDivisor: PFNGLVERTEXBINDINGDIVISORPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_buffer_object: ::std::os::raw::c_int; -} -pub type PFNGLBINDBUFFERARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindBufferARB: PFNGLBINDBUFFERARBPROC; -} -pub type PFNGLDELETEBUFFERSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteBuffersARB: PFNGLDELETEBUFFERSARBPROC; -} -pub type PFNGLGENBUFFERSARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenBuffersARB: PFNGLGENBUFFERSARBPROC; -} -pub type PFNGLISBUFFERARBPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsBufferARB: PFNGLISBUFFERARBPROC; -} -pub type PFNGLBUFFERDATAARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - size: GLsizeiptrARB, - data: *const ::std::os::raw::c_void, - usage: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBufferDataARB: PFNGLBUFFERDATAARBPROC; -} -pub type PFNGLBUFFERSUBDATAARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptrARB, - size: GLsizeiptrARB, - data: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glBufferSubDataARB: PFNGLBUFFERSUBDATAARBPROC; -} -pub type PFNGLGETBUFFERSUBDATAARBPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - offset: GLintptrARB, - size: GLsizeiptrARB, - data: *mut ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glGetBufferSubDataARB: PFNGLGETBUFFERSUBDATAARBPROC; -} -pub type PFNGLMAPBUFFERARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, access: GLenum) -> *mut ::std::os::raw::c_void, ->; -extern "C" { - pub static mut glad_glMapBufferARB: PFNGLMAPBUFFERARBPROC; -} -pub type PFNGLUNMAPBUFFERARBPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glUnmapBufferARB: PFNGLUNMAPBUFFERARBPROC; -} -pub type PFNGLGETBUFFERPARAMETERIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetBufferParameterivARB: PFNGLGETBUFFERPARAMETERIVARBPROC; -} -pub type PFNGLGETBUFFERPOINTERVARBPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, pname: GLenum, params: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetBufferPointervARB: PFNGLGETBUFFERPOINTERVARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_program: ::std::os::raw::c_int; -} -pub type PFNGLVERTEXATTRIB1DARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1dARB: PFNGLVERTEXATTRIB1DARBPROC; -} -pub type PFNGLVERTEXATTRIB1DVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1dvARB: PFNGLVERTEXATTRIB1DVARBPROC; -} -pub type PFNGLVERTEXATTRIB1FARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1fARB: PFNGLVERTEXATTRIB1FARBPROC; -} -pub type PFNGLVERTEXATTRIB1FVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1fvARB: PFNGLVERTEXATTRIB1FVARBPROC; -} -pub type PFNGLVERTEXATTRIB1SARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1sARB: PFNGLVERTEXATTRIB1SARBPROC; -} -pub type PFNGLVERTEXATTRIB1SVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib1svARB: PFNGLVERTEXATTRIB1SVARBPROC; -} -pub type PFNGLVERTEXATTRIB2DARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2dARB: PFNGLVERTEXATTRIB2DARBPROC; -} -pub type PFNGLVERTEXATTRIB2DVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2dvARB: PFNGLVERTEXATTRIB2DVARBPROC; -} -pub type PFNGLVERTEXATTRIB2FARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2fARB: PFNGLVERTEXATTRIB2FARBPROC; -} -pub type PFNGLVERTEXATTRIB2FVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2fvARB: PFNGLVERTEXATTRIB2FVARBPROC; -} -pub type PFNGLVERTEXATTRIB2SARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2sARB: PFNGLVERTEXATTRIB2SARBPROC; -} -pub type PFNGLVERTEXATTRIB2SVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib2svARB: PFNGLVERTEXATTRIB2SVARBPROC; -} -pub type PFNGLVERTEXATTRIB3DARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble), ->; -extern "C" { - pub static mut glad_glVertexAttrib3dARB: PFNGLVERTEXATTRIB3DARBPROC; -} -pub type PFNGLVERTEXATTRIB3DVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3dvARB: PFNGLVERTEXATTRIB3DVARBPROC; -} -pub type PFNGLVERTEXATTRIB3FARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3fARB: PFNGLVERTEXATTRIB3FARBPROC; -} -pub type PFNGLVERTEXATTRIB3FVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3fvARB: PFNGLVERTEXATTRIB3FVARBPROC; -} -pub type PFNGLVERTEXATTRIB3SARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3sARB: PFNGLVERTEXATTRIB3SARBPROC; -} -pub type PFNGLVERTEXATTRIB3SVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib3svARB: PFNGLVERTEXATTRIB3SVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NBVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NbvARB: PFNGLVERTEXATTRIB4NBVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NivARB: PFNGLVERTEXATTRIB4NIVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NSVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NsvARB: PFNGLVERTEXATTRIB4NSVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NUBARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLubyte, y: GLubyte, z: GLubyte, w: GLubyte), ->; -extern "C" { - pub static mut glad_glVertexAttrib4NubARB: PFNGLVERTEXATTRIB4NUBARBPROC; -} -pub type PFNGLVERTEXATTRIB4NUBVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NubvARB: PFNGLVERTEXATTRIB4NUBVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NUIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NuivARB: PFNGLVERTEXATTRIB4NUIVARBPROC; -} -pub type PFNGLVERTEXATTRIB4NUSVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4NusvARB: PFNGLVERTEXATTRIB4NUSVARBPROC; -} -pub type PFNGLVERTEXATTRIB4BVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4bvARB: PFNGLVERTEXATTRIB4BVARBPROC; -} -pub type PFNGLVERTEXATTRIB4DARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble), ->; -extern "C" { - pub static mut glad_glVertexAttrib4dARB: PFNGLVERTEXATTRIB4DARBPROC; -} -pub type PFNGLVERTEXATTRIB4DVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4dvARB: PFNGLVERTEXATTRIB4DVARBPROC; -} -pub type PFNGLVERTEXATTRIB4FARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat), ->; -extern "C" { - pub static mut glad_glVertexAttrib4fARB: PFNGLVERTEXATTRIB4FARBPROC; -} -pub type PFNGLVERTEXATTRIB4FVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4fvARB: PFNGLVERTEXATTRIB4FVARBPROC; -} -pub type PFNGLVERTEXATTRIB4IVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4ivARB: PFNGLVERTEXATTRIB4IVARBPROC; -} -pub type PFNGLVERTEXATTRIB4SARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, x: GLshort, y: GLshort, z: GLshort, w: GLshort), ->; -extern "C" { - pub static mut glad_glVertexAttrib4sARB: PFNGLVERTEXATTRIB4SARBPROC; -} -pub type PFNGLVERTEXATTRIB4SVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4svARB: PFNGLVERTEXATTRIB4SVARBPROC; -} -pub type PFNGLVERTEXATTRIB4UBVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4ubvARB: PFNGLVERTEXATTRIB4UBVARBPROC; -} -pub type PFNGLVERTEXATTRIB4UIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4uivARB: PFNGLVERTEXATTRIB4UIVARBPROC; -} -pub type PFNGLVERTEXATTRIB4USVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVertexAttrib4usvARB: PFNGLVERTEXATTRIB4USVARBPROC; -} -pub type PFNGLVERTEXATTRIBPOINTERARBPROC = ::std::option::Option< - unsafe extern "C" fn( - index: GLuint, - size: GLint, - type_: GLenum, - normalized: GLboolean, - stride: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVertexAttribPointerARB: PFNGLVERTEXATTRIBPOINTERARBPROC; -} -pub type PFNGLENABLEVERTEXATTRIBARRAYARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glEnableVertexAttribArrayARB: PFNGLENABLEVERTEXATTRIBARRAYARBPROC; -} -pub type PFNGLDISABLEVERTEXATTRIBARRAYARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDisableVertexAttribArrayARB: PFNGLDISABLEVERTEXATTRIBARRAYARBPROC; -} -pub type PFNGLGETVERTEXATTRIBDVARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, pname: GLenum, params: *mut GLdouble), ->; -extern "C" { - pub static mut glad_glGetVertexAttribdvARB: PFNGLGETVERTEXATTRIBDVARBPROC; -} -pub type PFNGLGETVERTEXATTRIBFVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribfvARB: PFNGLGETVERTEXATTRIBFVARBPROC; -} -pub type PFNGLGETVERTEXATTRIBIVARBPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVertexAttribivARB: PFNGLGETVERTEXATTRIBIVARBPROC; -} -pub type PFNGLGETVERTEXATTRIBPOINTERVARBPROC = ::std::option::Option< - unsafe extern "C" fn(index: GLuint, pname: GLenum, pointer: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetVertexAttribPointervARB: PFNGLGETVERTEXATTRIBPOINTERVARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ARB_vertex_shader: ::std::os::raw::c_int; -} -pub type PFNGLBINDATTRIBLOCATIONARBPROC = ::std::option::Option< - unsafe extern "C" fn(programObj: GLhandleARB, index: GLuint, name: *const GLcharARB), ->; -extern "C" { - pub static mut glad_glBindAttribLocationARB: PFNGLBINDATTRIBLOCATIONARBPROC; -} -pub type PFNGLGETACTIVEATTRIBARBPROC = ::std::option::Option< - unsafe extern "C" fn( - programObj: GLhandleARB, - index: GLuint, - maxLength: GLsizei, - length: *mut GLsizei, - size: *mut GLint, - type_: *mut GLenum, - name: *mut GLcharARB, - ), ->; -extern "C" { - pub static mut glad_glGetActiveAttribARB: PFNGLGETACTIVEATTRIBARBPROC; -} -pub type PFNGLGETATTRIBLOCATIONARBPROC = ::std::option::Option< - unsafe extern "C" fn(programObj: GLhandleARB, name: *const GLcharARB) -> GLint, ->; -extern "C" { - pub static mut glad_glGetAttribLocationARB: PFNGLGETATTRIBLOCATIONARBPROC; -} -extern "C" { - pub static mut GLAD_GL_ATI_element_array: ::std::os::raw::c_int; -} -pub type PFNGLELEMENTPOINTERATIPROC = ::std::option::Option< - unsafe extern "C" fn(type_: GLenum, pointer: *const ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glElementPointerATI: PFNGLELEMENTPOINTERATIPROC; -} -pub type PFNGLDRAWELEMENTARRAYATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawElementArrayATI: PFNGLDRAWELEMENTARRAYATIPROC; -} -pub type PFNGLDRAWRANGEELEMENTARRAYATIPROC = ::std::option::Option< - unsafe extern "C" fn(mode: GLenum, start: GLuint, end: GLuint, count: GLsizei), ->; -extern "C" { - pub static mut glad_glDrawRangeElementArrayATI: PFNGLDRAWRANGEELEMENTARRAYATIPROC; -} -extern "C" { - pub static mut GLAD_GL_ATI_fragment_shader: ::std::os::raw::c_int; -} -pub type PFNGLGENFRAGMENTSHADERSATIPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glGenFragmentShadersATI: PFNGLGENFRAGMENTSHADERSATIPROC; -} -pub type PFNGLBINDFRAGMENTSHADERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBindFragmentShaderATI: PFNGLBINDFRAGMENTSHADERATIPROC; -} -pub type PFNGLDELETEFRAGMENTSHADERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteFragmentShaderATI: PFNGLDELETEFRAGMENTSHADERATIPROC; -} -pub type PFNGLBEGINFRAGMENTSHADERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBeginFragmentShaderATI: PFNGLBEGINFRAGMENTSHADERATIPROC; -} -pub type PFNGLENDFRAGMENTSHADERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndFragmentShaderATI: PFNGLENDFRAGMENTSHADERATIPROC; -} -pub type PFNGLPASSTEXCOORDATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPassTexCoordATI: PFNGLPASSTEXCOORDATIPROC; -} -pub type PFNGLSAMPLEMAPATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSampleMapATI: PFNGLSAMPLEMAPATIPROC; -} -pub type PFNGLCOLORFRAGMENTOP1ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMask: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glColorFragmentOp1ATI: PFNGLCOLORFRAGMENTOP1ATIPROC; -} -pub type PFNGLCOLORFRAGMENTOP2ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMask: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - arg2: GLuint, - arg2Rep: GLuint, - arg2Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glColorFragmentOp2ATI: PFNGLCOLORFRAGMENTOP2ATIPROC; -} -pub type PFNGLCOLORFRAGMENTOP3ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMask: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - arg2: GLuint, - arg2Rep: GLuint, - arg2Mod: GLuint, - arg3: GLuint, - arg3Rep: GLuint, - arg3Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glColorFragmentOp3ATI: PFNGLCOLORFRAGMENTOP3ATIPROC; -} -pub type PFNGLALPHAFRAGMENTOP1ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glAlphaFragmentOp1ATI: PFNGLALPHAFRAGMENTOP1ATIPROC; -} -pub type PFNGLALPHAFRAGMENTOP2ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - arg2: GLuint, - arg2Rep: GLuint, - arg2Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glAlphaFragmentOp2ATI: PFNGLALPHAFRAGMENTOP2ATIPROC; -} -pub type PFNGLALPHAFRAGMENTOP3ATIPROC = ::std::option::Option< - unsafe extern "C" fn( - op: GLenum, - dst: GLuint, - dstMod: GLuint, - arg1: GLuint, - arg1Rep: GLuint, - arg1Mod: GLuint, - arg2: GLuint, - arg2Rep: GLuint, - arg2Mod: GLuint, - arg3: GLuint, - arg3Rep: GLuint, - arg3Mod: GLuint, - ), ->; -extern "C" { - pub static mut glad_glAlphaFragmentOp3ATI: PFNGLALPHAFRAGMENTOP3ATIPROC; -} -pub type PFNGLSETFRAGMENTSHADERCONSTANTATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glSetFragmentShaderConstantATI: PFNGLSETFRAGMENTSHADERCONSTANTATIPROC; -} -extern "C" { - pub static mut GLAD_GL_ATI_vertex_array_object: ::std::os::raw::c_int; -} -pub type PFNGLNEWOBJECTBUFFERATIPROC = ::std::option::Option< - unsafe extern "C" fn( - size: GLsizei, - pointer: *const ::std::os::raw::c_void, - usage: GLenum, - ) -> GLuint, ->; -extern "C" { - pub static mut glad_glNewObjectBufferATI: PFNGLNEWOBJECTBUFFERATIPROC; -} -pub type PFNGLISOBJECTBUFFERATIPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsObjectBufferATI: PFNGLISOBJECTBUFFERATIPROC; -} -pub type PFNGLUPDATEOBJECTBUFFERATIPROC = ::std::option::Option< - unsafe extern "C" fn( - buffer: GLuint, - offset: GLuint, - size: GLsizei, - pointer: *const ::std::os::raw::c_void, - preserve: GLenum, - ), ->; -extern "C" { - pub static mut glad_glUpdateObjectBufferATI: PFNGLUPDATEOBJECTBUFFERATIPROC; -} -pub type PFNGLGETOBJECTBUFFERFVATIPROC = ::std::option::Option< - unsafe extern "C" fn(buffer: GLuint, pname: GLenum, params: *mut GLfloat), ->; -extern "C" { - pub static mut glad_glGetObjectBufferfvATI: PFNGLGETOBJECTBUFFERFVATIPROC; -} -pub type PFNGLGETOBJECTBUFFERIVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetObjectBufferivATI: PFNGLGETOBJECTBUFFERIVATIPROC; -} -pub type PFNGLFREEOBJECTBUFFERATIPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glFreeObjectBufferATI: PFNGLFREEOBJECTBUFFERATIPROC; -} -pub type PFNGLARRAYOBJECTATIPROC = ::std::option::Option< - unsafe extern "C" fn( - array: GLenum, - size: GLint, - type_: GLenum, - stride: GLsizei, - buffer: GLuint, - offset: GLuint, - ), ->; -extern "C" { - pub static mut glad_glArrayObjectATI: PFNGLARRAYOBJECTATIPROC; -} -pub type PFNGLGETARRAYOBJECTFVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetArrayObjectfvATI: PFNGLGETARRAYOBJECTFVATIPROC; -} -pub type PFNGLGETARRAYOBJECTIVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetArrayObjectivATI: PFNGLGETARRAYOBJECTIVATIPROC; -} -pub type PFNGLVARIANTARRAYOBJECTATIPROC = ::std::option::Option< - unsafe extern "C" fn( - id: GLuint, - type_: GLenum, - stride: GLsizei, - buffer: GLuint, - offset: GLuint, - ), ->; -extern "C" { - pub static mut glad_glVariantArrayObjectATI: PFNGLVARIANTARRAYOBJECTATIPROC; -} -pub type PFNGLGETVARIANTARRAYOBJECTFVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantArrayObjectfvATI: PFNGLGETVARIANTARRAYOBJECTFVATIPROC; -} -pub type PFNGLGETVARIANTARRAYOBJECTIVATIPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantArrayObjectivATI: PFNGLGETVARIANTARRAYOBJECTIVATIPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_blend_color: ::std::os::raw::c_int; -} -pub type PFNGLBLENDCOLOREXTPROC = ::std::option::Option< - unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat), ->; -extern "C" { - pub static mut glad_glBlendColorEXT: PFNGLBLENDCOLOREXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_blend_equation_separate: ::std::os::raw::c_int; -} -pub type PFNGLBLENDEQUATIONSEPARATEEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBlendEquationSeparateEXT: PFNGLBLENDEQUATIONSEPARATEEXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_blend_func_separate: ::std::os::raw::c_int; -} -pub type PFNGLBLENDFUNCSEPARATEEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - sfactorRGB: GLenum, - dfactorRGB: GLenum, - sfactorAlpha: GLenum, - dfactorAlpha: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlendFuncSeparateEXT: PFNGLBLENDFUNCSEPARATEEXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_debug_marker: ::std::os::raw::c_int; -} -pub type PFNGLINSERTEVENTMARKEREXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glInsertEventMarkerEXT: PFNGLINSERTEVENTMARKEREXTPROC; -} -pub type PFNGLPUSHGROUPMARKEREXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glPushGroupMarkerEXT: PFNGLPUSHGROUPMARKEREXTPROC; -} -pub type PFNGLPOPGROUPMARKEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glPopGroupMarkerEXT: PFNGLPOPGROUPMARKEREXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_blit: ::std::os::raw::c_int; -} -pub type PFNGLBLITFRAMEBUFFEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - srcX0: GLint, - srcY0: GLint, - srcX1: GLint, - srcY1: GLint, - dstX0: GLint, - dstY0: GLint, - dstX1: GLint, - dstY1: GLint, - mask: GLbitfield, - filter: GLenum, - ), ->; -extern "C" { - pub static mut glad_glBlitFramebufferEXT: PFNGLBLITFRAMEBUFFEREXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_multisample: ::std::os::raw::c_int; -} -pub type PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - samples: GLsizei, - internalformat: GLenum, - width: GLsizei, - height: GLsizei, - ), ->; -extern "C" { - pub static mut glad_glRenderbufferStorageMultisampleEXT: - PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_multisample_blit_scaled: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_object: ::std::os::raw::c_int; -} -pub type PFNGLISRENDERBUFFEREXTPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsRenderbufferEXT: PFNGLISRENDERBUFFEREXTPROC; -} -pub type PFNGLBINDRENDERBUFFEREXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindRenderbufferEXT: PFNGLBINDRENDERBUFFEREXTPROC; -} -pub type PFNGLDELETERENDERBUFFERSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteRenderbuffersEXT: PFNGLDELETERENDERBUFFERSEXTPROC; -} -pub type PFNGLGENRENDERBUFFERSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenRenderbuffersEXT: PFNGLGENRENDERBUFFERSEXTPROC; -} -pub type PFNGLRENDERBUFFERSTORAGEEXTPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei), ->; -extern "C" { - pub static mut glad_glRenderbufferStorageEXT: PFNGLRENDERBUFFERSTORAGEEXTPROC; -} -pub type PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetRenderbufferParameterivEXT: PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC; -} -pub type PFNGLISFRAMEBUFFEREXTPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsFramebufferEXT: PFNGLISFRAMEBUFFEREXTPROC; -} -pub type PFNGLBINDFRAMEBUFFEREXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glBindFramebufferEXT: PFNGLBINDFRAMEBUFFEREXTPROC; -} -pub type PFNGLDELETEFRAMEBUFFERSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteFramebuffersEXT: PFNGLDELETEFRAMEBUFFERSEXTPROC; -} -pub type PFNGLGENFRAMEBUFFERSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGenFramebuffersEXT: PFNGLGENFRAMEBUFFERSEXTPROC; -} -pub type PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC = - ::std::option::Option GLenum>; -extern "C" { - pub static mut glad_glCheckFramebufferStatusEXT: PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE1DEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture1DEXT: PFNGLFRAMEBUFFERTEXTURE1DEXTPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE2DEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture2DEXT: PFNGLFRAMEBUFFERTEXTURE2DEXTPROC; -} -pub type PFNGLFRAMEBUFFERTEXTURE3DEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - textarget: GLenum, - texture: GLuint, - level: GLint, - zoffset: GLint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferTexture3DEXT: PFNGLFRAMEBUFFERTEXTURE3DEXTPROC; -} -pub type PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - target: GLenum, - attachment: GLenum, - renderbuffertarget: GLenum, - renderbuffer: GLuint, - ), ->; -extern "C" { - pub static mut glad_glFramebufferRenderbufferEXT: PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC; -} -pub type PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC = ::std::option::Option< - unsafe extern "C" fn(target: GLenum, attachment: GLenum, pname: GLenum, params: *mut GLint), ->; -extern "C" { - pub static mut glad_glGetFramebufferAttachmentParameterivEXT: - PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC; -} -pub type PFNGLGENERATEMIPMAPEXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glGenerateMipmapEXT: PFNGLGENERATEMIPMAPEXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_framebuffer_sRGB: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_index_array_formats: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_texture: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_texture_compression_s3tc: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_texture_sRGB: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_texture_swizzle: ::std::os::raw::c_int; -} -extern "C" { - pub static mut GLAD_GL_EXT_vertex_array: ::std::os::raw::c_int; -} -pub type PFNGLARRAYELEMENTEXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glArrayElementEXT: PFNGLARRAYELEMENTEXTPROC; -} -pub type PFNGLCOLORPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - size: GLint, - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glColorPointerEXT: PFNGLCOLORPOINTEREXTPROC; -} -pub type PFNGLDRAWARRAYSEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDrawArraysEXT: PFNGLDRAWARRAYSEXTPROC; -} -pub type PFNGLEDGEFLAGPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn(stride: GLsizei, count: GLsizei, pointer: *const GLboolean), ->; -extern "C" { - pub static mut glad_glEdgeFlagPointerEXT: PFNGLEDGEFLAGPOINTEREXTPROC; -} -pub type PFNGLGETPOINTERVEXTPROC = ::std::option::Option< - unsafe extern "C" fn(pname: GLenum, params: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetPointervEXT: PFNGLGETPOINTERVEXTPROC; -} -pub type PFNGLINDEXPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glIndexPointerEXT: PFNGLINDEXPOINTEREXTPROC; -} -pub type PFNGLNORMALPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glNormalPointerEXT: PFNGLNORMALPOINTEREXTPROC; -} -pub type PFNGLTEXCOORDPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - size: GLint, - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glTexCoordPointerEXT: PFNGLTEXCOORDPOINTEREXTPROC; -} -pub type PFNGLVERTEXPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - size: GLint, - type_: GLenum, - stride: GLsizei, - count: GLsizei, - pointer: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVertexPointerEXT: PFNGLVERTEXPOINTEREXTPROC; -} -extern "C" { - pub static mut GLAD_GL_EXT_vertex_shader: ::std::os::raw::c_int; -} -pub type PFNGLBEGINVERTEXSHADEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBeginVertexShaderEXT: PFNGLBEGINVERTEXSHADEREXTPROC; -} -pub type PFNGLENDVERTEXSHADEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glEndVertexShaderEXT: PFNGLENDVERTEXSHADEREXTPROC; -} -pub type PFNGLBINDVERTEXSHADEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glBindVertexShaderEXT: PFNGLBINDVERTEXSHADEREXTPROC; -} -pub type PFNGLGENVERTEXSHADERSEXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glGenVertexShadersEXT: PFNGLGENVERTEXSHADERSEXTPROC; -} -pub type PFNGLDELETEVERTEXSHADEREXTPROC = ::std::option::Option; -extern "C" { - pub static mut glad_glDeleteVertexShaderEXT: PFNGLDELETEVERTEXSHADEREXTPROC; -} -pub type PFNGLSHADEROP1EXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glShaderOp1EXT: PFNGLSHADEROP1EXTPROC; -} -pub type PFNGLSHADEROP2EXTPROC = ::std::option::Option< - unsafe extern "C" fn(op: GLenum, res: GLuint, arg1: GLuint, arg2: GLuint), ->; -extern "C" { - pub static mut glad_glShaderOp2EXT: PFNGLSHADEROP2EXTPROC; -} -pub type PFNGLSHADEROP3EXTPROC = ::std::option::Option< - unsafe extern "C" fn(op: GLenum, res: GLuint, arg1: GLuint, arg2: GLuint, arg3: GLuint), ->; -extern "C" { - pub static mut glad_glShaderOp3EXT: PFNGLSHADEROP3EXTPROC; -} -pub type PFNGLSWIZZLEEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - res: GLuint, - in_: GLuint, - outX: GLenum, - outY: GLenum, - outZ: GLenum, - outW: GLenum, - ), ->; -extern "C" { - pub static mut glad_glSwizzleEXT: PFNGLSWIZZLEEXTPROC; -} -pub type PFNGLWRITEMASKEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - res: GLuint, - in_: GLuint, - outX: GLenum, - outY: GLenum, - outZ: GLenum, - outW: GLenum, - ), ->; -extern "C" { - pub static mut glad_glWriteMaskEXT: PFNGLWRITEMASKEXTPROC; -} -pub type PFNGLINSERTCOMPONENTEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glInsertComponentEXT: PFNGLINSERTCOMPONENTEXTPROC; -} -pub type PFNGLEXTRACTCOMPONENTEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glExtractComponentEXT: PFNGLEXTRACTCOMPONENTEXTPROC; -} -pub type PFNGLGENSYMBOLSEXTPROC = ::std::option::Option< - unsafe extern "C" fn( - datatype: GLenum, - storagetype: GLenum, - range: GLenum, - components: GLuint, - ) -> GLuint, ->; -extern "C" { - pub static mut glad_glGenSymbolsEXT: PFNGLGENSYMBOLSEXTPROC; -} -pub type PFNGLSETINVARIANTEXTPROC = ::std::option::Option< - unsafe extern "C" fn(id: GLuint, type_: GLenum, addr: *const ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glSetInvariantEXT: PFNGLSETINVARIANTEXTPROC; -} -pub type PFNGLSETLOCALCONSTANTEXTPROC = ::std::option::Option< - unsafe extern "C" fn(id: GLuint, type_: GLenum, addr: *const ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glSetLocalConstantEXT: PFNGLSETLOCALCONSTANTEXTPROC; -} -pub type PFNGLVARIANTBVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantbvEXT: PFNGLVARIANTBVEXTPROC; -} -pub type PFNGLVARIANTSVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantsvEXT: PFNGLVARIANTSVEXTPROC; -} -pub type PFNGLVARIANTIVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantivEXT: PFNGLVARIANTIVEXTPROC; -} -pub type PFNGLVARIANTFVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantfvEXT: PFNGLVARIANTFVEXTPROC; -} -pub type PFNGLVARIANTDVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantdvEXT: PFNGLVARIANTDVEXTPROC; -} -pub type PFNGLVARIANTUBVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantubvEXT: PFNGLVARIANTUBVEXTPROC; -} -pub type PFNGLVARIANTUSVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantusvEXT: PFNGLVARIANTUSVEXTPROC; -} -pub type PFNGLVARIANTUIVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glVariantuivEXT: PFNGLVARIANTUIVEXTPROC; -} -pub type PFNGLVARIANTPOINTEREXTPROC = ::std::option::Option< - unsafe extern "C" fn( - id: GLuint, - type_: GLenum, - stride: GLuint, - addr: *const ::std::os::raw::c_void, - ), ->; -extern "C" { - pub static mut glad_glVariantPointerEXT: PFNGLVARIANTPOINTEREXTPROC; -} -pub type PFNGLENABLEVARIANTCLIENTSTATEEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glEnableVariantClientStateEXT: PFNGLENABLEVARIANTCLIENTSTATEEXTPROC; -} -pub type PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glDisableVariantClientStateEXT: PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC; -} -pub type PFNGLBINDLIGHTPARAMETEREXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glBindLightParameterEXT: PFNGLBINDLIGHTPARAMETEREXTPROC; -} -pub type PFNGLBINDMATERIALPARAMETEREXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glBindMaterialParameterEXT: PFNGLBINDMATERIALPARAMETEREXTPROC; -} -pub type PFNGLBINDTEXGENPARAMETEREXTPROC = ::std::option::Option< - unsafe extern "C" fn(unit: GLenum, coord: GLenum, value: GLenum) -> GLuint, ->; -extern "C" { - pub static mut glad_glBindTexGenParameterEXT: PFNGLBINDTEXGENPARAMETEREXTPROC; -} -pub type PFNGLBINDTEXTUREUNITPARAMETEREXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glBindTextureUnitParameterEXT: PFNGLBINDTEXTUREUNITPARAMETEREXTPROC; -} -pub type PFNGLBINDPARAMETEREXTPROC = - ::std::option::Option GLuint>; -extern "C" { - pub static mut glad_glBindParameterEXT: PFNGLBINDPARAMETEREXTPROC; -} -pub type PFNGLISVARIANTENABLEDEXTPROC = - ::std::option::Option GLboolean>; -extern "C" { - pub static mut glad_glIsVariantEnabledEXT: PFNGLISVARIANTENABLEDEXTPROC; -} -pub type PFNGLGETVARIANTBOOLEANVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantBooleanvEXT: PFNGLGETVARIANTBOOLEANVEXTPROC; -} -pub type PFNGLGETVARIANTINTEGERVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantIntegervEXT: PFNGLGETVARIANTINTEGERVEXTPROC; -} -pub type PFNGLGETVARIANTFLOATVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetVariantFloatvEXT: PFNGLGETVARIANTFLOATVEXTPROC; -} -pub type PFNGLGETVARIANTPOINTERVEXTPROC = ::std::option::Option< - unsafe extern "C" fn(id: GLuint, value: GLenum, data: *mut *mut ::std::os::raw::c_void), ->; -extern "C" { - pub static mut glad_glGetVariantPointervEXT: PFNGLGETVARIANTPOINTERVEXTPROC; -} -pub type PFNGLGETINVARIANTBOOLEANVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInvariantBooleanvEXT: PFNGLGETINVARIANTBOOLEANVEXTPROC; -} -pub type PFNGLGETINVARIANTINTEGERVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInvariantIntegervEXT: PFNGLGETINVARIANTINTEGERVEXTPROC; -} -pub type PFNGLGETINVARIANTFLOATVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetInvariantFloatvEXT: PFNGLGETINVARIANTFLOATVEXTPROC; -} -pub type PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetLocalConstantBooleanvEXT: PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC; -} -pub type PFNGLGETLOCALCONSTANTINTEGERVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetLocalConstantIntegervEXT: PFNGLGETLOCALCONSTANTINTEGERVEXTPROC; -} -pub type PFNGLGETLOCALCONSTANTFLOATVEXTPROC = - ::std::option::Option; -extern "C" { - pub static mut glad_glGetLocalConstantFloatvEXT: PFNGLGETLOCALCONSTANTFLOATVEXTPROC; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct _iobuf { - pub _Placeholder: *mut ::std::os::raw::c_void, -} -#[test] -fn bindgen_test_layout__iobuf() { - assert_eq!( - ::std::mem::size_of::<_iobuf>(), - 8usize, - concat!("Size of: ", stringify!(_iobuf)) - ); - assert_eq!( - ::std::mem::align_of::<_iobuf>(), - 8usize, - concat!("Alignment of ", stringify!(_iobuf)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<_iobuf>()))._Placeholder as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(_iobuf), - "::", - stringify!(_Placeholder) - ) - ); -} -pub type FILE = _iobuf; -extern "C" { - pub fn __acrt_iob_func(_Ix: ::std::os::raw::c_uint) -> *mut FILE; -} -extern "C" { - pub fn fgetwc(_Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn _fgetwchar() -> wint_t; -} -extern "C" { - pub fn fputwc(_Character: wchar_t, _Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn _fputwchar(_Character: wchar_t) -> wint_t; -} -extern "C" { - pub fn getwc(_Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn getwchar() -> wint_t; -} -extern "C" { - pub fn fgetws( - _Buffer: *mut wchar_t, - _BufferCount: ::std::os::raw::c_int, - _Stream: *mut FILE, - ) -> *mut wchar_t; -} -extern "C" { - pub fn fputws(_Buffer: *const wchar_t, _Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _getws_s(_Buffer: *mut wchar_t, _BufferCount: size_t) -> *mut wchar_t; -} -extern "C" { - pub fn putwc(_Character: wchar_t, _Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn putwchar(_Character: wchar_t) -> wint_t; -} -extern "C" { - pub fn _putws(_Buffer: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ungetwc(_Character: wint_t, _Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn _wfdopen(_FileHandle: ::std::os::raw::c_int, _Mode: *const wchar_t) -> *mut FILE; -} -extern "C" { - pub fn _wfopen(_FileName: *const wchar_t, _Mode: *const wchar_t) -> *mut FILE; -} -extern "C" { - pub fn _wfopen_s( - _Stream: *mut *mut FILE, - _FileName: *const wchar_t, - _Mode: *const wchar_t, - ) -> errno_t; -} -extern "C" { - pub fn _wfreopen( - _FileName: *const wchar_t, - _Mode: *const wchar_t, - _OldStream: *mut FILE, - ) -> *mut FILE; -} -extern "C" { - pub fn _wfreopen_s( - _Stream: *mut *mut FILE, - _FileName: *const wchar_t, - _Mode: *const wchar_t, - _OldStream: *mut FILE, - ) -> errno_t; -} -extern "C" { - pub fn _wfsopen( - _FileName: *const wchar_t, - _Mode: *const wchar_t, - _ShFlag: ::std::os::raw::c_int, - ) -> *mut FILE; -} -extern "C" { - pub fn _wpopen(_Command: *const wchar_t, _Mode: *const wchar_t) -> *mut FILE; -} -extern "C" { - pub fn _wremove(_FileName: *const wchar_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _wtempnam(_Directory: *const wchar_t, _FilePrefix: *const wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn _wtmpnam_s(_Buffer: *mut wchar_t, _BufferCount: size_t) -> errno_t; -} -extern "C" { - pub fn _wtmpnam(_Buffer: *mut wchar_t) -> *mut wchar_t; -} -extern "C" { - pub fn _fgetwc_nolock(_Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn _fputwc_nolock(_Character: wchar_t, _Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn _getwc_nolock(_Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn _putwc_nolock(_Character: wchar_t, _Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn _ungetwc_nolock(_Character: wint_t, _Stream: *mut FILE) -> wint_t; -} -extern "C" { - pub fn __stdio_common_vfwprintf( - _Options: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - _Format: *const wchar_t, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vfwprintf_s( - _Options: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - _Format: *const wchar_t, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vfwprintf_p( - _Options: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - _Format: *const wchar_t, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vfwscanf( - _Options: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - _Format: *const wchar_t, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vswprintf( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _Format: *const wchar_t, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vswprintf_s( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _Format: *const wchar_t, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vsnwprintf_s( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _MaxCount: size_t, - _Format: *const wchar_t, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vswprintf_p( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *mut wchar_t, - _BufferCount: size_t, - _Format: *const wchar_t, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vswscanf( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *const wchar_t, - _BufferCount: size_t, - _Format: *const wchar_t, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -pub type fpos_t = ::std::os::raw::c_longlong; -extern "C" { - pub fn _get_stream_buffer_pointers( - _Stream: *mut FILE, - _Base: *mut *mut *mut ::std::os::raw::c_char, - _Pointer: *mut *mut *mut ::std::os::raw::c_char, - _Count: *mut *mut ::std::os::raw::c_int, - ) -> errno_t; -} -extern "C" { - pub fn clearerr_s(_Stream: *mut FILE) -> errno_t; -} -extern "C" { - pub fn fopen_s( - _Stream: *mut *mut FILE, - _FileName: *const ::std::os::raw::c_char, - _Mode: *const ::std::os::raw::c_char, - ) -> errno_t; -} -extern "C" { - pub fn fread_s( - _Buffer: *mut ::std::os::raw::c_void, - _BufferSize: size_t, - _ElementSize: size_t, - _ElementCount: size_t, - _Stream: *mut FILE, - ) -> size_t; -} -extern "C" { - pub fn freopen_s( - _Stream: *mut *mut FILE, - _FileName: *const ::std::os::raw::c_char, - _Mode: *const ::std::os::raw::c_char, - _OldStream: *mut FILE, - ) -> errno_t; -} -extern "C" { - pub fn gets_s( - _Buffer: *mut ::std::os::raw::c_char, - _Size: rsize_t, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn tmpfile_s(_Stream: *mut *mut FILE) -> errno_t; -} -extern "C" { - pub fn tmpnam_s(_Buffer: *mut ::std::os::raw::c_char, _Size: rsize_t) -> errno_t; -} -extern "C" { - pub fn clearerr(_Stream: *mut FILE); -} -extern "C" { - pub fn fclose(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fcloseall() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fdopen( - _FileHandle: ::std::os::raw::c_int, - _Mode: *const ::std::os::raw::c_char, - ) -> *mut FILE; -} -extern "C" { - pub fn feof(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ferror(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fflush(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgetc(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fgetchar() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgetpos(_Stream: *mut FILE, _Position: *mut fpos_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fgets( - _Buffer: *mut ::std::os::raw::c_char, - _MaxCount: ::std::os::raw::c_int, - _Stream: *mut FILE, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn _fileno(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _flushall() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fopen( - _FileName: *const ::std::os::raw::c_char, - _Mode: *const ::std::os::raw::c_char, - ) -> *mut FILE; -} -extern "C" { - pub fn fputc(_Character: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fputchar(_Character: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fputs( - _Buffer: *const ::std::os::raw::c_char, - _Stream: *mut FILE, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fread( - _Buffer: *mut ::std::os::raw::c_void, - _ElementSize: ::std::os::raw::c_ulonglong, - _ElementCount: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn freopen( - _FileName: *const ::std::os::raw::c_char, - _Mode: *const ::std::os::raw::c_char, - _Stream: *mut FILE, - ) -> *mut FILE; -} -extern "C" { - pub fn _fsopen( - _FileName: *const ::std::os::raw::c_char, - _Mode: *const ::std::os::raw::c_char, - _ShFlag: ::std::os::raw::c_int, - ) -> *mut FILE; -} -extern "C" { - pub fn fsetpos(_Stream: *mut FILE, _Position: *const fpos_t) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fseek( - _Stream: *mut FILE, - _Offset: ::std::os::raw::c_long, - _Origin: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fseeki64( - _Stream: *mut FILE, - _Offset: ::std::os::raw::c_longlong, - _Origin: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn ftell(_Stream: *mut FILE) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn _ftelli64(_Stream: *mut FILE) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn fwrite( - _Buffer: *const ::std::os::raw::c_void, - _ElementSize: ::std::os::raw::c_ulonglong, - _ElementCount: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - ) -> ::std::os::raw::c_ulonglong; -} -extern "C" { - pub fn getc(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getchar() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _getmaxstdio() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _getw(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _pclose(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _popen( - _Command: *const ::std::os::raw::c_char, - _Mode: *const ::std::os::raw::c_char, - ) -> *mut FILE; -} -extern "C" { - pub fn putc(_Character: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putchar(_Character: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn puts(_Buffer: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _putw(_Word: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn remove(_FileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rename( - _OldFileName: *const ::std::os::raw::c_char, - _NewFileName: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _unlink(_FileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn unlink(_FileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rewind(_Stream: *mut FILE); -} -extern "C" { - pub fn _rmtmp() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn setbuf(_Stream: *mut FILE, _Buffer: *mut ::std::os::raw::c_char); -} -extern "C" { - pub fn _setmaxstdio(_Maximum: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn setvbuf( - _Stream: *mut FILE, - _Buffer: *mut ::std::os::raw::c_char, - _Mode: ::std::os::raw::c_int, - _Size: size_t, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _tempnam( - _DirectoryName: *const ::std::os::raw::c_char, - _FilePrefix: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn tmpfile() -> *mut FILE; -} -extern "C" { - pub fn tmpnam(_Buffer: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn ungetc(_Character: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _lock_file(_Stream: *mut FILE); -} -extern "C" { - pub fn _unlock_file(_Stream: *mut FILE); -} -extern "C" { - pub fn _fclose_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fflush_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fgetc_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fputc_nolock( - _Character: ::std::os::raw::c_int, - _Stream: *mut FILE, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fread_nolock( - _Buffer: *mut ::std::os::raw::c_void, - _ElementSize: size_t, - _ElementCount: size_t, - _Stream: *mut FILE, - ) -> size_t; -} -extern "C" { - pub fn _fread_nolock_s( - _Buffer: *mut ::std::os::raw::c_void, - _BufferSize: size_t, - _ElementSize: size_t, - _ElementCount: size_t, - _Stream: *mut FILE, - ) -> size_t; -} -extern "C" { - pub fn _fseek_nolock( - _Stream: *mut FILE, - _Offset: ::std::os::raw::c_long, - _Origin: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _fseeki64_nolock( - _Stream: *mut FILE, - _Offset: ::std::os::raw::c_longlong, - _Origin: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _ftell_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_long; -} -extern "C" { - pub fn _ftelli64_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_longlong; -} -extern "C" { - pub fn _fwrite_nolock( - _Buffer: *const ::std::os::raw::c_void, - _ElementSize: size_t, - _ElementCount: size_t, - _Stream: *mut FILE, - ) -> size_t; -} -extern "C" { - pub fn _getc_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _putc_nolock( - _Character: ::std::os::raw::c_int, - _Stream: *mut FILE, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _ungetc_nolock( - _Character: ::std::os::raw::c_int, - _Stream: *mut FILE, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __p__commode() -> *mut ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vfprintf( - _Options: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - _Format: *const ::std::os::raw::c_char, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vfprintf_s( - _Options: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - _Format: *const ::std::os::raw::c_char, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vfprintf_p( - _Options: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - _Format: *const ::std::os::raw::c_char, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _set_printf_count_output(_Value: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn _get_printf_count_output() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vfscanf( - _Options: ::std::os::raw::c_ulonglong, - _Stream: *mut FILE, - _Format: *const ::std::os::raw::c_char, - _Locale: _locale_t, - _Arglist: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vsprintf( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Format: *const ::std::os::raw::c_char, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vsprintf_s( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Format: *const ::std::os::raw::c_char, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vsnprintf_s( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _MaxCount: size_t, - _Format: *const ::std::os::raw::c_char, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vsprintf_p( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *mut ::std::os::raw::c_char, - _BufferCount: size_t, - _Format: *const ::std::os::raw::c_char, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn __stdio_common_vsscanf( - _Options: ::std::os::raw::c_ulonglong, - _Buffer: *const ::std::os::raw::c_char, - _BufferCount: size_t, - _Format: *const ::std::os::raw::c_char, - _Locale: _locale_t, - _ArgList: va_list, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn tempnam( - _Directory: *const ::std::os::raw::c_char, - _FilePrefix: *const ::std::os::raw::c_char, - ) -> *mut ::std::os::raw::c_char; -} -extern "C" { - pub fn fcloseall() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fdopen( - _FileHandle: ::std::os::raw::c_int, - _Format: *const ::std::os::raw::c_char, - ) -> *mut FILE; -} -extern "C" { - pub fn fgetchar() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fileno(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn flushall() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn fputchar(_Ch: ::std::os::raw::c_int) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn getw(_Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn putw(_Ch: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn rmtmp() -> ::std::os::raw::c_int; -} -extern "C" { - pub static mut max_loaded_major: ::std::os::raw::c_int; -} -extern "C" { - pub static mut max_loaded_minor: ::std::os::raw::c_int; -} -extern "C" { - pub static mut exts: *const ::std::os::raw::c_char; -} -pub const num_exts_i: ::std::os::raw::c_int = 0; -extern "C" { - pub static mut exts_i: *mut *const ::std::os::raw::c_char; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rlglData { - pub currentBatch: *mut RenderBatch, - pub defaultBatch: RenderBatch, - pub State: rlglData__bindgen_ty_1, - pub ExtSupported: rlglData__bindgen_ty_2, -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rlglData__bindgen_ty_1 { - pub currentMatrixMode: ::std::os::raw::c_int, - pub currentMatrix: *mut Matrix, - pub modelview: Matrix, - pub projection: Matrix, - pub transform: Matrix, - pub transformRequired: bool, - pub stack: [Matrix; 32usize], - pub stackCounter: ::std::os::raw::c_int, - pub defaultTextureId: ::std::os::raw::c_uint, - pub activeTextureId: [::std::os::raw::c_uint; 4usize], - pub defaultVShaderId: ::std::os::raw::c_uint, - pub defaultFShaderId: ::std::os::raw::c_uint, - pub defaultShader: Shader, - pub currentShader: Shader, - pub stereoRender: bool, - pub projectionStereo: [Matrix; 2usize], - pub viewOffsetStereo: [Matrix; 2usize], - pub currentBlendMode: ::std::os::raw::c_int, - pub glBlendSrcFactor: ::std::os::raw::c_int, - pub glBlendDstFactor: ::std::os::raw::c_int, - pub glad_glBlendEquation: ::std::os::raw::c_int, - pub framebufferWidth: ::std::os::raw::c_int, - pub framebufferHeight: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_rlglData__bindgen_ty_1() { - assert_eq!( - ::std::mem::size_of::(), - 2616usize, - concat!("Size of: ", stringify!(rlglData__bindgen_ty_1)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rlglData__bindgen_ty_1)) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).currentMatrixMode as *const _ - as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(currentMatrixMode) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).currentMatrix as *const _ as usize - }, - 8usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(currentMatrix) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).modelview as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(modelview) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).projection as *const _ as usize - }, - 80usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(projection) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).transform as *const _ as usize - }, - 144usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(transform) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).transformRequired as *const _ - as usize - }, - 208usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(transformRequired) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).stack as *const _ as usize }, - 212usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(stack) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).stackCounter as *const _ as usize - }, - 2260usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(stackCounter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).defaultTextureId as *const _ as usize - }, - 2264usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(defaultTextureId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).activeTextureId as *const _ as usize - }, - 2268usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(activeTextureId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).defaultVShaderId as *const _ as usize - }, - 2284usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(defaultVShaderId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).defaultFShaderId as *const _ as usize - }, - 2288usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(defaultFShaderId) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).defaultShader as *const _ as usize - }, - 2296usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(defaultShader) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).currentShader as *const _ as usize - }, - 2312usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(currentShader) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).stereoRender as *const _ as usize - }, - 2328usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(stereoRender) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).projectionStereo as *const _ as usize - }, - 2332usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(projectionStereo) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).viewOffsetStereo as *const _ as usize - }, - 2460usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(viewOffsetStereo) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).currentBlendMode as *const _ as usize - }, - 2588usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(currentBlendMode) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).glBlendSrcFactor as *const _ as usize - }, - 2592usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(glBlendSrcFactor) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).glBlendDstFactor as *const _ as usize - }, - 2596usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(glBlendDstFactor) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).glad_glBlendEquation as *const _ - as usize - }, - 2600usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(glad_glBlendEquation) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).framebufferWidth as *const _ as usize - }, - 2604usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(framebufferWidth) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).framebufferHeight as *const _ - as usize - }, - 2608usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_1), - "::", - stringify!(framebufferHeight) - ) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct rlglData__bindgen_ty_2 { - pub vao: bool, - pub instancing: bool, - pub texNPOT: bool, - pub texDepth: bool, - pub texFloat32: bool, - pub texCompDXT: bool, - pub texCompETC1: bool, - pub texCompETC2: bool, - pub texCompPVRT: bool, - pub texCompASTC: bool, - pub texMirrorClamp: bool, - pub texAnisoFilter: bool, - pub maxAnisotropyLevel: f32, - pub maxDepthBits: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_rlglData__bindgen_ty_2() { - assert_eq!( - ::std::mem::size_of::(), - 56usize, - concat!("Size of: ", stringify!(rlglData__bindgen_ty_2)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(rlglData__bindgen_ty_2)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).vao as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(vao) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).instancing as *const _ as usize - }, - 4usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(instancing) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texNPOT as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texNPOT) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).texDepth as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texDepth) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texFloat32 as *const _ as usize - }, - 16usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texFloat32) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompDXT as *const _ as usize - }, - 20usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompDXT) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompETC1 as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompETC1) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompETC2 as *const _ as usize - }, - 28usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompETC2) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompPVRT as *const _ as usize - }, - 32usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompPVRT) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texCompASTC as *const _ as usize - }, - 36usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texCompASTC) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texMirrorClamp as *const _ as usize - }, - 40usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texMirrorClamp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).texAnisoFilter as *const _ as usize - }, - 44usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(texAnisoFilter) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).maxAnisotropyLevel as *const _ - as usize - }, - 48usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(maxAnisotropyLevel) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).maxDepthBits as *const _ as usize - }, - 52usize, - concat!( - "Offset of field: ", - stringify!(rlglData__bindgen_ty_2), - "::", - stringify!(maxDepthBits) - ) - ); -} -#[test] -fn bindgen_test_layout_rlglData() { - assert_eq!( - ::std::mem::size_of::(), - 2712usize, - concat!("Size of: ", stringify!(rlglData)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(rlglData)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).currentBatch as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(rlglData), - "::", - stringify!(currentBatch) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).defaultBatch as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(rlglData), - "::", - stringify!(defaultBatch) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).State as *const _ as usize }, - 40usize, - concat!( - "Offset of field: ", - stringify!(rlglData), - "::", - stringify!(State) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ExtSupported as *const _ as usize }, - 2656usize, - concat!( - "Offset of field: ", - stringify!(rlglData), - "::", - stringify!(ExtSupported) - ) - ); -} -extern "C" { - pub static mut RLGL: rlglData; -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct GuiStyleProp { - pub controlId: ::std::os::raw::c_ushort, - pub propertyId: ::std::os::raw::c_ushort, - pub propertyValue: ::std::os::raw::c_int, -} -#[test] -fn bindgen_test_layout_GuiStyleProp() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(GuiStyleProp)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(GuiStyleProp)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).controlId as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(controlId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).propertyId as *const _ as usize }, - 2usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(propertyId) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).propertyValue as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(GuiStyleProp), - "::", - stringify!(propertyValue) - ) - ); -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiControlState { - GUI_STATE_NORMAL = 0, - GUI_STATE_FOCUSED = 1, - GUI_STATE_PRESSED = 2, - GUI_STATE_DISABLED = 3, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiTextAlignment { - GUI_TEXT_ALIGN_LEFT = 0, - GUI_TEXT_ALIGN_CENTER = 1, - GUI_TEXT_ALIGN_RIGHT = 2, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiControl { - DEFAULT = 0, - LABEL = 1, - BUTTON = 2, - TOGGLE = 3, - SLIDER = 4, - PROGRESSBAR = 5, - CHECKBOX = 6, - COMBOBOX = 7, - DROPDOWNBOX = 8, - TEXTBOX = 9, - VALUEBOX = 10, - SPINNER = 11, - LISTVIEW = 12, - COLORPICKER = 13, - SCROLLBAR = 14, - STATUSBAR = 15, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiControlProperty { - BORDER_COLOR_NORMAL = 0, - BASE_COLOR_NORMAL = 1, - TEXT_COLOR_NORMAL = 2, - BORDER_COLOR_FOCUSED = 3, - BASE_COLOR_FOCUSED = 4, - TEXT_COLOR_FOCUSED = 5, - BORDER_COLOR_PRESSED = 6, - BASE_COLOR_PRESSED = 7, - TEXT_COLOR_PRESSED = 8, - BORDER_COLOR_DISABLED = 9, - BASE_COLOR_DISABLED = 10, - TEXT_COLOR_DISABLED = 11, - BORDER_WIDTH = 12, - TEXT_PADDING = 13, - TEXT_ALIGNMENT = 14, - RESERVED = 15, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiDefaultProperty { - TEXT_SIZE = 16, - TEXT_SPACING = 17, - LINE_COLOR = 18, - BACKGROUND_COLOR = 19, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiToggleProperty { - GROUP_PADDING = 16, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiSliderProperty { - SLIDER_WIDTH = 16, - SLIDER_PADDING = 17, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiProgressBarProperty { - PROGRESS_PADDING = 16, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiCheckBoxProperty { - CHECK_PADDING = 16, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiComboBoxProperty { - COMBO_BUTTON_WIDTH = 16, - COMBO_BUTTON_PADDING = 17, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiDropdownBoxProperty { - ARROW_PADDING = 16, - DROPDOWN_ITEMS_PADDING = 17, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiTextBoxProperty { - TEXT_INNER_PADDING = 16, - TEXT_LINES_PADDING = 17, - COLOR_SELECTED_FG = 18, - COLOR_SELECTED_BG = 19, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiSpinnerProperty { - SPIN_BUTTON_WIDTH = 16, - SPIN_BUTTON_PADDING = 17, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiScrollBarProperty { - ARROWS_SIZE = 16, - ARROWS_VISIBLE = 17, - SCROLL_SLIDER_PADDING = 18, - SCROLL_SLIDER_SIZE = 19, - SCROLL_PADDING = 20, - SCROLL_SPEED = 21, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiScrollBarSide { - SCROLLBAR_LEFT_SIDE = 0, - SCROLLBAR_RIGHT_SIDE = 1, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiListViewProperty { - LIST_ITEMS_HEIGHT = 16, - LIST_ITEMS_PADDING = 17, - SCROLLBAR_WIDTH = 18, - SCROLLBAR_SIDE = 19, -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiColorPickerProperty { - COLOR_SELECTOR_SIZE = 16, - HUEBAR_WIDTH = 17, - HUEBAR_PADDING = 18, - HUEBAR_SELECTOR_HEIGHT = 19, - HUEBAR_SELECTOR_OVERFLOW = 20, -} -extern "C" { - pub fn GuiEnable(); -} -extern "C" { - pub fn GuiDisable(); -} -extern "C" { - pub fn GuiLock(); -} -extern "C" { - pub fn GuiUnlock(); -} -extern "C" { - pub fn GuiFade(alpha: f32); -} -extern "C" { - pub fn GuiSetState(state: ::std::os::raw::c_int); -} -extern "C" { - pub fn GuiGetState() -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiSetFont(font: Font); -} -extern "C" { - pub fn GuiGetFont() -> Font; -} -extern "C" { - pub fn GuiSetStyle( - control: ::std::os::raw::c_int, - property: ::std::os::raw::c_int, - value: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiGetStyle( - control: ::std::os::raw::c_int, - property: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiEnableTooltip(); -} -extern "C" { - pub fn GuiDisableTooltip(); -} -extern "C" { - pub fn GuiSetTooltip(tooltip: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiClearTooltip(); -} -extern "C" { - pub fn GuiWindowBox(bounds: Rectangle, title: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiGroupBox(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiLine(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiPanel(bounds: Rectangle); -} -extern "C" { - pub fn GuiScrollPanel(bounds: Rectangle, content: Rectangle, scroll: *mut Vector2) - -> Rectangle; -} -extern "C" { - pub fn GuiLabel(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiButton(bounds: Rectangle, text: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiLabelButton(bounds: Rectangle, text: *const ::std::os::raw::c_char) -> bool; -} -extern "C" { - pub fn GuiImageButton( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - texture: Texture2D, - ) -> bool; -} -extern "C" { - pub fn GuiImageButtonEx( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - texture: Texture2D, - texSource: Rectangle, - ) -> bool; -} -extern "C" { - pub fn GuiToggle(bounds: Rectangle, text: *const ::std::os::raw::c_char, active: bool) -> bool; -} -extern "C" { - pub fn GuiToggleGroup( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiCheckBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - checked: bool, - ) -> bool; -} -extern "C" { - pub fn GuiComboBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiDropdownBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - active: *mut ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiSpinner( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - value: *mut ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiValueBox( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - value: *mut ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiTextBox( - bounds: Rectangle, - text: *mut ::std::os::raw::c_char, - textSize: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiTextBoxMulti( - bounds: Rectangle, - text: *mut ::std::os::raw::c_char, - textSize: ::std::os::raw::c_int, - editMode: bool, - ) -> bool; -} -extern "C" { - pub fn GuiSlider( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiSliderBar( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiProgressBar( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - ) -> f32; -} -extern "C" { - pub fn GuiStatusBar(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiDummyRec(bounds: Rectangle, text: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiScrollBar( - bounds: Rectangle, - value: ::std::os::raw::c_int, - minValue: ::std::os::raw::c_int, - maxValue: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiGrid(bounds: Rectangle, spacing: f32, subdivs: ::std::os::raw::c_int) -> Vector2; -} -extern "C" { - pub fn GuiListView( - bounds: Rectangle, - text: *const ::std::os::raw::c_char, - scrollIndex: *mut ::std::os::raw::c_int, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiListViewEx( - bounds: Rectangle, - text: *mut *const ::std::os::raw::c_char, - count: ::std::os::raw::c_int, - focus: *mut ::std::os::raw::c_int, - scrollIndex: *mut ::std::os::raw::c_int, - active: ::std::os::raw::c_int, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiMessageBox( - bounds: Rectangle, - title: *const ::std::os::raw::c_char, - message: *const ::std::os::raw::c_char, - buttons: *const ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiTextInputBox( - bounds: Rectangle, - title: *const ::std::os::raw::c_char, - message: *const ::std::os::raw::c_char, - buttons: *const ::std::os::raw::c_char, - text: *mut ::std::os::raw::c_char, - ) -> ::std::os::raw::c_int; -} -extern "C" { - pub fn GuiColorPicker(bounds: Rectangle, color: Color) -> Color; -} -extern "C" { - pub fn GuiColorPanel(bounds: Rectangle, color: Color) -> Color; -} -extern "C" { - pub fn GuiColorBarAlpha(bounds: Rectangle, alpha: f32) -> f32; -} -extern "C" { - pub fn GuiColorBarHue(bounds: Rectangle, value: f32) -> f32; -} -extern "C" { - pub fn GuiLoadStyle(fileName: *const ::std::os::raw::c_char); -} -extern "C" { - pub fn GuiLoadStyleDefault(); -} -extern "C" { - pub fn GuiIconText( - iconId: ::std::os::raw::c_int, - text: *const ::std::os::raw::c_char, - ) -> *const ::std::os::raw::c_char; -} -extern "C" { - pub fn GuiDrawIcon( - iconId: ::std::os::raw::c_int, - position: Vector2, - pixelSize: ::std::os::raw::c_int, - color: Color, - ); -} -extern "C" { - pub fn GuiGetIcons() -> *mut ::std::os::raw::c_uint; -} -extern "C" { - pub fn GuiGetIconData(iconId: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_uint; -} -extern "C" { - pub fn GuiSetIconData(iconId: ::std::os::raw::c_int, data: *mut ::std::os::raw::c_uint); -} -extern "C" { - pub fn GuiSetIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiClearIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ); -} -extern "C" { - pub fn GuiCheckIconPixel( - iconId: ::std::os::raw::c_int, - x: ::std::os::raw::c_int, - y: ::std::os::raw::c_int, - ) -> bool; -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum guiIconName { - RICON_NONE = 0, - RICON_FOLDER_FILE_OPEN = 1, - RICON_FILE_SAVE_CLASSIC = 2, - RICON_FOLDER_OPEN = 3, - RICON_FOLDER_SAVE = 4, - RICON_FILE_OPEN = 5, - RICON_FILE_SAVE = 6, - RICON_FILE_EXPORT = 7, - RICON_FILE_NEW = 8, - RICON_FILE_DELETE = 9, - RICON_FILETYPE_TEXT = 10, - RICON_FILETYPE_AUDIO = 11, - RICON_FILETYPE_IMAGE = 12, - RICON_FILETYPE_PLAY = 13, - RICON_FILETYPE_VIDEO = 14, - RICON_FILETYPE_INFO = 15, - RICON_FILE_COPY = 16, - RICON_FILE_CUT = 17, - RICON_FILE_PASTE = 18, - RICON_CURSOR_HAND = 19, - RICON_CURSOR_POINTER = 20, - RICON_CURSOR_CLASSIC = 21, - RICON_PENCIL = 22, - RICON_PENCIL_BIG = 23, - RICON_BRUSH_CLASSIC = 24, - RICON_BRUSH_PAINTER = 25, - RICON_WATER_DROP = 26, - RICON_COLOR_PICKER = 27, - RICON_RUBBER = 28, - RICON_COLOR_BUCKET = 29, - RICON_TEXT_T = 30, - RICON_TEXT_A = 31, - RICON_SCALE = 32, - RICON_RESIZE = 33, - RICON_FILTER_POINT = 34, - RICON_FILTER_BILINEAR = 35, - RICON_CROP = 36, - RICON_CROP_ALPHA = 37, - RICON_SQUARE_TOGGLE = 38, - RICON_SYMMETRY = 39, - RICON_SYMMETRY_HORIZONTAL = 40, - RICON_SYMMETRY_VERTICAL = 41, - RICON_LENS = 42, - RICON_LENS_BIG = 43, - RICON_EYE_ON = 44, - RICON_EYE_OFF = 45, - RICON_FILTER_TOP = 46, - RICON_FILTER = 47, - RICON_TARGET_POINT = 48, - RICON_TARGET_SMALL = 49, - RICON_TARGET_BIG = 50, - RICON_TARGET_MOVE = 51, - RICON_CURSOR_MOVE = 52, - RICON_CURSOR_SCALE = 53, - RICON_CURSOR_SCALE_RIGHT = 54, - RICON_CURSOR_SCALE_LEFT = 55, - RICON_UNDO = 56, - RICON_REDO = 57, - RICON_REREDO = 58, - RICON_MUTATE = 59, - RICON_ROTATE = 60, - RICON_REPEAT = 61, - RICON_SHUFFLE = 62, - RICON_EMPTYBOX = 63, - RICON_TARGET = 64, - RICON_TARGET_SMALL_FILL = 65, - RICON_TARGET_BIG_FILL = 66, - RICON_TARGET_MOVE_FILL = 67, - RICON_CURSOR_MOVE_FILL = 68, - RICON_CURSOR_SCALE_FILL = 69, - RICON_CURSOR_SCALE_RIGHT_FILL = 70, - RICON_CURSOR_SCALE_LEFT_FILL = 71, - RICON_UNDO_FILL = 72, - RICON_REDO_FILL = 73, - RICON_REREDO_FILL = 74, - RICON_MUTATE_FILL = 75, - RICON_ROTATE_FILL = 76, - RICON_REPEAT_FILL = 77, - RICON_SHUFFLE_FILL = 78, - RICON_EMPTYBOX_SMALL = 79, - RICON_BOX = 80, - RICON_BOX_TOP = 81, - RICON_BOX_TOP_RIGHT = 82, - RICON_BOX_RIGHT = 83, - RICON_BOX_BOTTOM_RIGHT = 84, - RICON_BOX_BOTTOM = 85, - RICON_BOX_BOTTOM_LEFT = 86, - RICON_BOX_LEFT = 87, - RICON_BOX_TOP_LEFT = 88, - RICON_BOX_CENTER = 89, - RICON_BOX_CIRCLE_MASK = 90, - RICON_POT = 91, - RICON_ALPHA_MULTIPLY = 92, - RICON_ALPHA_CLEAR = 93, - RICON_DITHERING = 94, - RICON_MIPMAPS = 95, - RICON_BOX_GRID = 96, - RICON_GRID = 97, - RICON_BOX_CORNERS_SMALL = 98, - RICON_BOX_CORNERS_BIG = 99, - RICON_FOUR_BOXES = 100, - RICON_GRID_FILL = 101, - RICON_BOX_MULTISIZE = 102, - RICON_ZOOM_SMALL = 103, - RICON_ZOOM_MEDIUM = 104, - RICON_ZOOM_BIG = 105, - RICON_ZOOM_ALL = 106, - RICON_ZOOM_CENTER = 107, - RICON_BOX_DOTS_SMALL = 108, - RICON_BOX_DOTS_BIG = 109, - RICON_BOX_CONCENTRIC = 110, - RICON_BOX_GRID_BIG = 111, - RICON_OK_TICK = 112, - RICON_CROSS = 113, - RICON_ARROW_LEFT = 114, - RICON_ARROW_RIGHT = 115, - RICON_ARROW_BOTTOM = 116, - RICON_ARROW_TOP = 117, - RICON_ARROW_LEFT_FILL = 118, - RICON_ARROW_RIGHT_FILL = 119, - RICON_ARROW_BOTTOM_FILL = 120, - RICON_ARROW_TOP_FILL = 121, - RICON_AUDIO = 122, - RICON_FX = 123, - RICON_WAVE = 124, - RICON_WAVE_SINUS = 125, - RICON_WAVE_SQUARE = 126, - RICON_WAVE_TRIANGULAR = 127, - RICON_CROSS_SMALL = 128, - RICON_PLAYER_PREVIOUS = 129, - RICON_PLAYER_PLAY_BACK = 130, - RICON_PLAYER_PLAY = 131, - RICON_PLAYER_PAUSE = 132, - RICON_PLAYER_STOP = 133, - RICON_PLAYER_NEXT = 134, - RICON_PLAYER_RECORD = 135, - RICON_MAGNET = 136, - RICON_LOCK_CLOSE = 137, - RICON_LOCK_OPEN = 138, - RICON_CLOCK = 139, - RICON_TOOLS = 140, - RICON_GEAR = 141, - RICON_GEAR_BIG = 142, - RICON_BIN = 143, - RICON_HAND_POINTER = 144, - RICON_LASER = 145, - RICON_COIN = 146, - RICON_EXPLOSION = 147, - RICON_1UP = 148, - RICON_PLAYER = 149, - RICON_PLAYER_JUMP = 150, - RICON_KEY = 151, - RICON_DEMON = 152, - RICON_TEXT_POPUP = 153, - RICON_GEAR_EX = 154, - RICON_CRACK = 155, - RICON_CRACK_POINTS = 156, - RICON_STAR = 157, - RICON_DOOR = 158, - RICON_EXIT = 159, - RICON_MODE_2D = 160, - RICON_MODE_3D = 161, - RICON_CUBE = 162, - RICON_CUBE_FACE_TOP = 163, - RICON_CUBE_FACE_LEFT = 164, - RICON_CUBE_FACE_FRONT = 165, - RICON_CUBE_FACE_BOTTOM = 166, - RICON_CUBE_FACE_RIGHT = 167, - RICON_CUBE_FACE_BACK = 168, - RICON_CAMERA = 169, - RICON_SPECIAL = 170, - RICON_LINK_NET = 171, - RICON_LINK_BOXES = 172, - RICON_LINK_MULTI = 173, - RICON_LINK = 174, - RICON_LINK_BROKE = 175, - RICON_TEXT_NOTES = 176, - RICON_NOTEBOOK = 177, - RICON_SUITCASE = 178, - RICON_SUITCASE_ZIP = 179, - RICON_MAILBOX = 180, - RICON_MONITOR = 181, - RICON_PRINTER = 182, - RICON_PHOTO_CAMERA = 183, - RICON_PHOTO_CAMERA_FLASH = 184, - RICON_HOUSE = 185, - RICON_HEART = 186, - RICON_CORNER = 187, - RICON_VERTICAL_BARS = 188, - RICON_VERTICAL_BARS_FILL = 189, - RICON_LIFE_BARS = 190, - RICON_INFO = 191, - RICON_CROSSLINE = 192, - RICON_HELP = 193, - RICON_FILETYPE_ALPHA = 194, - RICON_FILETYPE_HOME = 195, - RICON_LAYERS_VISIBLE = 196, - RICON_LAYERS = 197, - RICON_WINDOW = 198, - RICON_HIDPI = 199, - RICON_200 = 200, - RICON_201 = 201, - RICON_202 = 202, - RICON_203 = 203, - RICON_204 = 204, - RICON_205 = 205, - RICON_206 = 206, - RICON_207 = 207, - RICON_208 = 208, - RICON_209 = 209, - RICON_210 = 210, - RICON_211 = 211, - RICON_212 = 212, - RICON_213 = 213, - RICON_214 = 214, - RICON_215 = 215, - RICON_216 = 216, - RICON_217 = 217, - RICON_218 = 218, - RICON_219 = 219, - RICON_220 = 220, - RICON_221 = 221, - RICON_222 = 222, - RICON_223 = 223, - RICON_224 = 224, - RICON_225 = 225, - RICON_226 = 226, - RICON_227 = 227, - RICON_228 = 228, - RICON_229 = 229, - RICON_230 = 230, - RICON_231 = 231, - RICON_232 = 232, - RICON_233 = 233, - RICON_234 = 234, - RICON_235 = 235, - RICON_236 = 236, - RICON_237 = 237, - RICON_238 = 238, - RICON_239 = 239, - RICON_240 = 240, - RICON_241 = 241, - RICON_242 = 242, - RICON_243 = 243, - RICON_244 = 244, - RICON_245 = 245, - RICON_246 = 246, - RICON_247 = 247, - RICON_248 = 248, - RICON_249 = 249, - RICON_250 = 250, - RICON_251 = 251, - RICON_252 = 252, - RICON_253 = 253, - RICON_254 = 254, - RICON_255 = 255, -} -extern "C" { - pub static mut guiIcons: [::std::os::raw::c_uint; 2048usize]; -} -#[repr(i32)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] -pub enum GuiPropertyElement { - BORDER = 0, - BASE = 1, - TEXT = 2, - OTHER = 3, -} -extern "C" { - pub static mut guiState: GuiControlState; -} -extern "C" { - pub static mut guiFont: Font; -} -extern "C" { - pub static mut guiLocked: bool; -} -pub const guiAlpha: f32 = 1.0; -extern "C" { - pub static mut guiStyle: [::std::os::raw::c_uint; 384usize]; -} -extern "C" { - pub static mut guiStyleLoaded: bool; -} -extern "C" { - pub static mut guiTooltip: *const ::std::os::raw::c_char; -} -extern "C" { - pub static mut guiTooltipEnabled: bool; -} -extern "C" { - pub fn GuiSliderPro( - bounds: Rectangle, - textLeft: *const ::std::os::raw::c_char, - textRight: *const ::std::os::raw::c_char, - value: f32, - minValue: f32, - maxValue: f32, - sliderWidth: ::std::os::raw::c_int, - ) -> f32; -} -extern "C" { - pub fn GuiColorPanelEx(bounds: Rectangle, color: Color, hue: f32) -> Color; -} -extern "C" { - pub fn GuiLoadIcons( - fileName: *const ::std::os::raw::c_char, - loadIconsName: bool, - ) -> *mut *mut ::std::os::raw::c_char; -} -pub type __builtin_va_list = *mut ::std::os::raw::c_char; -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __crt_locale_data { - pub _address: u8, -} -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct __crt_multibyte_data { - pub _address: u8, -} diff --git a/raylib-sys/build.rs b/raylib-sys/build.rs index 9a7d590d..dba93939 100644 --- a/raylib-sys/build.rs +++ b/raylib-sys/build.rs @@ -15,12 +15,38 @@ Permission is granted to anyone to use this software for any purpose, including */ #![allow(dead_code)] +extern crate bindgen; + +use std::env; use std::path::{Path, PathBuf}; -use std::{env, fs}; + +use bindgen::callbacks::{DeriveTrait, ImplementsTrait, ParseCallbacks}; /// latest version on github's release page as of time or writing -const LATEST_RAYLIB_VERSION: &str = "3.7.0"; -const LATEST_RAYLIB_API_VERSION: &str = "3"; +const LATEST_RAYLIB_VERSION: &str = "4.5.0"; +const LATEST_RAYLIB_API_VERSION: &str = "4"; + +#[derive(Debug)] +struct TypeOverrideCallback; + +impl ParseCallbacks for TypeOverrideCallback { + fn blocklisted_type_implements_trait( + &self, + _name: &str, + _derive_trait: DeriveTrait, + ) -> Option { + const OK_TRAITS: [DeriveTrait; 3] = [ + DeriveTrait::Copy, + DeriveTrait::Debug, + DeriveTrait::PartialEqOrPartialOrd, + ]; + const OVERRIDEN_TYPES: [&str; 5] = + ["Vector2", "Vector3", "Vector4", "Matrix", "Quaternion"]; + + (OK_TRAITS.contains(&_derive_trait) && OVERRIDEN_TYPES.contains(&_name)) + .then_some(ImplementsTrait::Yes) + } +} #[cfg(feature = "nobuild")] fn build_with_cmake(_src_path: &str) {} @@ -45,26 +71,67 @@ fn build_with_cmake(src_path: &str) { let (platform, platform_os) = platform_from_target(&target); let mut conf = cmake::Config::new(src_path); - let builder; + let mut builder; #[cfg(debug_assertions)] { builder = conf.profile("Debug"); + builder = builder.define("CMAKE_BUILD_TYPE", "Debug") } #[cfg(not(debug_assertions))] { builder = conf.profile("Release"); + builder = builder.define("CMAKE_BUILD_TYPE", "Release") } builder + .generator("Ninja") .define("BUILD_EXAMPLES", "OFF") .define("CMAKE_BUILD_TYPE", "Release") // turn off until this is fixed .define("SUPPORT_BUSY_WAIT_LOOP", "OFF"); + // Enable wayland cmake flag if feature is specified + #[cfg(feature = "wayland")] + { + builder.define("USE_WAYLAND", "ON"); + builder.define("USE_EXTERNAL_GLFW", "ON"); // Necessary for wayland support in my testing + } + + // This seems redundant, but I felt it was needed incase raylib changes it's default + #[cfg(not(feature = "wayland"))] + builder.define("USE_WAYLAND", "OFF"); + + // Scope implementing flags for forcing OpenGL version + // See all possible flags at https://github.com/raysan5/raylib/wiki/CMake-Build-Options + { + #[cfg(feature = "opengl_33")] + builder.define("OPENGL_VERSION", "3.3"); + + #[cfg(feature = "opengl_21")] + builder.define("OPENGL_VERSION", "2.1"); + + // #[cfg(feature = "opengl_11")] + // builder.define("OPENGL_VERSION", "1.1"); + + #[cfg(feature = "opengl_es_20")] + builder.define("OPENGL_VERSION", "ES 2.0"); + + // Once again felt this was necessary incase a default was changed :) + #[cfg(not(any( + feature = "opengl_33", + feature = "opengl_21", + // feature = "opengl_11", + feature = "opengl_es_20" + )))] + builder.define("OPENGL_VERSION", "OFF"); + } + match platform { Platform::Desktop => conf.define("PLATFORM", "Desktop"), - Platform::Web => conf.define("PLATFORM", "Web"), + Platform::Web => conf + .define("PLATFORM", "Web") + .define("CMAKE_C_FLAGS", "-s ASYNCIFY"), Platform::RPI => conf.define("PLATFORM", "Raspberry Pi"), }; @@ -92,7 +159,7 @@ fn build_with_cmake(src_path: &str) { panic!("failed to create windows library"); } } // on web copy libraylib.bc to libraylib.a - if platform == Platform::Web { + if platform == Platform::Web && !Path::new(&dst_lib.join("libraylib.a")).exists() { std::fs::copy(dst_lib.join("libraylib.bc"), dst_lib.join("libraylib.a")) .expect("failed to create wasm library"); } @@ -102,62 +169,57 @@ fn build_with_cmake(src_path: &str) { fn gen_bindings() { let target = env::var("TARGET").expect("Cargo build scripts always have TARGET"); - let out_dir = - PathBuf::from(env::var("OUT_DIR").expect("Cargo build scripts always have an OUT_DIR")); + let (platform, os) = platform_from_target(&target); - let (platform, platform_os) = platform_from_target(&target); + let plat = match platform { + Platform::Desktop => "-DPLATFORM_DESKTOP", + Platform::RPI => "-DPLATFORM_RPI", + Platform::Web => "-DPLATFORM_WEB", + }; - // Generate bindings - match (platform, platform_os) { - (_, PlatformOS::Windows) => { - fs::write( - out_dir.join("bindings.rs"), - include_str!("bindings_windows.rs"), - ) - .expect("failed to write bindings"); - } - (_, PlatformOS::Linux) => { - fs::write( - out_dir.join("bindings.rs"), - include_str!("bindings_linux.rs"), - ) - .expect("failed to write bindings"); - } - (_, PlatformOS::OSX) => { - fs::write(out_dir.join("bindings.rs"), include_str!("bindings_osx.rs")) - .expect("failed to write bindings"); - } - (Platform::Web, _) => { - fs::write(out_dir.join("bindings.rs"), include_str!("bindings_web.rs")) - .expect("failed to write bindings"); - } - // for other platforms use bindgen and hope it works - _ => panic!("raylib-rs not supported on your platform"), + let mut builder = bindgen::Builder::default() + .header("binding/binding.h") + .rustified_enum(".+") + .blocklist_type("Vector2") + .blocklist_type("Vector3") + .blocklist_type("Vector4") + .blocklist_type("Matrix") + .blocklist_type("Quaternion") + .parse_callbacks(Box::new(TypeOverrideCallback)) + .clang_arg("-I../raylib/src") + .clang_arg("-std=c99") + .clang_arg(plat); + //.parse_callbacks(Box::new(bindgen::CargoCallbacks)); + + if platform == Platform::Desktop && os == PlatformOS::Windows { + // odd workaround for booleans being broken + builder = builder.clang_arg("-D__STDC__"); } + + if platform == Platform::Web { + builder = builder + .clang_arg("-fvisibility=default") + .clang_arg("--target=wasm32-emscripten"); + } + + // Build + let bindings = builder.generate().expect("Unable to generate bindings"); + + let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()); + bindings + .write_to_file(out_path.join("bindings.rs")) + .expect("Couldn't write bindings!"); } fn gen_rgui() { // Compile the code and link with cc crate - #[cfg(target_os = "windows")] - { - cc::Build::new() - .file("rgui_wrapper.cpp") - .include(".") - .warnings(false) - // .flag("-std=c99") - .extra_warnings(false) - .compile("rgui"); - } - #[cfg(not(target_os = "windows"))] - { - cc::Build::new() - .file("rgui_wrapper.c") - .include(".") - .warnings(false) - // .flag("-std=c99") - .extra_warnings(false) - .compile("rgui"); - } + cc::Build::new() + .file("binding/wrapper.c") + .include("binding") + .warnings(false) + // .flag("-std=c99") + .extra_warnings(false) + .compile("rgui"); } #[cfg(feature = "nobuild")] @@ -173,8 +235,20 @@ fn link(platform: Platform, platform_os: PlatformOS) { println!("cargo:rustc-link-lib=dylib=shell32"); } PlatformOS::Linux => { - println!("cargo:rustc-link-search=/usr/local/lib"); - println!("cargo:rustc-link-lib=X11"); + // X11 linking + #[cfg(not(feature = "wayland"))] + { + println!("cargo:rustc-link-search=/usr/local/lib"); + println!("cargo:rustc-link-lib=X11"); + } + + // Wayland linking + #[cfg(feature = "wayland")] + { + println!("cargo:rustc-link-search=/usr/local/lib"); + println!("cargo:rustc-link-lib=wayland-client"); + println!("cargo:rustc-link-lib=glfw"); // Link against locally installed glfw + } } PlatformOS::OSX => { println!("cargo:rustc-link-search=native=/usr/local/lib"); @@ -188,6 +262,12 @@ fn link(platform: Platform, platform_os: PlatformOS) { } if platform == Platform::Web { println!("cargo:rustc-link-lib=glfw"); + } else if platform == Platform::RPI { + println!("cargo:rustc-link-search=/opt/vc/lib"); + println!("cargo:rustc-link-lib=bcm_host"); + println!("cargo:rustc-link-lib=brcmEGL"); + println!("cargo:rustc-link-lib=brcmGLESv2"); + println!("cargo:rustc-link-lib=vcos"); } println!("cargo:rustc-link-lib=static=raylib"); @@ -215,14 +295,24 @@ fn cp_raylib() -> String { let mut options = fs_extra::dir::CopyOptions::new(); options.skip_exist = true; - fs_extra::dir::copy("raylib", &out, &options).expect(&format!( - "failed to copy raylib source to {}", - &out.to_string_lossy() - )); + fs_extra::dir::copy("raylib", out, &options) + .unwrap_or_else(|_| panic!("failed to copy raylib source to {}", out.to_string_lossy())); out.join("raylib").to_string_lossy().to_string() } +fn cp_raygui() -> String { + let out = env::var("OUT_DIR").unwrap(); + let out = Path::new(&out); //.join("raylib_source"); + + let mut options = fs_extra::dir::CopyOptions::new(); + options.skip_exist = true; + fs_extra::dir::copy("raygui", out, &options) + .unwrap_or_else(|_| panic!("failed to copy raygui source to {}", out.to_string_lossy())); + + out.join("raygui").to_string_lossy().to_string() +} + // run_command runs a command to completion or panics. Used for running curl and powershell. fn run_command(cmd: &str, args: &[&str]) { use std::process::Command; @@ -243,7 +333,6 @@ fn platform_from_target(target: &str) -> (Platform, PlatformOS) { let platform = if target.contains("wasm32") { // make sure cmake knows that it should bundle glfw in // Cargo web takes care of this but better safe than sorry - env::set_var("EMMAKEN_CFLAGS", "-s USE_GLFW=3"); Platform::Web } else if target.contains("armv7-unknown-linux") { Platform::RPI diff --git a/raylib-sys/config.h b/raylib-sys/config.h deleted file mode 100644 index ab2f2892..00000000 --- a/raylib-sys/config.h +++ /dev/null @@ -1,148 +0,0 @@ -/********************************************************************************************** -* -* raylib configuration flags -* -* This file defines all the configuration flags for the different raylib modules -* -* LICENSE: zlib/libpng -* -* Copyright (c) 2018-2020 Ahmad Fatoum & Ramon Santamaria (@raysan5) -* -* This software is provided "as-is", without any express or implied warranty. In no event -* will the authors be held liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, including commercial -* applications, and to alter it and redistribute it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not claim that you -* wrote the original software. If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be misrepresented -* as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -**********************************************************************************************/ - -#define RAYLIB_VERSION "3.0" - -// Edit to control what features Makefile'd raylib is compiled with -#if defined(RAYLIB_CMAKE) -// Edit CMakeOptions.txt for CMake instead -#include "cmake/config.h" -#else - -//------------------------------------------------------------------------------------ -// Module: core - Configuration Flags -//------------------------------------------------------------------------------------ -// Camera module is included (camera.h) and multiple predefined cameras are available: free, 1st/3rd person, orbital -#define SUPPORT_CAMERA_SYSTEM 1 -// Gestures module is included (gestures.h) to support gestures detection: tap, hold, swipe, drag -#define SUPPORT_GESTURES_SYSTEM 1 -// Mouse gestures are directly mapped like touches and processed by gestures system -#define SUPPORT_MOUSE_GESTURES 1 -// Reconfigure standard input to receive key inputs, works with SSH connection. -#define SUPPORT_SSH_KEYBOARD_RPI 1 -// Draw a mouse reference on screen (square cursor box) -#define SUPPORT_MOUSE_CURSOR_RPI 1 -// Use busy wait loop for timing sync, if not defined, a high-resolution timer is setup and used -//#define SUPPORT_BUSY_WAIT_LOOP 1 -// Use a half-busy wait loop, in this case frame sleeps for some time and runs a busy-wait-loop at the end -#define SUPPORT_HALFBUSY_WAIT_LOOP -// Wait for events passively (sleeping while no events) instead of polling them actively every frame -//#define SUPPORT_EVENTS_WAITING 1 -// Allow automatic screen capture of current screen pressing F12, defined in KeyCallback() -#define SUPPORT_SCREEN_CAPTURE 1 -// Allow automatic gif recording of current screen pressing CTRL+F12, defined in KeyCallback() -//#define SUPPORT_GIF_RECORDING 1 -// Allow scale all the drawn content to match the high-DPI equivalent size (only PLATFORM_DESKTOP) -//#define SUPPORT_HIGH_DPI 1 -// Support CompressData() and DecompressData() functions -#define SUPPORT_COMPRESSION_API 1 -// Support saving binary data automatically to a generated storage.data file. This file is managed internally. -#define SUPPORT_DATA_STORAGE 1 - -//------------------------------------------------------------------------------------ -// Module: rlgl - Configuration Flags -//------------------------------------------------------------------------------------ -// Support VR simulation functionality (stereo rendering) -#define SUPPORT_VR_SIMULATOR 1 - -//------------------------------------------------------------------------------------ -// Module: shapes - Configuration Flags -//------------------------------------------------------------------------------------ -// Draw rectangle shapes using font texture white character instead of default white texture -// Allows drawing rectangles and text with a single draw call, very useful for GUI systems! -#define SUPPORT_FONT_TEXTURE 1 -// Use QUADS instead of TRIANGLES for drawing when possible -// Some lines-based shapes could still use lines -#define SUPPORT_QUADS_DRAW_MODE 1 - -//------------------------------------------------------------------------------------ -// Module: textures - Configuration Flags -//------------------------------------------------------------------------------------ -// Selecte desired fileformats to be supported for image data loading -#define SUPPORT_FILEFORMAT_PNG 1 -#define SUPPORT_FILEFORMAT_BMP 1 -#define SUPPORT_FILEFORMAT_TGA 1 -#define SUPPORT_FILEFORMAT_JPG 1 -#define SUPPORT_FILEFORMAT_GIF 1 -//#define SUPPORT_FILEFORMAT_PSD 1 -#define SUPPORT_FILEFORMAT_DDS 1 -#define SUPPORT_FILEFORMAT_HDR 1 -#define SUPPORT_FILEFORMAT_KTX 1 -#define SUPPORT_FILEFORMAT_ASTC 1 -//#define SUPPORT_FILEFORMAT_PKM 1 -//#define SUPPORT_FILEFORMAT_PVR 1 - -// Support image export functionality (.png, .bmp, .tga, .jpg) -#define SUPPORT_IMAGE_EXPORT 1 -// Support multiple image editing functions to scale, adjust colors, flip, draw on images, crop... -// If not defined only three image editing functions supported: ImageFormat(), ImageAlphaMask(), ImageToPOT() -#define SUPPORT_IMAGE_MANIPULATION 1 -// Support procedural image generation functionality (gradient, spot, perlin-noise, cellular) -#define SUPPORT_IMAGE_GENERATION 1 - -//------------------------------------------------------------------------------------ -// Module: text - Configuration Flags -//------------------------------------------------------------------------------------ -// Default font is loaded on window initialization to be available for the user to render simple text -// NOTE: If enabled, uses external module functions to load default raylib font -#define SUPPORT_DEFAULT_FONT 1 -// Selected desired font fileformats to be supported for loading -#define SUPPORT_FILEFORMAT_FNT 1 -#define SUPPORT_FILEFORMAT_TTF 1 - -//------------------------------------------------------------------------------------ -// Module: models - Configuration Flags -//------------------------------------------------------------------------------------ -// Selected desired model fileformats to be supported for loading -#define SUPPORT_FILEFORMAT_OBJ 1 -#define SUPPORT_FILEFORMAT_MTL 1 -#define SUPPORT_FILEFORMAT_IQM 1 -#define SUPPORT_FILEFORMAT_GLTF 1 -// Support procedural mesh generation functions, uses external par_shapes.h library -// NOTE: Some generated meshes DO NOT include generated texture coordinates -#define SUPPORT_MESH_GENERATION 1 - -//------------------------------------------------------------------------------------ -// Module: audio - Configuration Flags -//------------------------------------------------------------------------------------ -// Desired audio fileformats to be supported for loading -#define SUPPORT_FILEFORMAT_WAV 1 -#define SUPPORT_FILEFORMAT_OGG 1 -#define SUPPORT_FILEFORMAT_XM 1 -#define SUPPORT_FILEFORMAT_MOD 1 -//#define SUPPORT_FILEFORMAT_FLAC 1 -#define SUPPORT_FILEFORMAT_MP3 1 - -//------------------------------------------------------------------------------------ -// Module: utils - Configuration Flags -//------------------------------------------------------------------------------------ -// Show TRACELOG() output messages -// NOTE: By default LOG_DEBUG traces not shown -#define SUPPORT_TRACELOG 1 -//#define SUPPORT_TRACELOG_DEBUG 1 - -#endif //defined(RAYLIB_CMAKE) diff --git a/raylib-sys/external/glad.h b/raylib-sys/external/glad.h deleted file mode 100644 index c92e1845..00000000 --- a/raylib-sys/external/glad.h +++ /dev/null @@ -1,5474 +0,0 @@ -/* - - OpenGL loader generated by glad 0.1.10a0 on Fri Jun 10 12:54:12 2016. - - Language/Generator: C/C++ - Specification: gl - APIs: gl=3.3 - Profile: core - Extensions: - GL_AMD_debug_output, GL_AMD_query_buffer_object, GL_ARB_ES2_compatibility, GL_ARB_ES3_compatibility, GL_ARB_buffer_storage, GL_ARB_compatibility, GL_ARB_compressed_texture_pixel_storage, GL_ARB_debug_output, GL_ARB_depth_buffer_float, GL_ARB_depth_clamp, GL_ARB_depth_texture, GL_ARB_draw_buffers, GL_ARB_draw_buffers_blend, GL_ARB_explicit_attrib_location, GL_ARB_explicit_uniform_location, GL_ARB_fragment_program, GL_ARB_fragment_shader, GL_ARB_framebuffer_object, GL_ARB_framebuffer_sRGB, GL_ARB_multisample, GL_ARB_sample_locations, GL_ARB_texture_compression, GL_ARB_texture_float, GL_ARB_texture_multisample, GL_ARB_texture_non_power_of_two, GL_ARB_texture_rg, GL_ARB_texture_swizzle, GL_ARB_uniform_buffer_object, GL_ARB_vertex_array_object, GL_ARB_vertex_attrib_binding, GL_ARB_vertex_buffer_object, GL_ARB_vertex_program, GL_ARB_vertex_shader, GL_ATI_element_array, GL_ATI_fragment_shader, GL_ATI_vertex_array_object, GL_EXT_blend_color, GL_EXT_blend_equation_separate, GL_EXT_blend_func_separate, GL_EXT_framebuffer_blit, GL_EXT_framebuffer_multisample, GL_EXT_framebuffer_multisample_blit_scaled, GL_EXT_framebuffer_object, GL_EXT_framebuffer_sRGB, GL_EXT_index_array_formats, GL_EXT_texture, GL_EXT_texture_compression_s3tc, GL_EXT_texture_sRGB, GL_EXT_texture_swizzle, GL_EXT_vertex_array, GL_EXT_vertex_shader - Loader: No - - Commandline: - --profile="core" --api="gl=3.3" --generator="c" --spec="gl" --no-loader --extensions="GL_AMD_debug_output,GL_AMD_query_buffer_object,GL_ARB_ES2_compatibility,GL_ARB_ES3_compatibility,GL_ARB_buffer_storage,GL_ARB_compatibility,GL_ARB_compressed_texture_pixel_storage,GL_ARB_debug_output,GL_ARB_depth_buffer_float,GL_ARB_depth_clamp,GL_ARB_depth_texture,GL_ARB_draw_buffers,GL_ARB_draw_buffers_blend,GL_ARB_explicit_attrib_location,GL_ARB_explicit_uniform_location,GL_ARB_fragment_program,GL_ARB_fragment_shader,GL_ARB_framebuffer_object,GL_ARB_framebuffer_sRGB,GL_ARB_multisample,GL_ARB_sample_locations,GL_ARB_texture_compression,GL_ARB_texture_float,GL_ARB_texture_multisample,GL_ARB_texture_non_power_of_two,GL_ARB_texture_rg,GL_ARB_texture_swizzle,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_object,GL_ARB_vertex_attrib_binding,GL_ARB_vertex_buffer_object,GL_ARB_vertex_program,GL_ARB_vertex_shader,GL_ATI_element_array,GL_ATI_fragment_shader,GL_ATI_vertex_array_object,GL_EXT_blend_color,GL_EXT_blend_equation_separate,GL_EXT_blend_func_separate,GL_EXT_framebuffer_blit,GL_EXT_framebuffer_multisample,GL_EXT_framebuffer_multisample_blit_scaled,GL_EXT_framebuffer_object,GL_EXT_framebuffer_sRGB,GL_EXT_index_array_formats,GL_EXT_texture,GL_EXT_texture_compression_s3tc,GL_EXT_texture_sRGB,GL_EXT_texture_swizzle,GL_EXT_vertex_array,GL_EXT_vertex_shader" - Online: - http://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&extensions=GL_AMD_debug_output&extensions=GL_AMD_query_buffer_object&extensions=GL_ARB_ES2_compatibility&extensions=GL_ARB_ES3_compatibility&extensions=GL_ARB_buffer_storage&extensions=GL_ARB_compatibility&extensions=GL_ARB_compressed_texture_pixel_storage&extensions=GL_ARB_debug_output&extensions=GL_ARB_depth_buffer_float&extensions=GL_ARB_depth_clamp&extensions=GL_ARB_depth_texture&extensions=GL_ARB_draw_buffers&extensions=GL_ARB_draw_buffers_blend&extensions=GL_ARB_explicit_attrib_location&extensions=GL_ARB_explicit_uniform_location&extensions=GL_ARB_fragment_program&extensions=GL_ARB_fragment_shader&extensions=GL_ARB_framebuffer_object&extensions=GL_ARB_framebuffer_sRGB&extensions=GL_ARB_multisample&extensions=GL_ARB_sample_locations&extensions=GL_ARB_texture_compression&extensions=GL_ARB_texture_float&extensions=GL_ARB_texture_multisample&extensions=GL_ARB_texture_non_power_of_two&extensions=GL_ARB_texture_rg&extensions=GL_ARB_texture_swizzle&extensions=GL_ARB_uniform_buffer_object&extensions=GL_ARB_vertex_array_object&extensions=GL_ARB_vertex_attrib_binding&extensions=GL_ARB_vertex_buffer_object&extensions=GL_ARB_vertex_program&extensions=GL_ARB_vertex_shader&extensions=GL_ATI_element_array&extensions=GL_ATI_fragment_shader&extensions=GL_ATI_vertex_array_object&extensions=GL_EXT_blend_color&extensions=GL_EXT_blend_equation_separate&extensions=GL_EXT_blend_func_separate&extensions=GL_EXT_framebuffer_blit&extensions=GL_EXT_framebuffer_multisample&extensions=GL_EXT_framebuffer_multisample_blit_scaled&extensions=GL_EXT_framebuffer_object&extensions=GL_EXT_framebuffer_sRGB&extensions=GL_EXT_index_array_formats&extensions=GL_EXT_texture&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_sRGB&extensions=GL_EXT_texture_swizzle&extensions=GL_EXT_vertex_array&extensions=GL_EXT_vertex_shader -*/ - - -#ifndef __glad_h_ -#define __glad_h_ - -#ifdef __gl_h_ -#error OpenGL header already included, remove this include, glad already provides it -#endif -#define __gl_h_ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN 1 -#endif -//#include -#define APIENTRY __stdcall // RAY: Added -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -// RAY: Added -#ifndef GLAD_REALLOC - #define GLAD_REALLOC(n,sz) realloc(n,sz) -#endif -#ifndef GLAD_FREE - #define GLAD_FREE(p) free(p) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -struct gladGLversionStruct { - int major; - int minor; -}; - -typedef void* (* GLADloadproc)(const char *name); - -#ifndef GLAPI -# if defined(GLAD_GLAPI_EXPORT) -# if defined(WIN32) || defined(__CYGWIN__) -# if defined(GLAD_GLAPI_EXPORT_BUILD) -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllexport)) extern -# else -# define GLAPI __declspec(dllexport) extern -# endif -# else -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllimport)) extern -# else -# define GLAPI __declspec(dllimport) extern -# endif -# endif -# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) -# define GLAPI __attribute__ ((visibility ("default"))) extern -# else -# define GLAPI extern -# endif -# else -# define GLAPI extern -# endif -#endif - -GLAPI struct gladGLversionStruct GLVersion; -GLAPI int gladLoadGLLoader(GLADloadproc); - -#include -//#include // RAY: Not required -#ifndef GLEXT_64_TYPES_DEFINED -/* This code block is duplicated in glxext.h, so must be protected */ -#define GLEXT_64_TYPES_DEFINED -/* Define int32_t, int64_t, and uint64_t types for UST/MSC */ -/* (as used in the GL_EXT_timer_query extension). */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L -#include -#elif defined(__sun__) || defined(__digital__) -#include -#if defined(__STDC__) -#if defined(__arch64__) || defined(_LP64) -typedef long int int64_t; -typedef unsigned long int uint64_t; -#else -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#endif /* __arch64__ */ -#endif /* __STDC__ */ -#elif defined( __VMS ) || defined(__sgi) -#include -#elif defined(__SCO__) || defined(__USLC__) -#include -#elif defined(__UNIXOS2__) || defined(__SOL64__) -typedef long int int32_t; -typedef long long int int64_t; -typedef unsigned long long int uint64_t; -#elif defined(_WIN32) && defined(__GNUC__) -#include -#elif defined(_WIN32) -typedef __int32 int32_t; -typedef __int64 int64_t; -typedef unsigned __int64 uint64_t; -#else -/* Fallback if nothing above works */ -#include -#endif -#endif -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef signed char GLbyte; -typedef short GLshort; -typedef int GLint; -typedef int GLclampx; -typedef unsigned char GLubyte; -typedef unsigned short GLushort; -typedef unsigned int GLuint; -typedef int GLsizei; -typedef float GLfloat; -typedef float GLclampf; -typedef double GLdouble; -typedef double GLclampd; -typedef void *GLeglImageOES; -typedef char GLchar; -typedef char GLcharARB; -#ifdef __APPLE__ -typedef void *GLhandleARB; -#else -typedef unsigned int GLhandleARB; -#endif -typedef unsigned short GLhalfARB; -typedef unsigned short GLhalf; -typedef GLint GLfixed; -typedef ptrdiff_t GLintptr; -typedef ptrdiff_t GLsizeiptr; -typedef int64_t GLint64; -typedef uint64_t GLuint64; -typedef ptrdiff_t GLintptrARB; -typedef ptrdiff_t GLsizeiptrARB; -typedef int64_t GLint64EXT; -typedef uint64_t GLuint64EXT; -typedef struct __GLsync *GLsync; -struct _cl_context; -struct _cl_event; -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); -typedef unsigned short GLhalfNV; -typedef GLintptr GLvdpauSurfaceNV; -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_FALSE 0 -#define GL_TRUE 1 -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_NONE 0 -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_RANGE 0x0B12 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_RANGE 0x0B22 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_VIEWPORT 0x0BA2 -#define GL_DITHER 0x0BD0 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND 0x0BE2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_READ_BUFFER 0x0C02 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_DOUBLE 0x140A -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F -#define GL_TEXTURE 0x1702 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_STENCIL_INDEX 0x1901 -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_REPEAT 0x2901 -#define GL_R3_G3_B2 0x2A10 -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_SUBTRACT 0x800A -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_SRC1_ALPHA 0x8589 -#define GL_BLEND_EQUATION_RGB 0x8009 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_COLOR_ATTACHMENT16 0x8CF0 -#define GL_COLOR_ATTACHMENT17 0x8CF1 -#define GL_COLOR_ATTACHMENT18 0x8CF2 -#define GL_COLOR_ATTACHMENT19 0x8CF3 -#define GL_COLOR_ATTACHMENT20 0x8CF4 -#define GL_COLOR_ATTACHMENT21 0x8CF5 -#define GL_COLOR_ATTACHMENT22 0x8CF6 -#define GL_COLOR_ATTACHMENT23 0x8CF7 -#define GL_COLOR_ATTACHMENT24 0x8CF8 -#define GL_COLOR_ATTACHMENT25 0x8CF9 -#define GL_COLOR_ATTACHMENT26 0x8CFA -#define GL_COLOR_ATTACHMENT27 0x8CFB -#define GL_COLOR_ATTACHMENT28 0x8CFC -#define GL_COLOR_ATTACHMENT29 0x8CFD -#define GL_COLOR_ATTACHMENT30 0x8CFE -#define GL_COLOR_ATTACHMENT31 0x8CFF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#define GL_INDEX 0x8222 -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#define GL_HALF_FLOAT 0x140B -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFF -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -#define GL_DEPTH_CLAMP 0x864F -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_SRC1_COLOR 0x88F9 -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#define GL_SAMPLER_BINDING 0x8919 -#define GL_RGB10_A2UI 0x906F -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#define GL_INT_2_10_10_10_REV 0x8D9F -#ifndef GL_VERSION_1_0 -#define GL_VERSION_1_0 1 -GLAPI int GLAD_GL_VERSION_1_0; -typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); -GLAPI PFNGLCULLFACEPROC glad_glCullFace; -#define glCullFace glad_glCullFace -typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); -GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; -#define glFrontFace glad_glFrontFace -typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); -GLAPI PFNGLHINTPROC glad_glHint; -#define glHint glad_glHint -typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); -GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; -#define glLineWidth glad_glLineWidth -typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size); -GLAPI PFNGLPOINTSIZEPROC glad_glPointSize; -#define glPointSize glad_glPointSize -typedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); -GLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode; -#define glPolygonMode glad_glPolygonMode -typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLSCISSORPROC glad_glScissor; -#define glScissor glad_glScissor -typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; -#define glTexParameterf glad_glTexParameterf -typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat* params); -GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; -#define glTexParameterfv glad_glTexParameterfv -typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; -#define glTexParameteri glad_glTexParameteri -typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint* params); -GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; -#define glTexParameteriv glad_glTexParameteriv -typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void* pixels); -GLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D; -#define glTexImage1D glad_glTexImage1D -typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels); -GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; -#define glTexImage2D glad_glTexImage2D -typedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf); -GLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer; -#define glDrawBuffer glad_glDrawBuffer -typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); -GLAPI PFNGLCLEARPROC glad_glClear; -#define glClear glad_glClear -typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; -#define glClearColor glad_glClearColor -typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); -GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; -#define glClearStencil glad_glClearStencil -typedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth); -GLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth; -#define glClearDepth glad_glClearDepth -typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); -GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; -#define glStencilMask glad_glStencilMask -typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI PFNGLCOLORMASKPROC glad_glColorMask; -#define glColorMask glad_glColorMask -typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); -GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; -#define glDepthMask glad_glDepthMask -typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); -GLAPI PFNGLDISABLEPROC glad_glDisable; -#define glDisable glad_glDisable -typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); -GLAPI PFNGLENABLEPROC glad_glEnable; -#define glEnable glad_glEnable -typedef void (APIENTRYP PFNGLFINISHPROC)(); -GLAPI PFNGLFINISHPROC glad_glFinish; -#define glFinish glad_glFinish -typedef void (APIENTRYP PFNGLFLUSHPROC)(); -GLAPI PFNGLFLUSHPROC glad_glFlush; -#define glFlush glad_glFlush -typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); -GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; -#define glBlendFunc glad_glBlendFunc -typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode); -GLAPI PFNGLLOGICOPPROC glad_glLogicOp; -#define glLogicOp glad_glLogicOp -typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); -GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; -#define glStencilFunc glad_glStencilFunc -typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); -GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; -#define glStencilOp glad_glStencilOp -typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); -GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; -#define glDepthFunc glad_glDepthFunc -typedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref; -#define glPixelStoref glad_glPixelStoref -typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); -GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; -#define glPixelStorei glad_glPixelStorei -typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src); -GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer; -#define glReadBuffer glad_glReadBuffer -typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels); -GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; -#define glReadPixels glad_glReadPixels -typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean* data); -GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; -#define glGetBooleanv glad_glGetBooleanv -typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble* data); -GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev; -#define glGetDoublev glad_glGetDoublev -typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(); -GLAPI PFNGLGETERRORPROC glad_glGetError; -#define glGetError glad_glGetError -typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat* data); -GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; -#define glGetFloatv glad_glGetFloatv -typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint* data); -GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; -#define glGetIntegerv glad_glGetIntegerv -typedef const GLubyte* (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); -GLAPI PFNGLGETSTRINGPROC glad_glGetString; -#define glGetString glad_glGetString -typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void* pixels); -GLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage; -#define glGetTexImage glad_glGetTexImage -typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat* params); -GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; -#define glGetTexParameterfv glad_glGetTexParameterfv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint* params); -GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; -#define glGetTexParameteriv glad_glGetTexParameteriv -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat* params); -GLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; -#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint* params); -GLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; -#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv -typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); -GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; -#define glIsEnabled glad_glIsEnabled -typedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble near, GLdouble far); -GLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange; -#define glDepthRange glad_glDepthRange -typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLVIEWPORTPROC glad_glViewport; -#define glViewport glad_glViewport -#endif -#ifndef GL_VERSION_1_1 -#define GL_VERSION_1_1 1 -GLAPI int GLAD_GL_VERSION_1_1; -typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); -GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; -#define glDrawArrays glad_glDrawArrays -typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void* indices); -GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; -#define glDrawElements glad_glDrawElements -typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); -GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; -#define glPolygonOffset glad_glPolygonOffset -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; -#define glCopyTexImage1D glad_glCopyTexImage1D -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; -#define glCopyTexImage2D glad_glCopyTexImage2D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; -#define glCopyTexSubImage1D glad_glCopyTexSubImage1D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; -#define glCopyTexSubImage2D glad_glCopyTexSubImage2D -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void* pixels); -GLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; -#define glTexSubImage1D glad_glTexSubImage1D -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); -GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; -#define glTexSubImage2D glad_glTexSubImage2D -typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); -GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; -#define glBindTexture glad_glBindTexture -typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint* textures); -GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; -#define glDeleteTextures glad_glDeleteTextures -typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint* textures); -GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; -#define glGenTextures glad_glGenTextures -typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); -GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; -#define glIsTexture glad_glIsTexture -#endif -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -GLAPI int GLAD_GL_VERSION_1_2; -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void* indices); -GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; -#define glDrawRangeElements glad_glDrawRangeElements -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void* pixels); -GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D; -#define glTexImage3D glad_glTexImage3D -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void* pixels); -GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; -#define glTexSubImage3D glad_glTexSubImage3D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; -#define glCopyTexSubImage3D glad_glCopyTexSubImage3D -#endif -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -GLAPI int GLAD_GL_VERSION_1_3; -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); -GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; -#define glActiveTexture glad_glActiveTexture -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); -GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; -#define glSampleCoverage glad_glSampleCoverage -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; -#define glCompressedTexImage3D glad_glCompressedTexImage3D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; -#define glCompressedTexImage2D glad_glCompressedTexImage2D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; -#define glCompressedTexImage1D glad_glCompressedTexImage1D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; -#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; -#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; -#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void* img); -GLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; -#define glGetCompressedTexImage glad_glGetCompressedTexImage -#endif -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -GLAPI int GLAD_GL_VERSION_1_4; -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; -#define glBlendFuncSeparate glad_glBlendFuncSeparate -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint* first, const GLsizei* count, GLsizei drawcount); -GLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; -#define glMultiDrawArrays glad_glMultiDrawArrays -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei* count, GLenum type, const void** indices, GLsizei drawcount); -GLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; -#define glMultiDrawElements glad_glMultiDrawElements -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; -#define glPointParameterf glad_glPointParameterf -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat* params); -GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; -#define glPointParameterfv glad_glPointParameterfv -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); -GLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; -#define glPointParameteri glad_glPointParameteri -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint* params); -GLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; -#define glPointParameteriv glad_glPointParameteriv -typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor; -#define glBlendColor glad_glBlendColor -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode); -GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation; -#define glBlendEquation glad_glBlendEquation -#endif -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -GLAPI int GLAD_GL_VERSION_1_5; -typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint* ids); -GLAPI PFNGLGENQUERIESPROC glad_glGenQueries; -#define glGenQueries glad_glGenQueries -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint* ids); -GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries; -#define glDeleteQueries glad_glDeleteQueries -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id); -GLAPI PFNGLISQUERYPROC glad_glIsQuery; -#define glIsQuery glad_glIsQuery -typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); -GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery; -#define glBeginQuery glad_glBeginQuery -typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target); -GLAPI PFNGLENDQUERYPROC glad_glEndQuery; -#define glEndQuery glad_glEndQuery -typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint* params); -GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv; -#define glGetQueryiv glad_glGetQueryiv -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint* params); -GLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; -#define glGetQueryObjectiv glad_glGetQueryObjectiv -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint* params); -GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; -#define glGetQueryObjectuiv glad_glGetQueryObjectuiv -typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); -GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; -#define glBindBuffer glad_glBindBuffer -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint* buffers); -GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; -#define glDeleteBuffers glad_glDeleteBuffers -typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint* buffers); -GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; -#define glGenBuffers glad_glGenBuffers -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); -GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; -#define glIsBuffer glad_glIsBuffer -typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void* data, GLenum usage); -GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; -#define glBufferData glad_glBufferData -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void* data); -GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; -#define glBufferSubData glad_glBufferSubData -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void* data); -GLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; -#define glGetBufferSubData glad_glGetBufferSubData -typedef void* (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); -GLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer; -#define glMapBuffer glad_glMapBuffer -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target); -GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; -#define glUnmapBuffer glad_glUnmapBuffer -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint* params); -GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; -#define glGetBufferParameteriv glad_glGetBufferParameteriv -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void** params); -GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; -#define glGetBufferPointerv glad_glGetBufferPointerv -#endif -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -GLAPI int GLAD_GL_VERSION_2_0; -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; -#define glBlendEquationSeparate glad_glBlendEquationSeparate -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum* bufs); -GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; -#define glDrawBuffers glad_glDrawBuffers -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; -#define glStencilOpSeparate glad_glStencilOpSeparate -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; -#define glStencilFuncSeparate glad_glStencilFuncSeparate -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); -GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; -#define glStencilMaskSeparate glad_glStencilMaskSeparate -typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); -GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader; -#define glAttachShader glad_glAttachShader -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar* name); -GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; -#define glBindAttribLocation glad_glBindAttribLocation -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader); -GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader; -#define glCompileShader glad_glCompileShader -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(); -GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram; -#define glCreateProgram glad_glCreateProgram -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type); -GLAPI PFNGLCREATESHADERPROC glad_glCreateShader; -#define glCreateShader glad_glCreateShader -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program); -GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; -#define glDeleteProgram glad_glDeleteProgram -typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader); -GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader; -#define glDeleteShader glad_glDeleteShader -typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); -GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader; -#define glDetachShader glad_glDetachShader -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); -GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; -#define glDisableVertexAttribArray glad_glDisableVertexAttribArray -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); -GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; -#define glEnableVertexAttribArray glad_glEnableVertexAttribArray -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; -#define glGetActiveAttrib glad_glGetActiveAttrib -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); -GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; -#define glGetActiveUniform glad_glGetActiveUniform -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders); -GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; -#define glGetAttachedShaders glad_glGetAttachedShaders -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar* name); -GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; -#define glGetAttribLocation glad_glGetAttribLocation -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint* params); -GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; -#define glGetProgramiv glad_glGetProgramiv -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; -#define glGetProgramInfoLog glad_glGetProgramInfoLog -typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint* params); -GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv; -#define glGetShaderiv glad_glGetShaderiv -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog); -GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; -#define glGetShaderInfoLog glad_glGetShaderInfoLog -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* source); -GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; -#define glGetShaderSource glad_glGetShaderSource -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar* name); -GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; -#define glGetUniformLocation glad_glGetUniformLocation -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat* params); -GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; -#define glGetUniformfv glad_glGetUniformfv -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint* params); -GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; -#define glGetUniformiv glad_glGetUniformiv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble* params); -GLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; -#define glGetVertexAttribdv glad_glGetVertexAttribdv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat* params); -GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; -#define glGetVertexAttribfv glad_glGetVertexAttribfv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint* params); -GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; -#define glGetVertexAttribiv glad_glGetVertexAttribiv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void** pointer); -GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; -#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program); -GLAPI PFNGLISPROGRAMPROC glad_glIsProgram; -#define glIsProgram glad_glIsProgram -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader); -GLAPI PFNGLISSHADERPROC glad_glIsShader; -#define glIsShader glad_glIsShader -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program); -GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram; -#define glLinkProgram glad_glLinkProgram -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar** string, const GLint* length); -GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource; -#define glShaderSource glad_glShaderSource -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program); -GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram; -#define glUseProgram glad_glUseProgram -typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); -GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f; -#define glUniform1f glad_glUniform1f -typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); -GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f; -#define glUniform2f glad_glUniform2f -typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f; -#define glUniform3f glad_glUniform3f -typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f; -#define glUniform4f glad_glUniform4f -typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0); -GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i; -#define glUniform1i glad_glUniform1i -typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); -GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i; -#define glUniform2i glad_glUniform2i -typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); -GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i; -#define glUniform3i glad_glUniform3i -typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i; -#define glUniform4i glad_glUniform4i -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat* value); -GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv; -#define glUniform1fv glad_glUniform1fv -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat* value); -GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv; -#define glUniform2fv glad_glUniform2fv -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat* value); -GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv; -#define glUniform3fv glad_glUniform3fv -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat* value); -GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv; -#define glUniform4fv glad_glUniform4fv -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint* value); -GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv; -#define glUniform1iv glad_glUniform1iv -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint* value); -GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv; -#define glUniform2iv glad_glUniform2iv -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint* value); -GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv; -#define glUniform3iv glad_glUniform3iv -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint* value); -GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv; -#define glUniform4iv glad_glUniform4iv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; -#define glUniformMatrix2fv glad_glUniformMatrix2fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; -#define glUniformMatrix3fv glad_glUniformMatrix3fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; -#define glUniformMatrix4fv glad_glUniformMatrix4fv -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program); -GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; -#define glValidateProgram glad_glValidateProgram -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); -GLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; -#define glVertexAttrib1d glad_glVertexAttrib1d -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble* v); -GLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; -#define glVertexAttrib1dv glad_glVertexAttrib1dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); -GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; -#define glVertexAttrib1f glad_glVertexAttrib1f -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat* v); -GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; -#define glVertexAttrib1fv glad_glVertexAttrib1fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); -GLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; -#define glVertexAttrib1s glad_glVertexAttrib1s -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; -#define glVertexAttrib1sv glad_glVertexAttrib1sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); -GLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; -#define glVertexAttrib2d glad_glVertexAttrib2d -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble* v); -GLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; -#define glVertexAttrib2dv glad_glVertexAttrib2dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); -GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; -#define glVertexAttrib2f glad_glVertexAttrib2f -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat* v); -GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; -#define glVertexAttrib2fv glad_glVertexAttrib2fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); -GLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; -#define glVertexAttrib2s glad_glVertexAttrib2s -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; -#define glVertexAttrib2sv glad_glVertexAttrib2sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; -#define glVertexAttrib3d glad_glVertexAttrib3d -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble* v); -GLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; -#define glVertexAttrib3dv glad_glVertexAttrib3dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; -#define glVertexAttrib3f glad_glVertexAttrib3f -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat* v); -GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; -#define glVertexAttrib3fv glad_glVertexAttrib3fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; -#define glVertexAttrib3s glad_glVertexAttrib3s -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; -#define glVertexAttrib3sv glad_glVertexAttrib3sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte* v); -GLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; -#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint* v); -GLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; -#define glVertexAttrib4Niv glad_glVertexAttrib4Niv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; -#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; -#define glVertexAttrib4Nub glad_glVertexAttrib4Nub -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte* v); -GLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; -#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint* v); -GLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; -#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort* v); -GLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; -#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte* v); -GLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; -#define glVertexAttrib4bv glad_glVertexAttrib4bv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; -#define glVertexAttrib4d glad_glVertexAttrib4d -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble* v); -GLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; -#define glVertexAttrib4dv glad_glVertexAttrib4dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; -#define glVertexAttrib4f glad_glVertexAttrib4f -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat* v); -GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; -#define glVertexAttrib4fv glad_glVertexAttrib4fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint* v); -GLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; -#define glVertexAttrib4iv glad_glVertexAttrib4iv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; -#define glVertexAttrib4s glad_glVertexAttrib4s -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; -#define glVertexAttrib4sv glad_glVertexAttrib4sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte* v); -GLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; -#define glVertexAttrib4ubv glad_glVertexAttrib4ubv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint* v); -GLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; -#define glVertexAttrib4uiv glad_glVertexAttrib4uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort* v); -GLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; -#define glVertexAttrib4usv glad_glVertexAttrib4usv -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); -GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; -#define glVertexAttribPointer glad_glVertexAttribPointer -#endif -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -GLAPI int GLAD_GL_VERSION_2_1; -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; -#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; -#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; -#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; -#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; -#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); -GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; -#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv -#endif -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 -GLAPI int GLAD_GL_VERSION_3_0; -typedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI PFNGLCOLORMASKIPROC glad_glColorMaski; -#define glColorMaski glad_glColorMaski -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean* data); -GLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; -#define glGetBooleani_v glad_glGetBooleani_v -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint* data); -GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; -#define glGetIntegeri_v glad_glGetIntegeri_v -typedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index); -GLAPI PFNGLENABLEIPROC glad_glEnablei; -#define glEnablei glad_glEnablei -typedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index); -GLAPI PFNGLDISABLEIPROC glad_glDisablei; -#define glDisablei glad_glDisablei -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index); -GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi; -#define glIsEnabledi glad_glIsEnabledi -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); -GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; -#define glBeginTransformFeedback glad_glBeginTransformFeedback -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(); -GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; -#define glEndTransformFeedback glad_glEndTransformFeedback -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; -#define glBindBufferRange glad_glBindBufferRange -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); -GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; -#define glBindBufferBase glad_glBindBufferBase -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar** varyings, GLenum bufferMode); -GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; -#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name); -GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; -#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); -GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor; -#define glClampColor glad_glClampColor -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); -GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; -#define glBeginConditionalRender glad_glBeginConditionalRender -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(); -GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; -#define glEndConditionalRender glad_glEndConditionalRender -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void* pointer); -GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; -#define glVertexAttribIPointer glad_glVertexAttribIPointer -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint* params); -GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; -#define glGetVertexAttribIiv glad_glGetVertexAttribIiv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint* params); -GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; -#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); -GLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; -#define glVertexAttribI1i glad_glVertexAttribI1i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); -GLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; -#define glVertexAttribI2i glad_glVertexAttribI2i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); -GLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; -#define glVertexAttribI3i glad_glVertexAttribI3i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; -#define glVertexAttribI4i glad_glVertexAttribI4i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); -GLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; -#define glVertexAttribI1ui glad_glVertexAttribI1ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); -GLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; -#define glVertexAttribI2ui glad_glVertexAttribI2ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; -#define glVertexAttribI3ui glad_glVertexAttribI3ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; -#define glVertexAttribI4ui glad_glVertexAttribI4ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint* v); -GLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; -#define glVertexAttribI1iv glad_glVertexAttribI1iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint* v); -GLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; -#define glVertexAttribI2iv glad_glVertexAttribI2iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint* v); -GLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; -#define glVertexAttribI3iv glad_glVertexAttribI3iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint* v); -GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; -#define glVertexAttribI4iv glad_glVertexAttribI4iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint* v); -GLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; -#define glVertexAttribI1uiv glad_glVertexAttribI1uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint* v); -GLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; -#define glVertexAttribI2uiv glad_glVertexAttribI2uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint* v); -GLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; -#define glVertexAttribI3uiv glad_glVertexAttribI3uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint* v); -GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; -#define glVertexAttribI4uiv glad_glVertexAttribI4uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte* v); -GLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; -#define glVertexAttribI4bv glad_glVertexAttribI4bv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; -#define glVertexAttribI4sv glad_glVertexAttribI4sv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte* v); -GLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; -#define glVertexAttribI4ubv glad_glVertexAttribI4ubv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort* v); -GLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; -#define glVertexAttribI4usv glad_glVertexAttribI4usv -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint* params); -GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; -#define glGetUniformuiv glad_glGetUniformuiv -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar* name); -GLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; -#define glBindFragDataLocation glad_glBindFragDataLocation -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar* name); -GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; -#define glGetFragDataLocation glad_glGetFragDataLocation -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); -GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui; -#define glUniform1ui glad_glUniform1ui -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); -GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui; -#define glUniform2ui glad_glUniform2ui -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui; -#define glUniform3ui glad_glUniform3ui -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui; -#define glUniform4ui glad_glUniform4ui -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint* value); -GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; -#define glUniform1uiv glad_glUniform1uiv -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint* value); -GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; -#define glUniform2uiv glad_glUniform2uiv -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint* value); -GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; -#define glUniform3uiv glad_glUniform3uiv -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint* value); -GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; -#define glUniform4uiv glad_glUniform4uiv -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint* params); -GLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; -#define glTexParameterIiv glad_glTexParameterIiv -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint* params); -GLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; -#define glTexParameterIuiv glad_glTexParameterIuiv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint* params); -GLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; -#define glGetTexParameterIiv glad_glGetTexParameterIiv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint* params); -GLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; -#define glGetTexParameterIuiv glad_glGetTexParameterIuiv -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint* value); -GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; -#define glClearBufferiv glad_glClearBufferiv -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint* value); -GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; -#define glClearBufferuiv glad_glClearBufferuiv -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat* value); -GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; -#define glClearBufferfv glad_glClearBufferfv -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; -#define glClearBufferfi glad_glClearBufferfi -typedef const GLubyte* (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); -GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi; -#define glGetStringi glad_glGetStringi -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); -GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; -#define glIsRenderbuffer glad_glIsRenderbuffer -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); -GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; -#define glBindRenderbuffer glad_glBindRenderbuffer -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint* renderbuffers); -GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; -#define glDeleteRenderbuffers glad_glDeleteRenderbuffers -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint* renderbuffers); -GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; -#define glGenRenderbuffers glad_glGenRenderbuffers -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; -#define glRenderbufferStorage glad_glRenderbufferStorage -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint* params); -GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; -#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); -GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; -#define glIsFramebuffer glad_glIsFramebuffer -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); -GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; -#define glBindFramebuffer glad_glBindFramebuffer -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint* framebuffers); -GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; -#define glDeleteFramebuffers glad_glDeleteFramebuffers -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint* framebuffers); -GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; -#define glGenFramebuffers glad_glGenFramebuffers -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); -GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; -#define glCheckFramebufferStatus glad_glCheckFramebufferStatus -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; -#define glFramebufferTexture1D glad_glFramebufferTexture1D -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; -#define glFramebufferTexture2D glad_glFramebufferTexture2D -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; -#define glFramebufferTexture3D glad_glFramebufferTexture3D -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; -#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint* params); -GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; -#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target); -GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; -#define glGenerateMipmap glad_glGenerateMipmap -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; -#define glBlitFramebuffer glad_glBlitFramebuffer -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; -#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; -#define glFramebufferTextureLayer glad_glFramebufferTextureLayer -typedef void* (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; -#define glMapBufferRange glad_glMapBufferRange -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); -GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; -#define glFlushMappedBufferRange glad_glFlushMappedBufferRange -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array); -GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; -#define glBindVertexArray glad_glBindVertexArray -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint* arrays); -GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; -#define glDeleteVertexArrays glad_glDeleteVertexArrays -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint* arrays); -GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; -#define glGenVertexArrays glad_glGenVertexArrays -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array); -GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; -#define glIsVertexArray glad_glIsVertexArray -#endif -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 -GLAPI int GLAD_GL_VERSION_3_1; -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; -#define glDrawArraysInstanced glad_glDrawArraysInstanced -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount); -GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; -#define glDrawElementsInstanced glad_glDrawElementsInstanced -typedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); -GLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer; -#define glTexBuffer glad_glTexBuffer -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); -GLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; -#define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; -#define glCopyBufferSubData glad_glCopyBufferSubData -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar** uniformNames, GLuint* uniformIndices); -GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; -#define glGetUniformIndices glad_glGetUniformIndices -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); -GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; -#define glGetActiveUniformsiv glad_glGetActiveUniformsiv -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformName); -GLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; -#define glGetActiveUniformName glad_glGetActiveUniformName -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar* uniformBlockName); -GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; -#define glGetUniformBlockIndex glad_glGetUniformBlockIndex -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); -GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; -#define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); -GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; -#define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; -#define glUniformBlockBinding glad_glUniformBlockBinding -#endif -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 -GLAPI int GLAD_GL_VERSION_3_2; -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void* indices, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; -#define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void* indices, GLint basevertex); -GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; -#define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instancecount, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; -#define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei* count, GLenum type, const void** indices, GLsizei drawcount, const GLint* basevertex); -GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; -#define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode); -GLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; -#define glProvokingVertex glad_glProvokingVertex -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); -GLAPI PFNGLFENCESYNCPROC glad_glFenceSync; -#define glFenceSync glad_glFenceSync -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync); -GLAPI PFNGLISSYNCPROC glad_glIsSync; -#define glIsSync glad_glIsSync -typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync); -GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync; -#define glDeleteSync glad_glDeleteSync -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; -#define glClientWaitSync glad_glClientWaitSync -typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI PFNGLWAITSYNCPROC glad_glWaitSync; -#define glWaitSync glad_glWaitSync -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64* data); -GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v; -#define glGetInteger64v glad_glGetInteger64v -typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); -GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv; -#define glGetSynciv glad_glGetSynciv -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64* data); -GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; -#define glGetInteger64i_v glad_glGetInteger64i_v -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64* params); -GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; -#define glGetBufferParameteri64v glad_glGetBufferParameteri64v -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; -#define glFramebufferTexture glad_glFramebufferTexture -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; -#define glTexImage2DMultisample glad_glTexImage2DMultisample -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; -#define glTexImage3DMultisample glad_glTexImage3DMultisample -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat* val); -GLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; -#define glGetMultisamplefv glad_glGetMultisamplefv -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); -GLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski; -#define glSampleMaski glad_glSampleMaski -#endif -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 -GLAPI int GLAD_GL_VERSION_3_3; -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar* name); -GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; -#define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar* name); -GLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; -#define glGetFragDataIndex glad_glGetFragDataIndex -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint* samplers); -GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers; -#define glGenSamplers glad_glGenSamplers -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint* samplers); -GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; -#define glDeleteSamplers glad_glDeleteSamplers -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler); -GLAPI PFNGLISSAMPLERPROC glad_glIsSampler; -#define glIsSampler glad_glIsSampler -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); -GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler; -#define glBindSampler glad_glBindSampler -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); -GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; -#define glSamplerParameteri glad_glSamplerParameteri -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint* param); -GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; -#define glSamplerParameteriv glad_glSamplerParameteriv -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); -GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; -#define glSamplerParameterf glad_glSamplerParameterf -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat* param); -GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; -#define glSamplerParameterfv glad_glSamplerParameterfv -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint* param); -GLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; -#define glSamplerParameterIiv glad_glSamplerParameterIiv -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint* param); -GLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; -#define glSamplerParameterIuiv glad_glSamplerParameterIuiv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint* params); -GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; -#define glGetSamplerParameteriv glad_glGetSamplerParameteriv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint* params); -GLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; -#define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat* params); -GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; -#define glGetSamplerParameterfv glad_glGetSamplerParameterfv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint* params); -GLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; -#define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); -GLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter; -#define glQueryCounter glad_glQueryCounter -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64* params); -GLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; -#define glGetQueryObjecti64v glad_glGetQueryObjecti64v -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64* params); -GLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; -#define glGetQueryObjectui64v glad_glGetQueryObjectui64v -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); -GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; -#define glVertexAttribDivisor glad_glVertexAttribDivisor -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; -#define glVertexAttribP1ui glad_glVertexAttribP1ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -GLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; -#define glVertexAttribP1uiv glad_glVertexAttribP1uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; -#define glVertexAttribP2ui glad_glVertexAttribP2ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -GLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; -#define glVertexAttribP2uiv glad_glVertexAttribP2uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; -#define glVertexAttribP3ui glad_glVertexAttribP3ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -GLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; -#define glVertexAttribP3uiv glad_glVertexAttribP3uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; -#define glVertexAttribP4ui glad_glVertexAttribP4ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint* value); -GLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; -#define glVertexAttribP4uiv glad_glVertexAttribP4uiv -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); -GLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui; -#define glVertexP2ui glad_glVertexP2ui -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint* value); -GLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; -#define glVertexP2uiv glad_glVertexP2uiv -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); -GLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui; -#define glVertexP3ui glad_glVertexP3ui -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint* value); -GLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; -#define glVertexP3uiv glad_glVertexP3uiv -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); -GLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui; -#define glVertexP4ui glad_glVertexP4ui -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint* value); -GLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; -#define glVertexP4uiv glad_glVertexP4uiv -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; -#define glTexCoordP1ui glad_glTexCoordP1ui -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint* coords); -GLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; -#define glTexCoordP1uiv glad_glTexCoordP1uiv -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; -#define glTexCoordP2ui glad_glTexCoordP2ui -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint* coords); -GLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; -#define glTexCoordP2uiv glad_glTexCoordP2uiv -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; -#define glTexCoordP3ui glad_glTexCoordP3ui -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint* coords); -GLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; -#define glTexCoordP3uiv glad_glTexCoordP3uiv -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; -#define glTexCoordP4ui glad_glTexCoordP4ui -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint* coords); -GLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; -#define glTexCoordP4uiv glad_glTexCoordP4uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; -#define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint* coords); -GLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; -#define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; -#define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint* coords); -GLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; -#define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; -#define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint* coords); -GLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; -#define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; -#define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint* coords); -GLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; -#define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv -typedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui; -#define glNormalP3ui glad_glNormalP3ui -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint* coords); -GLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; -#define glNormalP3uiv glad_glNormalP3uiv -typedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); -GLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui; -#define glColorP3ui glad_glColorP3ui -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint* color); -GLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv; -#define glColorP3uiv glad_glColorP3uiv -typedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); -GLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui; -#define glColorP4ui glad_glColorP4ui -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint* color); -GLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv; -#define glColorP4uiv glad_glColorP4uiv -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); -GLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; -#define glSecondaryColorP3ui glad_glSecondaryColorP3ui -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint* color); -GLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; -#define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv -#endif -#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 -#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 -#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 -#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A -#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B -#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C -#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D -#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E -#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F -#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 -#define GL_QUERY_BUFFER_AMD 0x9192 -#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 -#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 -#define GL_FIXED 0x140C -#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A -#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B -#define GL_LOW_FLOAT 0x8DF0 -#define GL_MEDIUM_FLOAT 0x8DF1 -#define GL_HIGH_FLOAT 0x8DF2 -#define GL_LOW_INT 0x8DF3 -#define GL_MEDIUM_INT 0x8DF4 -#define GL_HIGH_INT 0x8DF5 -#define GL_SHADER_COMPILER 0x8DFA -#define GL_SHADER_BINARY_FORMATS 0x8DF8 -#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 -#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB -#define GL_MAX_VARYING_VECTORS 0x8DFC -#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD -#define GL_RGB565 0x8D62 -#define GL_COMPRESSED_RGB8_ETC2 0x9274 -#define GL_COMPRESSED_SRGB8_ETC2 0x9275 -#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 -#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 -#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 -#define GL_COMPRESSED_R11_EAC 0x9270 -#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 -#define GL_COMPRESSED_RG11_EAC 0x9272 -#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 -#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 -#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A -#define GL_MAX_ELEMENT_INDEX 0x8D6B -#define GL_MAP_PERSISTENT_BIT 0x0040 -#define GL_MAP_COHERENT_BIT 0x0080 -#define GL_DYNAMIC_STORAGE_BIT 0x0100 -#define GL_CLIENT_STORAGE_BIT 0x0200 -#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 -#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F -#define GL_BUFFER_STORAGE_FLAGS 0x8220 -#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 -#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 -#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 -#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A -#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B -#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C -#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D -#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E -#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 -#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 -#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 -#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 -#define GL_DEBUG_SOURCE_API_ARB 0x8246 -#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 -#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 -#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 -#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A -#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B -#define GL_DEBUG_TYPE_ERROR_ARB 0x824C -#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D -#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E -#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F -#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 -#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 -#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 -#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 -#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 -#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 -#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 -#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 -#define GL_DEPTH_COMPONENT16_ARB 0x81A5 -#define GL_DEPTH_COMPONENT24_ARB 0x81A6 -#define GL_DEPTH_COMPONENT32_ARB 0x81A7 -#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A -#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B -#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 -#define GL_DRAW_BUFFER0_ARB 0x8825 -#define GL_DRAW_BUFFER1_ARB 0x8826 -#define GL_DRAW_BUFFER2_ARB 0x8827 -#define GL_DRAW_BUFFER3_ARB 0x8828 -#define GL_DRAW_BUFFER4_ARB 0x8829 -#define GL_DRAW_BUFFER5_ARB 0x882A -#define GL_DRAW_BUFFER6_ARB 0x882B -#define GL_DRAW_BUFFER7_ARB 0x882C -#define GL_DRAW_BUFFER8_ARB 0x882D -#define GL_DRAW_BUFFER9_ARB 0x882E -#define GL_DRAW_BUFFER10_ARB 0x882F -#define GL_DRAW_BUFFER11_ARB 0x8830 -#define GL_DRAW_BUFFER12_ARB 0x8831 -#define GL_DRAW_BUFFER13_ARB 0x8832 -#define GL_DRAW_BUFFER14_ARB 0x8833 -#define GL_DRAW_BUFFER15_ARB 0x8834 -#define GL_MAX_UNIFORM_LOCATIONS 0x826E -#define GL_FRAGMENT_PROGRAM_ARB 0x8804 -#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 -#define GL_PROGRAM_LENGTH_ARB 0x8627 -#define GL_PROGRAM_FORMAT_ARB 0x8876 -#define GL_PROGRAM_BINDING_ARB 0x8677 -#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 -#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 -#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 -#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 -#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 -#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 -#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 -#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 -#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 -#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 -#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA -#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB -#define GL_PROGRAM_ATTRIBS_ARB 0x88AC -#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD -#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE -#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF -#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 -#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 -#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 -#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 -#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 -#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 -#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 -#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 -#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A -#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B -#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C -#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D -#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E -#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F -#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 -#define GL_PROGRAM_STRING_ARB 0x8628 -#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B -#define GL_CURRENT_MATRIX_ARB 0x8641 -#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 -#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 -#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F -#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E -#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 -#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 -#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 -#define GL_MATRIX0_ARB 0x88C0 -#define GL_MATRIX1_ARB 0x88C1 -#define GL_MATRIX2_ARB 0x88C2 -#define GL_MATRIX3_ARB 0x88C3 -#define GL_MATRIX4_ARB 0x88C4 -#define GL_MATRIX5_ARB 0x88C5 -#define GL_MATRIX6_ARB 0x88C6 -#define GL_MATRIX7_ARB 0x88C7 -#define GL_MATRIX8_ARB 0x88C8 -#define GL_MATRIX9_ARB 0x88C9 -#define GL_MATRIX10_ARB 0x88CA -#define GL_MATRIX11_ARB 0x88CB -#define GL_MATRIX12_ARB 0x88CC -#define GL_MATRIX13_ARB 0x88CD -#define GL_MATRIX14_ARB 0x88CE -#define GL_MATRIX15_ARB 0x88CF -#define GL_MATRIX16_ARB 0x88D0 -#define GL_MATRIX17_ARB 0x88D1 -#define GL_MATRIX18_ARB 0x88D2 -#define GL_MATRIX19_ARB 0x88D3 -#define GL_MATRIX20_ARB 0x88D4 -#define GL_MATRIX21_ARB 0x88D5 -#define GL_MATRIX22_ARB 0x88D6 -#define GL_MATRIX23_ARB 0x88D7 -#define GL_MATRIX24_ARB 0x88D8 -#define GL_MATRIX25_ARB 0x88D9 -#define GL_MATRIX26_ARB 0x88DA -#define GL_MATRIX27_ARB 0x88DB -#define GL_MATRIX28_ARB 0x88DC -#define GL_MATRIX29_ARB 0x88DD -#define GL_MATRIX30_ARB 0x88DE -#define GL_MATRIX31_ARB 0x88DF -#define GL_FRAGMENT_SHADER_ARB 0x8B30 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B -#define GL_MULTISAMPLE_ARB 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F -#define GL_SAMPLE_COVERAGE_ARB 0x80A0 -#define GL_SAMPLE_BUFFERS_ARB 0x80A8 -#define GL_SAMPLES_ARB 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB -#define GL_MULTISAMPLE_BIT_ARB 0x20000000 -#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D -#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E -#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 -#define GL_SAMPLE_LOCATION_ARB 0x8E50 -#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 -#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 -#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 -#define GL_COMPRESSED_ALPHA_ARB 0x84E9 -#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB -#define GL_COMPRESSED_INTENSITY_ARB 0x84EC -#define GL_COMPRESSED_RGB_ARB 0x84ED -#define GL_COMPRESSED_RGBA_ARB 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 -#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 -#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 -#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 -#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 -#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 -#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 -#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 -#define GL_RGBA32F_ARB 0x8814 -#define GL_RGB32F_ARB 0x8815 -#define GL_ALPHA32F_ARB 0x8816 -#define GL_INTENSITY32F_ARB 0x8817 -#define GL_LUMINANCE32F_ARB 0x8818 -#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 -#define GL_RGBA16F_ARB 0x881A -#define GL_RGB16F_ARB 0x881B -#define GL_ALPHA16F_ARB 0x881C -#define GL_INTENSITY16F_ARB 0x881D -#define GL_LUMINANCE16F_ARB 0x881E -#define GL_LUMINANCE_ALPHA16F_ARB 0x881F -#define GL_VERTEX_ATTRIB_BINDING 0x82D4 -#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 -#define GL_VERTEX_BINDING_DIVISOR 0x82D6 -#define GL_VERTEX_BINDING_OFFSET 0x82D7 -#define GL_VERTEX_BINDING_STRIDE 0x82D8 -#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 -#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA -#define GL_BUFFER_SIZE_ARB 0x8764 -#define GL_BUFFER_USAGE_ARB 0x8765 -#define GL_ARRAY_BUFFER_ARB 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 -#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 -#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F -#define GL_READ_ONLY_ARB 0x88B8 -#define GL_WRITE_ONLY_ARB 0x88B9 -#define GL_READ_WRITE_ARB 0x88BA -#define GL_BUFFER_ACCESS_ARB 0x88BB -#define GL_BUFFER_MAPPED_ARB 0x88BC -#define GL_BUFFER_MAP_POINTER_ARB 0x88BD -#define GL_STREAM_DRAW_ARB 0x88E0 -#define GL_STREAM_READ_ARB 0x88E1 -#define GL_STREAM_COPY_ARB 0x88E2 -#define GL_STATIC_DRAW_ARB 0x88E4 -#define GL_STATIC_READ_ARB 0x88E5 -#define GL_STATIC_COPY_ARB 0x88E6 -#define GL_DYNAMIC_DRAW_ARB 0x88E8 -#define GL_DYNAMIC_READ_ARB 0x88E9 -#define GL_DYNAMIC_COPY_ARB 0x88EA -#define GL_COLOR_SUM_ARB 0x8458 -#define GL_VERTEX_PROGRAM_ARB 0x8620 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 -#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 -#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A -#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 -#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 -#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 -#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 -#define GL_VERTEX_SHADER_ARB 0x8B31 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A -#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D -#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 -#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A -#define GL_FLOAT_VEC2_ARB 0x8B50 -#define GL_FLOAT_VEC3_ARB 0x8B51 -#define GL_FLOAT_VEC4_ARB 0x8B52 -#define GL_FLOAT_MAT2_ARB 0x8B5A -#define GL_FLOAT_MAT3_ARB 0x8B5B -#define GL_FLOAT_MAT4_ARB 0x8B5C -#define GL_ELEMENT_ARRAY_ATI 0x8768 -#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 -#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A -#define GL_FRAGMENT_SHADER_ATI 0x8920 -#define GL_REG_0_ATI 0x8921 -#define GL_REG_1_ATI 0x8922 -#define GL_REG_2_ATI 0x8923 -#define GL_REG_3_ATI 0x8924 -#define GL_REG_4_ATI 0x8925 -#define GL_REG_5_ATI 0x8926 -#define GL_REG_6_ATI 0x8927 -#define GL_REG_7_ATI 0x8928 -#define GL_REG_8_ATI 0x8929 -#define GL_REG_9_ATI 0x892A -#define GL_REG_10_ATI 0x892B -#define GL_REG_11_ATI 0x892C -#define GL_REG_12_ATI 0x892D -#define GL_REG_13_ATI 0x892E -#define GL_REG_14_ATI 0x892F -#define GL_REG_15_ATI 0x8930 -#define GL_REG_16_ATI 0x8931 -#define GL_REG_17_ATI 0x8932 -#define GL_REG_18_ATI 0x8933 -#define GL_REG_19_ATI 0x8934 -#define GL_REG_20_ATI 0x8935 -#define GL_REG_21_ATI 0x8936 -#define GL_REG_22_ATI 0x8937 -#define GL_REG_23_ATI 0x8938 -#define GL_REG_24_ATI 0x8939 -#define GL_REG_25_ATI 0x893A -#define GL_REG_26_ATI 0x893B -#define GL_REG_27_ATI 0x893C -#define GL_REG_28_ATI 0x893D -#define GL_REG_29_ATI 0x893E -#define GL_REG_30_ATI 0x893F -#define GL_REG_31_ATI 0x8940 -#define GL_CON_0_ATI 0x8941 -#define GL_CON_1_ATI 0x8942 -#define GL_CON_2_ATI 0x8943 -#define GL_CON_3_ATI 0x8944 -#define GL_CON_4_ATI 0x8945 -#define GL_CON_5_ATI 0x8946 -#define GL_CON_6_ATI 0x8947 -#define GL_CON_7_ATI 0x8948 -#define GL_CON_8_ATI 0x8949 -#define GL_CON_9_ATI 0x894A -#define GL_CON_10_ATI 0x894B -#define GL_CON_11_ATI 0x894C -#define GL_CON_12_ATI 0x894D -#define GL_CON_13_ATI 0x894E -#define GL_CON_14_ATI 0x894F -#define GL_CON_15_ATI 0x8950 -#define GL_CON_16_ATI 0x8951 -#define GL_CON_17_ATI 0x8952 -#define GL_CON_18_ATI 0x8953 -#define GL_CON_19_ATI 0x8954 -#define GL_CON_20_ATI 0x8955 -#define GL_CON_21_ATI 0x8956 -#define GL_CON_22_ATI 0x8957 -#define GL_CON_23_ATI 0x8958 -#define GL_CON_24_ATI 0x8959 -#define GL_CON_25_ATI 0x895A -#define GL_CON_26_ATI 0x895B -#define GL_CON_27_ATI 0x895C -#define GL_CON_28_ATI 0x895D -#define GL_CON_29_ATI 0x895E -#define GL_CON_30_ATI 0x895F -#define GL_CON_31_ATI 0x8960 -#define GL_MOV_ATI 0x8961 -#define GL_ADD_ATI 0x8963 -#define GL_MUL_ATI 0x8964 -#define GL_SUB_ATI 0x8965 -#define GL_DOT3_ATI 0x8966 -#define GL_DOT4_ATI 0x8967 -#define GL_MAD_ATI 0x8968 -#define GL_LERP_ATI 0x8969 -#define GL_CND_ATI 0x896A -#define GL_CND0_ATI 0x896B -#define GL_DOT2_ADD_ATI 0x896C -#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D -#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E -#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F -#define GL_NUM_PASSES_ATI 0x8970 -#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 -#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 -#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 -#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 -#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 -#define GL_SWIZZLE_STR_ATI 0x8976 -#define GL_SWIZZLE_STQ_ATI 0x8977 -#define GL_SWIZZLE_STR_DR_ATI 0x8978 -#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 -#define GL_SWIZZLE_STRQ_ATI 0x897A -#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B -#define GL_RED_BIT_ATI 0x00000001 -#define GL_GREEN_BIT_ATI 0x00000002 -#define GL_BLUE_BIT_ATI 0x00000004 -#define GL_2X_BIT_ATI 0x00000001 -#define GL_4X_BIT_ATI 0x00000002 -#define GL_8X_BIT_ATI 0x00000004 -#define GL_HALF_BIT_ATI 0x00000008 -#define GL_QUARTER_BIT_ATI 0x00000010 -#define GL_EIGHTH_BIT_ATI 0x00000020 -#define GL_SATURATE_BIT_ATI 0x00000040 -#define GL_COMP_BIT_ATI 0x00000002 -#define GL_NEGATE_BIT_ATI 0x00000004 -#define GL_BIAS_BIT_ATI 0x00000008 -#define GL_STATIC_ATI 0x8760 -#define GL_DYNAMIC_ATI 0x8761 -#define GL_PRESERVE_ATI 0x8762 -#define GL_DISCARD_ATI 0x8763 -#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 -#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 -#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 -#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 -#define GL_CONSTANT_COLOR_EXT 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 -#define GL_CONSTANT_ALPHA_EXT 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 -#define GL_BLEND_COLOR_EXT 0x8005 -#define GL_BLEND_EQUATION_RGB_EXT 0x8009 -#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D -#define GL_BLEND_DST_RGB_EXT 0x80C8 -#define GL_BLEND_SRC_RGB_EXT 0x80C9 -#define GL_BLEND_DST_ALPHA_EXT 0x80CA -#define GL_BLEND_SRC_ALPHA_EXT 0x80CB -#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 -#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 -#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA -#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 -#define GL_MAX_SAMPLES_EXT 0x8D57 -#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA -#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB -#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 -#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 -#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 -#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 -#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF -#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 -#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 -#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 -#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 -#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 -#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 -#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 -#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 -#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 -#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 -#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA -#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB -#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC -#define GL_COLOR_ATTACHMENT13_EXT 0x8CED -#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE -#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF -#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 -#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 -#define GL_FRAMEBUFFER_EXT 0x8D40 -#define GL_RENDERBUFFER_EXT 0x8D41 -#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 -#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 -#define GL_STENCIL_INDEX1_EXT 0x8D46 -#define GL_STENCIL_INDEX4_EXT 0x8D47 -#define GL_STENCIL_INDEX8_EXT 0x8D48 -#define GL_STENCIL_INDEX16_EXT 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 -#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 -#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA -#define GL_IUI_V2F_EXT 0x81AD -#define GL_IUI_V3F_EXT 0x81AE -#define GL_IUI_N3F_V2F_EXT 0x81AF -#define GL_IUI_N3F_V3F_EXT 0x81B0 -#define GL_T2F_IUI_V2F_EXT 0x81B1 -#define GL_T2F_IUI_V3F_EXT 0x81B2 -#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 -#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 -#define GL_ALPHA4_EXT 0x803B -#define GL_ALPHA8_EXT 0x803C -#define GL_ALPHA12_EXT 0x803D -#define GL_ALPHA16_EXT 0x803E -#define GL_LUMINANCE4_EXT 0x803F -#define GL_LUMINANCE8_EXT 0x8040 -#define GL_LUMINANCE12_EXT 0x8041 -#define GL_LUMINANCE16_EXT 0x8042 -#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 -#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 -#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 -#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 -#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 -#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 -#define GL_INTENSITY_EXT 0x8049 -#define GL_INTENSITY4_EXT 0x804A -#define GL_INTENSITY8_EXT 0x804B -#define GL_INTENSITY12_EXT 0x804C -#define GL_INTENSITY16_EXT 0x804D -#define GL_RGB2_EXT 0x804E -#define GL_RGB4_EXT 0x804F -#define GL_RGB5_EXT 0x8050 -#define GL_RGB8_EXT 0x8051 -#define GL_RGB10_EXT 0x8052 -#define GL_RGB12_EXT 0x8053 -#define GL_RGB16_EXT 0x8054 -#define GL_RGBA2_EXT 0x8055 -#define GL_RGBA4_EXT 0x8056 -#define GL_RGB5_A1_EXT 0x8057 -#define GL_RGBA8_EXT 0x8058 -#define GL_RGB10_A2_EXT 0x8059 -#define GL_RGBA12_EXT 0x805A -#define GL_RGBA16_EXT 0x805B -#define GL_TEXTURE_RED_SIZE_EXT 0x805C -#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D -#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E -#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F -#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 -#define GL_REPLACE_EXT 0x8062 -#define GL_PROXY_TEXTURE_1D_EXT 0x8063 -#define GL_PROXY_TEXTURE_2D_EXT 0x8064 -#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 -#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#define GL_SRGB_EXT 0x8C40 -#define GL_SRGB8_EXT 0x8C41 -#define GL_SRGB_ALPHA_EXT 0x8C42 -#define GL_SRGB8_ALPHA8_EXT 0x8C43 -#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 -#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 -#define GL_SLUMINANCE_EXT 0x8C46 -#define GL_SLUMINANCE8_EXT 0x8C47 -#define GL_COMPRESSED_SRGB_EXT 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 -#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B -#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E -#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F -#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 -#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 -#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 -#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 -#define GL_VERTEX_ARRAY_EXT 0x8074 -#define GL_NORMAL_ARRAY_EXT 0x8075 -#define GL_COLOR_ARRAY_EXT 0x8076 -#define GL_INDEX_ARRAY_EXT 0x8077 -#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 -#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 -#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A -#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B -#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C -#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D -#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E -#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F -#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 -#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 -#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 -#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 -#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 -#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 -#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 -#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 -#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A -#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B -#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C -#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D -#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E -#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F -#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 -#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 -#define GL_VERTEX_SHADER_EXT 0x8780 -#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 -#define GL_OP_INDEX_EXT 0x8782 -#define GL_OP_NEGATE_EXT 0x8783 -#define GL_OP_DOT3_EXT 0x8784 -#define GL_OP_DOT4_EXT 0x8785 -#define GL_OP_MUL_EXT 0x8786 -#define GL_OP_ADD_EXT 0x8787 -#define GL_OP_MADD_EXT 0x8788 -#define GL_OP_FRAC_EXT 0x8789 -#define GL_OP_MAX_EXT 0x878A -#define GL_OP_MIN_EXT 0x878B -#define GL_OP_SET_GE_EXT 0x878C -#define GL_OP_SET_LT_EXT 0x878D -#define GL_OP_CLAMP_EXT 0x878E -#define GL_OP_FLOOR_EXT 0x878F -#define GL_OP_ROUND_EXT 0x8790 -#define GL_OP_EXP_BASE_2_EXT 0x8791 -#define GL_OP_LOG_BASE_2_EXT 0x8792 -#define GL_OP_POWER_EXT 0x8793 -#define GL_OP_RECIP_EXT 0x8794 -#define GL_OP_RECIP_SQRT_EXT 0x8795 -#define GL_OP_SUB_EXT 0x8796 -#define GL_OP_CROSS_PRODUCT_EXT 0x8797 -#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 -#define GL_OP_MOV_EXT 0x8799 -#define GL_OUTPUT_VERTEX_EXT 0x879A -#define GL_OUTPUT_COLOR0_EXT 0x879B -#define GL_OUTPUT_COLOR1_EXT 0x879C -#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D -#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E -#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F -#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 -#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 -#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 -#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 -#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 -#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 -#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 -#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 -#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 -#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 -#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA -#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB -#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC -#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD -#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE -#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF -#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 -#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 -#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 -#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 -#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 -#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 -#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 -#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 -#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 -#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 -#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA -#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB -#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC -#define GL_OUTPUT_FOG_EXT 0x87BD -#define GL_SCALAR_EXT 0x87BE -#define GL_VECTOR_EXT 0x87BF -#define GL_MATRIX_EXT 0x87C0 -#define GL_VARIANT_EXT 0x87C1 -#define GL_INVARIANT_EXT 0x87C2 -#define GL_LOCAL_CONSTANT_EXT 0x87C3 -#define GL_LOCAL_EXT 0x87C4 -#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 -#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 -#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 -#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 -#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD -#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE -#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF -#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 -#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 -#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 -#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 -#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 -#define GL_X_EXT 0x87D5 -#define GL_Y_EXT 0x87D6 -#define GL_Z_EXT 0x87D7 -#define GL_W_EXT 0x87D8 -#define GL_NEGATIVE_X_EXT 0x87D9 -#define GL_NEGATIVE_Y_EXT 0x87DA -#define GL_NEGATIVE_Z_EXT 0x87DB -#define GL_NEGATIVE_W_EXT 0x87DC -#define GL_ZERO_EXT 0x87DD -#define GL_ONE_EXT 0x87DE -#define GL_NEGATIVE_ONE_EXT 0x87DF -#define GL_NORMALIZED_RANGE_EXT 0x87E0 -#define GL_FULL_RANGE_EXT 0x87E1 -#define GL_CURRENT_VERTEX_EXT 0x87E2 -#define GL_MVP_MATRIX_EXT 0x87E3 -#define GL_VARIANT_VALUE_EXT 0x87E4 -#define GL_VARIANT_DATATYPE_EXT 0x87E5 -#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 -#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 -#define GL_VARIANT_ARRAY_EXT 0x87E8 -#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 -#define GL_INVARIANT_VALUE_EXT 0x87EA -#define GL_INVARIANT_DATATYPE_EXT 0x87EB -#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC -#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED -#ifndef GL_AMD_debug_output -#define GL_AMD_debug_output 1 -GLAPI int GLAD_GL_AMD_debug_output; -typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC)(GLenum category, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); -GLAPI PFNGLDEBUGMESSAGEENABLEAMDPROC glad_glDebugMessageEnableAMD; -#define glDebugMessageEnableAMD glad_glDebugMessageEnableAMD -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC)(GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar* buf); -GLAPI PFNGLDEBUGMESSAGEINSERTAMDPROC glad_glDebugMessageInsertAMD; -#define glDebugMessageInsertAMD glad_glDebugMessageInsertAMD -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC)(GLDEBUGPROCAMD callback, void* userParam); -GLAPI PFNGLDEBUGMESSAGECALLBACKAMDPROC glad_glDebugMessageCallbackAMD; -#define glDebugMessageCallbackAMD glad_glDebugMessageCallbackAMD -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC)(GLuint count, GLsizei bufsize, GLenum* categories, GLuint* severities, GLuint* ids, GLsizei* lengths, GLchar* message); -GLAPI PFNGLGETDEBUGMESSAGELOGAMDPROC glad_glGetDebugMessageLogAMD; -#define glGetDebugMessageLogAMD glad_glGetDebugMessageLogAMD -#endif -#ifndef GL_AMD_query_buffer_object -#define GL_AMD_query_buffer_object 1 -GLAPI int GLAD_GL_AMD_query_buffer_object; -#endif -#ifndef GL_ARB_ES2_compatibility -#define GL_ARB_ES2_compatibility 1 -GLAPI int GLAD_GL_ARB_ES2_compatibility; -typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC)(); -GLAPI PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; -#define glReleaseShaderCompiler glad_glReleaseShaderCompiler -typedef void (APIENTRYP PFNGLSHADERBINARYPROC)(GLsizei count, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length); -GLAPI PFNGLSHADERBINARYPROC glad_glShaderBinary; -#define glShaderBinary glad_glShaderBinary -typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC)(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision); -GLAPI PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; -#define glGetShaderPrecisionFormat glad_glGetShaderPrecisionFormat -typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC)(GLfloat n, GLfloat f); -GLAPI PFNGLDEPTHRANGEFPROC glad_glDepthRangef; -#define glDepthRangef glad_glDepthRangef -typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC)(GLfloat d); -GLAPI PFNGLCLEARDEPTHFPROC glad_glClearDepthf; -#define glClearDepthf glad_glClearDepthf -#endif -#ifndef GL_ARB_ES3_compatibility -#define GL_ARB_ES3_compatibility 1 -GLAPI int GLAD_GL_ARB_ES3_compatibility; -#endif -#ifndef GL_ARB_buffer_storage -#define GL_ARB_buffer_storage 1 -GLAPI int GLAD_GL_ARB_buffer_storage; -typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC)(GLenum target, GLsizeiptr size, const void* data, GLbitfield flags); -GLAPI PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; -#define glBufferStorage glad_glBufferStorage -#endif -#ifndef GL_ARB_compatibility -#define GL_ARB_compatibility 1 -GLAPI int GLAD_GL_ARB_compatibility; -#endif -#ifndef GL_ARB_compressed_texture_pixel_storage -#define GL_ARB_compressed_texture_pixel_storage 1 -GLAPI int GLAD_GL_ARB_compressed_texture_pixel_storage; -#endif -#ifndef GL_ARB_debug_output -#define GL_ARB_debug_output 1 -GLAPI int GLAD_GL_ARB_debug_output; -typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC)(GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint* ids, GLboolean enabled); -GLAPI PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB; -#define glDebugMessageControlARB glad_glDebugMessageControlARB -typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC)(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* buf); -GLAPI PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB; -#define glDebugMessageInsertARB glad_glDebugMessageInsertARB -typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC)(GLDEBUGPROCARB callback, const void* userParam); -GLAPI PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB; -#define glDebugMessageCallbackARB glad_glDebugMessageCallbackARB -typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC)(GLuint count, GLsizei bufSize, GLenum* sources, GLenum* types, GLuint* ids, GLenum* severities, GLsizei* lengths, GLchar* messageLog); -GLAPI PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB; -#define glGetDebugMessageLogARB glad_glGetDebugMessageLogARB -#endif -#ifndef GL_ARB_depth_buffer_float -#define GL_ARB_depth_buffer_float 1 -GLAPI int GLAD_GL_ARB_depth_buffer_float; -#endif -#ifndef GL_ARB_depth_clamp -#define GL_ARB_depth_clamp 1 -GLAPI int GLAD_GL_ARB_depth_clamp; -#endif -#ifndef GL_ARB_depth_texture -#define GL_ARB_depth_texture 1 -GLAPI int GLAD_GL_ARB_depth_texture; -#endif -#ifndef GL_ARB_draw_buffers -#define GL_ARB_draw_buffers 1 -GLAPI int GLAD_GL_ARB_draw_buffers; -typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC)(GLsizei n, const GLenum* bufs); -GLAPI PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB; -#define glDrawBuffersARB glad_glDrawBuffersARB -#endif -#ifndef GL_ARB_draw_buffers_blend -#define GL_ARB_draw_buffers_blend 1 -GLAPI int GLAD_GL_ARB_draw_buffers_blend; -typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC)(GLuint buf, GLenum mode); -GLAPI PFNGLBLENDEQUATIONIARBPROC glad_glBlendEquationiARB; -#define glBlendEquationiARB glad_glBlendEquationiARB -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC)(GLuint buf, GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEIARBPROC glad_glBlendEquationSeparateiARB; -#define glBlendEquationSeparateiARB glad_glBlendEquationSeparateiARB -typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC)(GLuint buf, GLenum src, GLenum dst); -GLAPI PFNGLBLENDFUNCIARBPROC glad_glBlendFunciARB; -#define glBlendFunciARB glad_glBlendFunciARB -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC)(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEIARBPROC glad_glBlendFuncSeparateiARB; -#define glBlendFuncSeparateiARB glad_glBlendFuncSeparateiARB -#endif -#ifndef GL_ARB_explicit_attrib_location -#define GL_ARB_explicit_attrib_location 1 -GLAPI int GLAD_GL_ARB_explicit_attrib_location; -#endif -#ifndef GL_ARB_explicit_uniform_location -#define GL_ARB_explicit_uniform_location 1 -GLAPI int GLAD_GL_ARB_explicit_uniform_location; -#endif -#ifndef GL_ARB_fragment_program -#define GL_ARB_fragment_program 1 -GLAPI int GLAD_GL_ARB_fragment_program; -typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const void* string); -GLAPI PFNGLPROGRAMSTRINGARBPROC glad_glProgramStringARB; -#define glProgramStringARB glad_glProgramStringARB -typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC)(GLenum target, GLuint program); -GLAPI PFNGLBINDPROGRAMARBPROC glad_glBindProgramARB; -#define glBindProgramARB glad_glBindProgramARB -typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint* programs); -GLAPI PFNGLDELETEPROGRAMSARBPROC glad_glDeleteProgramsARB; -#define glDeleteProgramsARB glad_glDeleteProgramsARB -typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC)(GLsizei n, GLuint* programs); -GLAPI PFNGLGENPROGRAMSARBPROC glad_glGenProgramsARB; -#define glGenProgramsARB glad_glGenProgramsARB -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLPROGRAMENVPARAMETER4DARBPROC glad_glProgramEnvParameter4dARB; -#define glProgramEnvParameter4dARB glad_glProgramEnvParameter4dARB -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble* params); -GLAPI PFNGLPROGRAMENVPARAMETER4DVARBPROC glad_glProgramEnvParameter4dvARB; -#define glProgramEnvParameter4dvARB glad_glProgramEnvParameter4dvARB -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLPROGRAMENVPARAMETER4FARBPROC glad_glProgramEnvParameter4fARB; -#define glProgramEnvParameter4fARB glad_glProgramEnvParameter4fARB -typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat* params); -GLAPI PFNGLPROGRAMENVPARAMETER4FVARBPROC glad_glProgramEnvParameter4fvARB; -#define glProgramEnvParameter4fvARB glad_glProgramEnvParameter4fvARB -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLPROGRAMLOCALPARAMETER4DARBPROC glad_glProgramLocalParameter4dARB; -#define glProgramLocalParameter4dARB glad_glProgramLocalParameter4dARB -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble* params); -GLAPI PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glad_glProgramLocalParameter4dvARB; -#define glProgramLocalParameter4dvARB glad_glProgramLocalParameter4dvARB -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLPROGRAMLOCALPARAMETER4FARBPROC glad_glProgramLocalParameter4fARB; -#define glProgramLocalParameter4fARB glad_glProgramLocalParameter4fARB -typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat* params); -GLAPI PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glad_glProgramLocalParameter4fvARB; -#define glProgramLocalParameter4fvARB glad_glProgramLocalParameter4fvARB -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble* params); -GLAPI PFNGLGETPROGRAMENVPARAMETERDVARBPROC glad_glGetProgramEnvParameterdvARB; -#define glGetProgramEnvParameterdvARB glad_glGetProgramEnvParameterdvARB -typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat* params); -GLAPI PFNGLGETPROGRAMENVPARAMETERFVARBPROC glad_glGetProgramEnvParameterfvARB; -#define glGetProgramEnvParameterfvARB glad_glGetProgramEnvParameterfvARB -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble* params); -GLAPI PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glad_glGetProgramLocalParameterdvARB; -#define glGetProgramLocalParameterdvARB glad_glGetProgramLocalParameterdvARB -typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat* params); -GLAPI PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glad_glGetProgramLocalParameterfvARB; -#define glGetProgramLocalParameterfvARB glad_glGetProgramLocalParameterfvARB -typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint* params); -GLAPI PFNGLGETPROGRAMIVARBPROC glad_glGetProgramivARB; -#define glGetProgramivARB glad_glGetProgramivARB -typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, void* string); -GLAPI PFNGLGETPROGRAMSTRINGARBPROC glad_glGetProgramStringARB; -#define glGetProgramStringARB glad_glGetProgramStringARB -typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC)(GLuint program); -GLAPI PFNGLISPROGRAMARBPROC glad_glIsProgramARB; -#define glIsProgramARB glad_glIsProgramARB -#endif -#ifndef GL_ARB_fragment_shader -#define GL_ARB_fragment_shader 1 -GLAPI int GLAD_GL_ARB_fragment_shader; -#endif -#ifndef GL_ARB_framebuffer_object -#define GL_ARB_framebuffer_object 1 -GLAPI int GLAD_GL_ARB_framebuffer_object; -#endif -#ifndef GL_ARB_framebuffer_sRGB -#define GL_ARB_framebuffer_sRGB 1 -GLAPI int GLAD_GL_ARB_framebuffer_sRGB; -#endif -#ifndef GL_ARB_multisample -#define GL_ARB_multisample 1 -GLAPI int GLAD_GL_ARB_multisample; -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC)(GLfloat value, GLboolean invert); -GLAPI PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB; -#define glSampleCoverageARB glad_glSampleCoverageARB -#endif -#ifndef GL_ARB_sample_locations -#define GL_ARB_sample_locations 1 -GLAPI int GLAD_GL_ARB_sample_locations; -typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLenum target, GLuint start, GLsizei count, const GLfloat* v); -GLAPI PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB; -#define glFramebufferSampleLocationsfvARB glad_glFramebufferSampleLocationsfvARB -typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)(GLuint framebuffer, GLuint start, GLsizei count, const GLfloat* v); -GLAPI PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glNamedFramebufferSampleLocationsfvARB; -#define glNamedFramebufferSampleLocationsfvARB glad_glNamedFramebufferSampleLocationsfvARB -typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC)(); -GLAPI PFNGLEVALUATEDEPTHVALUESARBPROC glad_glEvaluateDepthValuesARB; -#define glEvaluateDepthValuesARB glad_glEvaluateDepthValuesARB -#endif -#ifndef GL_ARB_texture_compression -#define GL_ARB_texture_compression 1 -GLAPI int GLAD_GL_ARB_texture_compression; -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glad_glCompressedTexImage3DARB; -#define glCompressedTexImage3DARB glad_glCompressedTexImage3DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glad_glCompressedTexImage2DARB; -#define glCompressedTexImage2DARB glad_glCompressedTexImage2DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glad_glCompressedTexImage1DARB; -#define glCompressedTexImage1DARB glad_glCompressedTexImage1DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glad_glCompressedTexSubImage3DARB; -#define glCompressedTexSubImage3DARB glad_glCompressedTexSubImage3DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glad_glCompressedTexSubImage2DARB; -#define glCompressedTexSubImage2DARB glad_glCompressedTexSubImage2DARB -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void* data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glad_glCompressedTexSubImage1DARB; -#define glCompressedTexSubImage1DARB glad_glCompressedTexSubImage1DARB -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)(GLenum target, GLint level, void* img); -GLAPI PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glad_glGetCompressedTexImageARB; -#define glGetCompressedTexImageARB glad_glGetCompressedTexImageARB -#endif -#ifndef GL_ARB_texture_float -#define GL_ARB_texture_float 1 -GLAPI int GLAD_GL_ARB_texture_float; -#endif -#ifndef GL_ARB_texture_multisample -#define GL_ARB_texture_multisample 1 -GLAPI int GLAD_GL_ARB_texture_multisample; -#endif -#ifndef GL_ARB_texture_non_power_of_two -#define GL_ARB_texture_non_power_of_two 1 -GLAPI int GLAD_GL_ARB_texture_non_power_of_two; -#endif -#ifndef GL_ARB_texture_rg -#define GL_ARB_texture_rg 1 -GLAPI int GLAD_GL_ARB_texture_rg; -#endif -#ifndef GL_ARB_texture_swizzle -#define GL_ARB_texture_swizzle 1 -GLAPI int GLAD_GL_ARB_texture_swizzle; -#endif -#ifndef GL_ARB_uniform_buffer_object -#define GL_ARB_uniform_buffer_object 1 -GLAPI int GLAD_GL_ARB_uniform_buffer_object; -#endif -#ifndef GL_ARB_vertex_array_object -#define GL_ARB_vertex_array_object 1 -GLAPI int GLAD_GL_ARB_vertex_array_object; -#endif -#ifndef GL_ARB_vertex_attrib_binding -#define GL_ARB_vertex_attrib_binding 1 -GLAPI int GLAD_GL_ARB_vertex_attrib_binding; -typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); -GLAPI PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; -#define glBindVertexBuffer glad_glBindVertexBuffer -typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); -GLAPI PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; -#define glVertexAttribFormat glad_glVertexAttribFormat -typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; -#define glVertexAttribIFormat glad_glVertexAttribIFormat -typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC)(GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); -GLAPI PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; -#define glVertexAttribLFormat glad_glVertexAttribLFormat -typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC)(GLuint attribindex, GLuint bindingindex); -GLAPI PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; -#define glVertexAttribBinding glad_glVertexAttribBinding -typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC)(GLuint bindingindex, GLuint divisor); -GLAPI PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; -#define glVertexBindingDivisor glad_glVertexBindingDivisor -#endif -#ifndef GL_ARB_vertex_buffer_object -#define GL_ARB_vertex_buffer_object 1 -GLAPI int GLAD_GL_ARB_vertex_buffer_object; -typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC)(GLenum target, GLuint buffer); -GLAPI PFNGLBINDBUFFERARBPROC glad_glBindBufferARB; -#define glBindBufferARB glad_glBindBufferARB -typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC)(GLsizei n, const GLuint* buffers); -GLAPI PFNGLDELETEBUFFERSARBPROC glad_glDeleteBuffersARB; -#define glDeleteBuffersARB glad_glDeleteBuffersARB -typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC)(GLsizei n, GLuint* buffers); -GLAPI PFNGLGENBUFFERSARBPROC glad_glGenBuffersARB; -#define glGenBuffersARB glad_glGenBuffersARB -typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC)(GLuint buffer); -GLAPI PFNGLISBUFFERARBPROC glad_glIsBufferARB; -#define glIsBufferARB glad_glIsBufferARB -typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC)(GLenum target, GLsizeiptrARB size, const void* data, GLenum usage); -GLAPI PFNGLBUFFERDATAARBPROC glad_glBufferDataARB; -#define glBufferDataARB glad_glBufferDataARB -typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void* data); -GLAPI PFNGLBUFFERSUBDATAARBPROC glad_glBufferSubDataARB; -#define glBufferSubDataARB glad_glBufferSubDataARB -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptrARB offset, GLsizeiptrARB size, void* data); -GLAPI PFNGLGETBUFFERSUBDATAARBPROC glad_glGetBufferSubDataARB; -#define glGetBufferSubDataARB glad_glGetBufferSubDataARB -typedef void* (APIENTRYP PFNGLMAPBUFFERARBPROC)(GLenum target, GLenum access); -GLAPI PFNGLMAPBUFFERARBPROC glad_glMapBufferARB; -#define glMapBufferARB glad_glMapBufferARB -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC)(GLenum target); -GLAPI PFNGLUNMAPBUFFERARBPROC glad_glUnmapBufferARB; -#define glUnmapBufferARB glad_glUnmapBufferARB -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint* params); -GLAPI PFNGLGETBUFFERPARAMETERIVARBPROC glad_glGetBufferParameterivARB; -#define glGetBufferParameterivARB glad_glGetBufferParameterivARB -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, void** params); -GLAPI PFNGLGETBUFFERPOINTERVARBPROC glad_glGetBufferPointervARB; -#define glGetBufferPointervARB glad_glGetBufferPointervARB -#endif -#ifndef GL_ARB_vertex_program -#define GL_ARB_vertex_program 1 -GLAPI int GLAD_GL_ARB_vertex_program; -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x); -GLAPI PFNGLVERTEXATTRIB1DARBPROC glad_glVertexAttrib1dARB; -#define glVertexAttrib1dARB glad_glVertexAttrib1dARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble* v); -GLAPI PFNGLVERTEXATTRIB1DVARBPROC glad_glVertexAttrib1dvARB; -#define glVertexAttrib1dvARB glad_glVertexAttrib1dvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x); -GLAPI PFNGLVERTEXATTRIB1FARBPROC glad_glVertexAttrib1fARB; -#define glVertexAttrib1fARB glad_glVertexAttrib1fARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat* v); -GLAPI PFNGLVERTEXATTRIB1FVARBPROC glad_glVertexAttrib1fvARB; -#define glVertexAttrib1fvARB glad_glVertexAttrib1fvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x); -GLAPI PFNGLVERTEXATTRIB1SARBPROC glad_glVertexAttrib1sARB; -#define glVertexAttrib1sARB glad_glVertexAttrib1sARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB1SVARBPROC glad_glVertexAttrib1svARB; -#define glVertexAttrib1svARB glad_glVertexAttrib1svARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y); -GLAPI PFNGLVERTEXATTRIB2DARBPROC glad_glVertexAttrib2dARB; -#define glVertexAttrib2dARB glad_glVertexAttrib2dARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble* v); -GLAPI PFNGLVERTEXATTRIB2DVARBPROC glad_glVertexAttrib2dvARB; -#define glVertexAttrib2dvARB glad_glVertexAttrib2dvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y); -GLAPI PFNGLVERTEXATTRIB2FARBPROC glad_glVertexAttrib2fARB; -#define glVertexAttrib2fARB glad_glVertexAttrib2fARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat* v); -GLAPI PFNGLVERTEXATTRIB2FVARBPROC glad_glVertexAttrib2fvARB; -#define glVertexAttrib2fvARB glad_glVertexAttrib2fvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y); -GLAPI PFNGLVERTEXATTRIB2SARBPROC glad_glVertexAttrib2sARB; -#define glVertexAttrib2sARB glad_glVertexAttrib2sARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB2SVARBPROC glad_glVertexAttrib2svARB; -#define glVertexAttrib2svARB glad_glVertexAttrib2svARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEXATTRIB3DARBPROC glad_glVertexAttrib3dARB; -#define glVertexAttrib3dARB glad_glVertexAttrib3dARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble* v); -GLAPI PFNGLVERTEXATTRIB3DVARBPROC glad_glVertexAttrib3dvARB; -#define glVertexAttrib3dvARB glad_glVertexAttrib3dvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLVERTEXATTRIB3FARBPROC glad_glVertexAttrib3fARB; -#define glVertexAttrib3fARB glad_glVertexAttrib3fARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat* v); -GLAPI PFNGLVERTEXATTRIB3FVARBPROC glad_glVertexAttrib3fvARB; -#define glVertexAttrib3fvARB glad_glVertexAttrib3fvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI PFNGLVERTEXATTRIB3SARBPROC glad_glVertexAttrib3sARB; -#define glVertexAttrib3sARB glad_glVertexAttrib3sARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB3SVARBPROC glad_glVertexAttrib3svARB; -#define glVertexAttrib3svARB glad_glVertexAttrib3svARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte* v); -GLAPI PFNGLVERTEXATTRIB4NBVARBPROC glad_glVertexAttrib4NbvARB; -#define glVertexAttrib4NbvARB glad_glVertexAttrib4NbvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint* v); -GLAPI PFNGLVERTEXATTRIB4NIVARBPROC glad_glVertexAttrib4NivARB; -#define glVertexAttrib4NivARB glad_glVertexAttrib4NivARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB4NSVARBPROC glad_glVertexAttrib4NsvARB; -#define glVertexAttrib4NsvARB glad_glVertexAttrib4NsvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI PFNGLVERTEXATTRIB4NUBARBPROC glad_glVertexAttrib4NubARB; -#define glVertexAttrib4NubARB glad_glVertexAttrib4NubARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte* v); -GLAPI PFNGLVERTEXATTRIB4NUBVARBPROC glad_glVertexAttrib4NubvARB; -#define glVertexAttrib4NubvARB glad_glVertexAttrib4NubvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint* v); -GLAPI PFNGLVERTEXATTRIB4NUIVARBPROC glad_glVertexAttrib4NuivARB; -#define glVertexAttrib4NuivARB glad_glVertexAttrib4NuivARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort* v); -GLAPI PFNGLVERTEXATTRIB4NUSVARBPROC glad_glVertexAttrib4NusvARB; -#define glVertexAttrib4NusvARB glad_glVertexAttrib4NusvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte* v); -GLAPI PFNGLVERTEXATTRIB4BVARBPROC glad_glVertexAttrib4bvARB; -#define glVertexAttrib4bvARB glad_glVertexAttrib4bvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEXATTRIB4DARBPROC glad_glVertexAttrib4dARB; -#define glVertexAttrib4dARB glad_glVertexAttrib4dARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble* v); -GLAPI PFNGLVERTEXATTRIB4DVARBPROC glad_glVertexAttrib4dvARB; -#define glVertexAttrib4dvARB glad_glVertexAttrib4dvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLVERTEXATTRIB4FARBPROC glad_glVertexAttrib4fARB; -#define glVertexAttrib4fARB glad_glVertexAttrib4fARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat* v); -GLAPI PFNGLVERTEXATTRIB4FVARBPROC glad_glVertexAttrib4fvARB; -#define glVertexAttrib4fvARB glad_glVertexAttrib4fvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint* v); -GLAPI PFNGLVERTEXATTRIB4IVARBPROC glad_glVertexAttrib4ivARB; -#define glVertexAttrib4ivARB glad_glVertexAttrib4ivARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLVERTEXATTRIB4SARBPROC glad_glVertexAttrib4sARB; -#define glVertexAttrib4sARB glad_glVertexAttrib4sARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort* v); -GLAPI PFNGLVERTEXATTRIB4SVARBPROC glad_glVertexAttrib4svARB; -#define glVertexAttrib4svARB glad_glVertexAttrib4svARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte* v); -GLAPI PFNGLVERTEXATTRIB4UBVARBPROC glad_glVertexAttrib4ubvARB; -#define glVertexAttrib4ubvARB glad_glVertexAttrib4ubvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint* v); -GLAPI PFNGLVERTEXATTRIB4UIVARBPROC glad_glVertexAttrib4uivARB; -#define glVertexAttrib4uivARB glad_glVertexAttrib4uivARB -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort* v); -GLAPI PFNGLVERTEXATTRIB4USVARBPROC glad_glVertexAttrib4usvARB; -#define glVertexAttrib4usvARB glad_glVertexAttrib4usvARB -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer); -GLAPI PFNGLVERTEXATTRIBPOINTERARBPROC glad_glVertexAttribPointerARB; -#define glVertexAttribPointerARB glad_glVertexAttribPointerARB -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); -GLAPI PFNGLENABLEVERTEXATTRIBARRAYARBPROC glad_glEnableVertexAttribArrayARB; -#define glEnableVertexAttribArrayARB glad_glEnableVertexAttribArrayARB -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index); -GLAPI PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glad_glDisableVertexAttribArrayARB; -#define glDisableVertexAttribArrayARB glad_glDisableVertexAttribArrayARB -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble* params); -GLAPI PFNGLGETVERTEXATTRIBDVARBPROC glad_glGetVertexAttribdvARB; -#define glGetVertexAttribdvARB glad_glGetVertexAttribdvARB -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat* params); -GLAPI PFNGLGETVERTEXATTRIBFVARBPROC glad_glGetVertexAttribfvARB; -#define glGetVertexAttribfvARB glad_glGetVertexAttribfvARB -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint* params); -GLAPI PFNGLGETVERTEXATTRIBIVARBPROC glad_glGetVertexAttribivARB; -#define glGetVertexAttribivARB glad_glGetVertexAttribivARB -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, void** pointer); -GLAPI PFNGLGETVERTEXATTRIBPOINTERVARBPROC glad_glGetVertexAttribPointervARB; -#define glGetVertexAttribPointervARB glad_glGetVertexAttribPointervARB -#endif -#ifndef GL_ARB_vertex_shader -#define GL_ARB_vertex_shader 1 -GLAPI int GLAD_GL_ARB_vertex_shader; -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj, GLuint index, const GLcharARB* name); -GLAPI PFNGLBINDATTRIBLOCATIONARBPROC glad_glBindAttribLocationARB; -#define glBindAttribLocationARB glad_glBindAttribLocationARB -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC)(GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei* length, GLint* size, GLenum* type, GLcharARB* name); -GLAPI PFNGLGETACTIVEATTRIBARBPROC glad_glGetActiveAttribARB; -#define glGetActiveAttribARB glad_glGetActiveAttribARB -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB* name); -GLAPI PFNGLGETATTRIBLOCATIONARBPROC glad_glGetAttribLocationARB; -#define glGetAttribLocationARB glad_glGetAttribLocationARB -#endif -#ifndef GL_ATI_element_array -#define GL_ATI_element_array 1 -GLAPI int GLAD_GL_ATI_element_array; -typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC)(GLenum type, const void* pointer); -GLAPI PFNGLELEMENTPOINTERATIPROC glad_glElementPointerATI; -#define glElementPointerATI glad_glElementPointerATI -typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC)(GLenum mode, GLsizei count); -GLAPI PFNGLDRAWELEMENTARRAYATIPROC glad_glDrawElementArrayATI; -#define glDrawElementArrayATI glad_glDrawElementArrayATI -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count); -GLAPI PFNGLDRAWRANGEELEMENTARRAYATIPROC glad_glDrawRangeElementArrayATI; -#define glDrawRangeElementArrayATI glad_glDrawRangeElementArrayATI -#endif -#ifndef GL_ATI_fragment_shader -#define GL_ATI_fragment_shader 1 -GLAPI int GLAD_GL_ATI_fragment_shader; -typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC)(GLuint range); -GLAPI PFNGLGENFRAGMENTSHADERSATIPROC glad_glGenFragmentShadersATI; -#define glGenFragmentShadersATI glad_glGenFragmentShadersATI -typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC)(GLuint id); -GLAPI PFNGLBINDFRAGMENTSHADERATIPROC glad_glBindFragmentShaderATI; -#define glBindFragmentShaderATI glad_glBindFragmentShaderATI -typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC)(GLuint id); -GLAPI PFNGLDELETEFRAGMENTSHADERATIPROC glad_glDeleteFragmentShaderATI; -#define glDeleteFragmentShaderATI glad_glDeleteFragmentShaderATI -typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC)(); -GLAPI PFNGLBEGINFRAGMENTSHADERATIPROC glad_glBeginFragmentShaderATI; -#define glBeginFragmentShaderATI glad_glBeginFragmentShaderATI -typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC)(); -GLAPI PFNGLENDFRAGMENTSHADERATIPROC glad_glEndFragmentShaderATI; -#define glEndFragmentShaderATI glad_glEndFragmentShaderATI -typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC)(GLuint dst, GLuint coord, GLenum swizzle); -GLAPI PFNGLPASSTEXCOORDATIPROC glad_glPassTexCoordATI; -#define glPassTexCoordATI glad_glPassTexCoordATI -typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC)(GLuint dst, GLuint interp, GLenum swizzle); -GLAPI PFNGLSAMPLEMAPATIPROC glad_glSampleMapATI; -#define glSampleMapATI glad_glSampleMapATI -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI PFNGLCOLORFRAGMENTOP1ATIPROC glad_glColorFragmentOp1ATI; -#define glColorFragmentOp1ATI glad_glColorFragmentOp1ATI -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI PFNGLCOLORFRAGMENTOP2ATIPROC glad_glColorFragmentOp2ATI; -#define glColorFragmentOp2ATI glad_glColorFragmentOp2ATI -typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI PFNGLCOLORFRAGMENTOP3ATIPROC glad_glColorFragmentOp3ATI; -#define glColorFragmentOp3ATI glad_glColorFragmentOp3ATI -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); -GLAPI PFNGLALPHAFRAGMENTOP1ATIPROC glad_glAlphaFragmentOp1ATI; -#define glAlphaFragmentOp1ATI glad_glAlphaFragmentOp1ATI -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); -GLAPI PFNGLALPHAFRAGMENTOP2ATIPROC glad_glAlphaFragmentOp2ATI; -#define glAlphaFragmentOp2ATI glad_glAlphaFragmentOp2ATI -typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC)(GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); -GLAPI PFNGLALPHAFRAGMENTOP3ATIPROC glad_glAlphaFragmentOp3ATI; -#define glAlphaFragmentOp3ATI glad_glAlphaFragmentOp3ATI -typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)(GLuint dst, const GLfloat* value); -GLAPI PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glad_glSetFragmentShaderConstantATI; -#define glSetFragmentShaderConstantATI glad_glSetFragmentShaderConstantATI -#endif -#ifndef GL_ATI_vertex_array_object -#define GL_ATI_vertex_array_object 1 -GLAPI int GLAD_GL_ATI_vertex_array_object; -typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC)(GLsizei size, const void* pointer, GLenum usage); -GLAPI PFNGLNEWOBJECTBUFFERATIPROC glad_glNewObjectBufferATI; -#define glNewObjectBufferATI glad_glNewObjectBufferATI -typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC)(GLuint buffer); -GLAPI PFNGLISOBJECTBUFFERATIPROC glad_glIsObjectBufferATI; -#define glIsObjectBufferATI glad_glIsObjectBufferATI -typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC)(GLuint buffer, GLuint offset, GLsizei size, const void* pointer, GLenum preserve); -GLAPI PFNGLUPDATEOBJECTBUFFERATIPROC glad_glUpdateObjectBufferATI; -#define glUpdateObjectBufferATI glad_glUpdateObjectBufferATI -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC)(GLuint buffer, GLenum pname, GLfloat* params); -GLAPI PFNGLGETOBJECTBUFFERFVATIPROC glad_glGetObjectBufferfvATI; -#define glGetObjectBufferfvATI glad_glGetObjectBufferfvATI -typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC)(GLuint buffer, GLenum pname, GLint* params); -GLAPI PFNGLGETOBJECTBUFFERIVATIPROC glad_glGetObjectBufferivATI; -#define glGetObjectBufferivATI glad_glGetObjectBufferivATI -typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC)(GLuint buffer); -GLAPI PFNGLFREEOBJECTBUFFERATIPROC glad_glFreeObjectBufferATI; -#define glFreeObjectBufferATI glad_glFreeObjectBufferATI -typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC)(GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI PFNGLARRAYOBJECTATIPROC glad_glArrayObjectATI; -#define glArrayObjectATI glad_glArrayObjectATI -typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC)(GLenum array, GLenum pname, GLfloat* params); -GLAPI PFNGLGETARRAYOBJECTFVATIPROC glad_glGetArrayObjectfvATI; -#define glGetArrayObjectfvATI glad_glGetArrayObjectfvATI -typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC)(GLenum array, GLenum pname, GLint* params); -GLAPI PFNGLGETARRAYOBJECTIVATIPROC glad_glGetArrayObjectivATI; -#define glGetArrayObjectivATI glad_glGetArrayObjectivATI -typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC)(GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); -GLAPI PFNGLVARIANTARRAYOBJECTATIPROC glad_glVariantArrayObjectATI; -#define glVariantArrayObjectATI glad_glVariantArrayObjectATI -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC)(GLuint id, GLenum pname, GLfloat* params); -GLAPI PFNGLGETVARIANTARRAYOBJECTFVATIPROC glad_glGetVariantArrayObjectfvATI; -#define glGetVariantArrayObjectfvATI glad_glGetVariantArrayObjectfvATI -typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC)(GLuint id, GLenum pname, GLint* params); -GLAPI PFNGLGETVARIANTARRAYOBJECTIVATIPROC glad_glGetVariantArrayObjectivATI; -#define glGetVariantArrayObjectivATI glad_glGetVariantArrayObjectivATI -#endif -#ifndef GL_EXT_blend_color -#define GL_EXT_blend_color 1 -GLAPI int GLAD_GL_EXT_blend_color; -typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLBLENDCOLOREXTPROC glad_glBlendColorEXT; -#define glBlendColorEXT glad_glBlendColorEXT -#endif -#ifndef GL_EXT_blend_equation_separate -#define GL_EXT_blend_equation_separate 1 -GLAPI int GLAD_GL_EXT_blend_equation_separate; -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEEXTPROC glad_glBlendEquationSeparateEXT; -#define glBlendEquationSeparateEXT glad_glBlendEquationSeparateEXT -#endif -#ifndef GL_EXT_blend_func_separate -#define GL_EXT_blend_func_separate 1 -GLAPI int GLAD_GL_EXT_blend_func_separate; -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEEXTPROC glad_glBlendFuncSeparateEXT; -#define glBlendFuncSeparateEXT glad_glBlendFuncSeparateEXT -#endif -#ifndef GL_EXT_debug_marker -#define GL_EXT_debug_marker 1 -GLAPI int GLAD_GL_EXT_debug_marker; -typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC)(GLsizei length, const GLchar *marker); -GLAPI PFNGLINSERTEVENTMARKEREXTPROC glad_glInsertEventMarkerEXT; -#define glInsertEventMarkerEXT glad_glInsertEventMarkerEXT -typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC)(GLsizei length, const GLchar *marker); -GLAPI PFNGLPUSHGROUPMARKEREXTPROC glad_glPushGroupMarkerEXT; -#define glPushGroupMarkerEXT glad_glPushGroupMarkerEXT -typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC)(void); -GLAPI PFNGLPOPGROUPMARKEREXTPROC glad_glPopGroupMarkerEXT; -#define glPopGroupMarkerEXT glad_glPopGroupMarkerEXT -#endif -#ifndef GL_EXT_framebuffer_blit -#define GL_EXT_framebuffer_blit 1 -GLAPI int GLAD_GL_EXT_framebuffer_blit; -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLBLITFRAMEBUFFEREXTPROC glad_glBlitFramebufferEXT; -#define glBlitFramebufferEXT glad_glBlitFramebufferEXT -#endif -#ifndef GL_EXT_framebuffer_multisample -#define GL_EXT_framebuffer_multisample 1 -GLAPI int GLAD_GL_EXT_framebuffer_multisample; -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT; -#define glRenderbufferStorageMultisampleEXT glad_glRenderbufferStorageMultisampleEXT -#endif -#ifndef GL_EXT_framebuffer_multisample_blit_scaled -#define GL_EXT_framebuffer_multisample_blit_scaled 1 -GLAPI int GLAD_GL_EXT_framebuffer_multisample_blit_scaled; -#endif -#ifndef GL_EXT_framebuffer_object -#define GL_EXT_framebuffer_object 1 -GLAPI int GLAD_GL_EXT_framebuffer_object; -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer); -GLAPI PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT; -#define glIsRenderbufferEXT glad_glIsRenderbufferEXT -typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer); -GLAPI PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT; -#define glBindRenderbufferEXT glad_glBindRenderbufferEXT -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint* renderbuffers); -GLAPI PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT; -#define glDeleteRenderbuffersEXT glad_glDeleteRenderbuffersEXT -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint* renderbuffers); -GLAPI PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT; -#define glGenRenderbuffersEXT glad_glGenRenderbuffersEXT -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT; -#define glRenderbufferStorageEXT glad_glRenderbufferStorageEXT -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint* params); -GLAPI PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT; -#define glGetRenderbufferParameterivEXT glad_glGetRenderbufferParameterivEXT -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer); -GLAPI PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT; -#define glIsFramebufferEXT glad_glIsFramebufferEXT -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer); -GLAPI PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT; -#define glBindFramebufferEXT glad_glBindFramebufferEXT -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint* framebuffers); -GLAPI PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT; -#define glDeleteFramebuffersEXT glad_glDeleteFramebuffersEXT -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint* framebuffers); -GLAPI PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT; -#define glGenFramebuffersEXT glad_glGenFramebuffersEXT -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target); -GLAPI PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT; -#define glCheckFramebufferStatusEXT glad_glCheckFramebufferStatusEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT; -#define glFramebufferTexture1DEXT glad_glFramebufferTexture1DEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT; -#define glFramebufferTexture2DEXT glad_glFramebufferTexture2DEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT; -#define glFramebufferTexture3DEXT glad_glFramebufferTexture3DEXT -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT; -#define glFramebufferRenderbufferEXT glad_glFramebufferRenderbufferEXT -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, GLenum attachment, GLenum pname, GLint* params); -GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT; -#define glGetFramebufferAttachmentParameterivEXT glad_glGetFramebufferAttachmentParameterivEXT -typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC)(GLenum target); -GLAPI PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT; -#define glGenerateMipmapEXT glad_glGenerateMipmapEXT -#endif -#ifndef GL_EXT_framebuffer_sRGB -#define GL_EXT_framebuffer_sRGB 1 -GLAPI int GLAD_GL_EXT_framebuffer_sRGB; -#endif -#ifndef GL_EXT_index_array_formats -#define GL_EXT_index_array_formats 1 -GLAPI int GLAD_GL_EXT_index_array_formats; -#endif -#ifndef GL_EXT_texture -#define GL_EXT_texture 1 -GLAPI int GLAD_GL_EXT_texture; -#endif -#ifndef GL_EXT_texture_compression_s3tc -#define GL_EXT_texture_compression_s3tc 1 -GLAPI int GLAD_GL_EXT_texture_compression_s3tc; -#endif -#ifndef GL_EXT_texture_sRGB -#define GL_EXT_texture_sRGB 1 -GLAPI int GLAD_GL_EXT_texture_sRGB; -#endif -#ifndef GL_EXT_texture_swizzle -#define GL_EXT_texture_swizzle 1 -GLAPI int GLAD_GL_EXT_texture_swizzle; -#endif -#ifndef GL_EXT_vertex_array -#define GL_EXT_vertex_array 1 -GLAPI int GLAD_GL_EXT_vertex_array; -typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC)(GLint i); -GLAPI PFNGLARRAYELEMENTEXTPROC glad_glArrayElementEXT; -#define glArrayElementEXT glad_glArrayElementEXT -typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); -GLAPI PFNGLCOLORPOINTEREXTPROC glad_glColorPointerEXT; -#define glColorPointerEXT glad_glColorPointerEXT -typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC)(GLenum mode, GLint first, GLsizei count); -GLAPI PFNGLDRAWARRAYSEXTPROC glad_glDrawArraysEXT; -#define glDrawArraysEXT glad_glDrawArraysEXT -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC)(GLsizei stride, GLsizei count, const GLboolean* pointer); -GLAPI PFNGLEDGEFLAGPOINTEREXTPROC glad_glEdgeFlagPointerEXT; -#define glEdgeFlagPointerEXT glad_glEdgeFlagPointerEXT -typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC)(GLenum pname, void** params); -GLAPI PFNGLGETPOINTERVEXTPROC glad_glGetPointervEXT; -#define glGetPointervEXT glad_glGetPointervEXT -typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void* pointer); -GLAPI PFNGLINDEXPOINTEREXTPROC glad_glIndexPointerEXT; -#define glIndexPointerEXT glad_glIndexPointerEXT -typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC)(GLenum type, GLsizei stride, GLsizei count, const void* pointer); -GLAPI PFNGLNORMALPOINTEREXTPROC glad_glNormalPointerEXT; -#define glNormalPointerEXT glad_glNormalPointerEXT -typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); -GLAPI PFNGLTEXCOORDPOINTEREXTPROC glad_glTexCoordPointerEXT; -#define glTexCoordPointerEXT glad_glTexCoordPointerEXT -typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC)(GLint size, GLenum type, GLsizei stride, GLsizei count, const void* pointer); -GLAPI PFNGLVERTEXPOINTEREXTPROC glad_glVertexPointerEXT; -#define glVertexPointerEXT glad_glVertexPointerEXT -#endif -#ifndef GL_EXT_vertex_shader -#define GL_EXT_vertex_shader 1 -GLAPI int GLAD_GL_EXT_vertex_shader; -typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC)(); -GLAPI PFNGLBEGINVERTEXSHADEREXTPROC glad_glBeginVertexShaderEXT; -#define glBeginVertexShaderEXT glad_glBeginVertexShaderEXT -typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC)(); -GLAPI PFNGLENDVERTEXSHADEREXTPROC glad_glEndVertexShaderEXT; -#define glEndVertexShaderEXT glad_glEndVertexShaderEXT -typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC)(GLuint id); -GLAPI PFNGLBINDVERTEXSHADEREXTPROC glad_glBindVertexShaderEXT; -#define glBindVertexShaderEXT glad_glBindVertexShaderEXT -typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC)(GLuint range); -GLAPI PFNGLGENVERTEXSHADERSEXTPROC glad_glGenVertexShadersEXT; -#define glGenVertexShadersEXT glad_glGenVertexShadersEXT -typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC)(GLuint id); -GLAPI PFNGLDELETEVERTEXSHADEREXTPROC glad_glDeleteVertexShaderEXT; -#define glDeleteVertexShaderEXT glad_glDeleteVertexShaderEXT -typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC)(GLenum op, GLuint res, GLuint arg1); -GLAPI PFNGLSHADEROP1EXTPROC glad_glShaderOp1EXT; -#define glShaderOp1EXT glad_glShaderOp1EXT -typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2); -GLAPI PFNGLSHADEROP2EXTPROC glad_glShaderOp2EXT; -#define glShaderOp2EXT glad_glShaderOp2EXT -typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC)(GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); -GLAPI PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT; -#define glShaderOp3EXT glad_glShaderOp3EXT -typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI PFNGLSWIZZLEEXTPROC glad_glSwizzleEXT; -#define glSwizzleEXT glad_glSwizzleEXT -typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC)(GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); -GLAPI PFNGLWRITEMASKEXTPROC glad_glWriteMaskEXT; -#define glWriteMaskEXT glad_glWriteMaskEXT -typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); -GLAPI PFNGLINSERTCOMPONENTEXTPROC glad_glInsertComponentEXT; -#define glInsertComponentEXT glad_glInsertComponentEXT -typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC)(GLuint res, GLuint src, GLuint num); -GLAPI PFNGLEXTRACTCOMPONENTEXTPROC glad_glExtractComponentEXT; -#define glExtractComponentEXT glad_glExtractComponentEXT -typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC)(GLenum datatype, GLenum storagetype, GLenum range, GLuint components); -GLAPI PFNGLGENSYMBOLSEXTPROC glad_glGenSymbolsEXT; -#define glGenSymbolsEXT glad_glGenSymbolsEXT -typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC)(GLuint id, GLenum type, const void* addr); -GLAPI PFNGLSETINVARIANTEXTPROC glad_glSetInvariantEXT; -#define glSetInvariantEXT glad_glSetInvariantEXT -typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC)(GLuint id, GLenum type, const void* addr); -GLAPI PFNGLSETLOCALCONSTANTEXTPROC glad_glSetLocalConstantEXT; -#define glSetLocalConstantEXT glad_glSetLocalConstantEXT -typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC)(GLuint id, const GLbyte* addr); -GLAPI PFNGLVARIANTBVEXTPROC glad_glVariantbvEXT; -#define glVariantbvEXT glad_glVariantbvEXT -typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC)(GLuint id, const GLshort* addr); -GLAPI PFNGLVARIANTSVEXTPROC glad_glVariantsvEXT; -#define glVariantsvEXT glad_glVariantsvEXT -typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC)(GLuint id, const GLint* addr); -GLAPI PFNGLVARIANTIVEXTPROC glad_glVariantivEXT; -#define glVariantivEXT glad_glVariantivEXT -typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC)(GLuint id, const GLfloat* addr); -GLAPI PFNGLVARIANTFVEXTPROC glad_glVariantfvEXT; -#define glVariantfvEXT glad_glVariantfvEXT -typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC)(GLuint id, const GLdouble* addr); -GLAPI PFNGLVARIANTDVEXTPROC glad_glVariantdvEXT; -#define glVariantdvEXT glad_glVariantdvEXT -typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC)(GLuint id, const GLubyte* addr); -GLAPI PFNGLVARIANTUBVEXTPROC glad_glVariantubvEXT; -#define glVariantubvEXT glad_glVariantubvEXT -typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC)(GLuint id, const GLushort* addr); -GLAPI PFNGLVARIANTUSVEXTPROC glad_glVariantusvEXT; -#define glVariantusvEXT glad_glVariantusvEXT -typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC)(GLuint id, const GLuint* addr); -GLAPI PFNGLVARIANTUIVEXTPROC glad_glVariantuivEXT; -#define glVariantuivEXT glad_glVariantuivEXT -typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC)(GLuint id, GLenum type, GLuint stride, const void* addr); -GLAPI PFNGLVARIANTPOINTEREXTPROC glad_glVariantPointerEXT; -#define glVariantPointerEXT glad_glVariantPointerEXT -typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); -GLAPI PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glad_glEnableVariantClientStateEXT; -#define glEnableVariantClientStateEXT glad_glEnableVariantClientStateEXT -typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)(GLuint id); -GLAPI PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glad_glDisableVariantClientStateEXT; -#define glDisableVariantClientStateEXT glad_glDisableVariantClientStateEXT -typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC)(GLenum light, GLenum value); -GLAPI PFNGLBINDLIGHTPARAMETEREXTPROC glad_glBindLightParameterEXT; -#define glBindLightParameterEXT glad_glBindLightParameterEXT -typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC)(GLenum face, GLenum value); -GLAPI PFNGLBINDMATERIALPARAMETEREXTPROC glad_glBindMaterialParameterEXT; -#define glBindMaterialParameterEXT glad_glBindMaterialParameterEXT -typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC)(GLenum unit, GLenum coord, GLenum value); -GLAPI PFNGLBINDTEXGENPARAMETEREXTPROC glad_glBindTexGenParameterEXT; -#define glBindTexGenParameterEXT glad_glBindTexGenParameterEXT -typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)(GLenum unit, GLenum value); -GLAPI PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glad_glBindTextureUnitParameterEXT; -#define glBindTextureUnitParameterEXT glad_glBindTextureUnitParameterEXT -typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC)(GLenum value); -GLAPI PFNGLBINDPARAMETEREXTPROC glad_glBindParameterEXT; -#define glBindParameterEXT glad_glBindParameterEXT -typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC)(GLuint id, GLenum cap); -GLAPI PFNGLISVARIANTENABLEDEXTPROC glad_glIsVariantEnabledEXT; -#define glIsVariantEnabledEXT glad_glIsVariantEnabledEXT -typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean* data); -GLAPI PFNGLGETVARIANTBOOLEANVEXTPROC glad_glGetVariantBooleanvEXT; -#define glGetVariantBooleanvEXT glad_glGetVariantBooleanvEXT -typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint* data); -GLAPI PFNGLGETVARIANTINTEGERVEXTPROC glad_glGetVariantIntegervEXT; -#define glGetVariantIntegervEXT glad_glGetVariantIntegervEXT -typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat* data); -GLAPI PFNGLGETVARIANTFLOATVEXTPROC glad_glGetVariantFloatvEXT; -#define glGetVariantFloatvEXT glad_glGetVariantFloatvEXT -typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC)(GLuint id, GLenum value, void** data); -GLAPI PFNGLGETVARIANTPOINTERVEXTPROC glad_glGetVariantPointervEXT; -#define glGetVariantPointervEXT glad_glGetVariantPointervEXT -typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean* data); -GLAPI PFNGLGETINVARIANTBOOLEANVEXTPROC glad_glGetInvariantBooleanvEXT; -#define glGetInvariantBooleanvEXT glad_glGetInvariantBooleanvEXT -typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint* data); -GLAPI PFNGLGETINVARIANTINTEGERVEXTPROC glad_glGetInvariantIntegervEXT; -#define glGetInvariantIntegervEXT glad_glGetInvariantIntegervEXT -typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat* data); -GLAPI PFNGLGETINVARIANTFLOATVEXTPROC glad_glGetInvariantFloatvEXT; -#define glGetInvariantFloatvEXT glad_glGetInvariantFloatvEXT -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)(GLuint id, GLenum value, GLboolean* data); -GLAPI PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glad_glGetLocalConstantBooleanvEXT; -#define glGetLocalConstantBooleanvEXT glad_glGetLocalConstantBooleanvEXT -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)(GLuint id, GLenum value, GLint* data); -GLAPI PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glad_glGetLocalConstantIntegervEXT; -#define glGetLocalConstantIntegervEXT glad_glGetLocalConstantIntegervEXT -typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC)(GLuint id, GLenum value, GLfloat* data); -GLAPI PFNGLGETLOCALCONSTANTFLOATVEXTPROC glad_glGetLocalConstantFloatvEXT; -#define glGetLocalConstantFloatvEXT glad_glGetLocalConstantFloatvEXT -#endif - -#ifdef __cplusplus -} -#endif - -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// IMPLEMENTATION SECTION -// - -#ifdef GLAD_IMPLEMENTATION - -#include -#include -#include - -struct gladGLversionStruct GLVersion; - -#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) -#define _GLAD_IS_SOME_NEW_VERSION 1 -#endif - -static int max_loaded_major; -static int max_loaded_minor; - -static const char *exts = NULL; -static int num_exts_i = 0; -static const char **exts_i = NULL; - -static int get_exts(void) { -#ifdef _GLAD_IS_SOME_NEW_VERSION - if(max_loaded_major < 3) { -#endif - exts = (const char *)glGetString(GL_EXTENSIONS); -#ifdef _GLAD_IS_SOME_NEW_VERSION - } else { - int index; - - num_exts_i = 0; - glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); - if (num_exts_i > 0) { - exts_i = (const char **)GLAD_REALLOC((void *)exts_i, num_exts_i * sizeof *exts_i); - } - - if (exts_i == NULL) { - return 0; - } - - for(index = 0; index < num_exts_i; index++) { - exts_i[index] = (const char*)glGetStringi(GL_EXTENSIONS, index); - } - } -#endif - return 1; -} - -static void free_exts(void) { - if (exts_i != NULL) { - GLAD_FREE((char **)exts_i); - exts_i = NULL; - } -} - -static int has_ext(const char *ext) { -#ifdef _GLAD_IS_SOME_NEW_VERSION - if(max_loaded_major < 3) { -#endif - const char *extensions; - const char *loc; - const char *terminator; - extensions = exts; - if(extensions == NULL || ext == NULL) { - return 0; - } - - while(1) { - loc = strstr(extensions, ext); - if(loc == NULL) { - return 0; - } - - terminator = loc + strlen(ext); - if((loc == extensions || *(loc - 1) == ' ') && - (*terminator == ' ' || *terminator == '\0')) { - return 1; - } - extensions = terminator; - } -#ifdef _GLAD_IS_SOME_NEW_VERSION - } else { - int index; - - for(index = 0; index < num_exts_i; index++) { - const char *e = exts_i[index]; - - if(strcmp(e, ext) == 0) { - return 1; - } - } - } -#endif - - return 0; -} -int GLAD_GL_VERSION_1_0; -int GLAD_GL_VERSION_1_1; -int GLAD_GL_VERSION_1_2; -int GLAD_GL_VERSION_1_3; -int GLAD_GL_VERSION_1_4; -int GLAD_GL_VERSION_1_5; -int GLAD_GL_VERSION_2_0; -int GLAD_GL_VERSION_2_1; -int GLAD_GL_VERSION_3_0; -int GLAD_GL_VERSION_3_1; -int GLAD_GL_VERSION_3_2; -int GLAD_GL_VERSION_3_3; -PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; -PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; -PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; -PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; -PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; -PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; -PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; -PFNGLBINDSAMPLERPROC glad_glBindSampler; -PFNGLLINEWIDTHPROC glad_glLineWidth; -PFNGLCOLORP3UIVPROC glad_glColorP3uiv; -PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; -PFNGLCOMPILESHADERPROC glad_glCompileShader; -PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; -PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; -PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; -PFNGLVERTEXP4UIPROC glad_glVertexP4ui; -PFNGLENABLEIPROC glad_glEnablei; -PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; -PFNGLCREATESHADERPROC glad_glCreateShader; -PFNGLISBUFFERPROC glad_glIsBuffer; -PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; -PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; -PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; -PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; -PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; -PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; -PFNGLHINTPROC glad_glHint; -PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; -PFNGLSAMPLEMASKIPROC glad_glSampleMaski; -PFNGLVERTEXP2UIPROC glad_glVertexP2ui; -PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; -PFNGLPOINTSIZEPROC glad_glPointSize; -PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; -PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; -PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; -PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; -PFNGLWAITSYNCPROC glad_glWaitSync; -PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; -PFNGLUNIFORM3IPROC glad_glUniform3i; -PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; -PFNGLUNIFORM3FPROC glad_glUniform3f; -PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; -PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; -PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; -PFNGLCOLORMASKIPROC glad_glColorMaski; -PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; -PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; -PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; -PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; -PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; -PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; -PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; -PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; -PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; -PFNGLDRAWARRAYSPROC glad_glDrawArrays; -PFNGLUNIFORM1UIPROC glad_glUniform1ui; -PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; -PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; -PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; -PFNGLCLEARPROC glad_glClear; -PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; -PFNGLISENABLEDPROC glad_glIsEnabled; -PFNGLSTENCILOPPROC glad_glStencilOp; -PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; -PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; -PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; -PFNGLTEXIMAGE1DPROC glad_glTexImage1D; -PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; -PFNGLGETTEXIMAGEPROC glad_glGetTexImage; -PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; -PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; -PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; -PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; -PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; -PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; -PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; -PFNGLGETQUERYIVPROC glad_glGetQueryiv; -PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; -PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; -PFNGLISSHADERPROC glad_glIsShader; -PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; -PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; -PFNGLENABLEPROC glad_glEnable; -PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; -PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; -PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; -PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; -PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; -PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; -PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; -PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; -PFNGLDRAWBUFFERPROC glad_glDrawBuffer; -PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; -PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; -PFNGLFLUSHPROC glad_glFlush; -PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; -PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; -PFNGLFENCESYNCPROC glad_glFenceSync; -PFNGLCOLORP3UIPROC glad_glColorP3ui; -PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; -PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; -PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; -PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; -PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; -PFNGLGENSAMPLERSPROC glad_glGenSamplers; -PFNGLCLAMPCOLORPROC glad_glClampColor; -PFNGLUNIFORM4IVPROC glad_glUniform4iv; -PFNGLCLEARSTENCILPROC glad_glClearStencil; -PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; -PFNGLGENTEXTURESPROC glad_glGenTextures; -PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; -PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; -PFNGLISSYNCPROC glad_glIsSync; -PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; -PFNGLUNIFORM2IPROC glad_glUniform2i; -PFNGLUNIFORM2FPROC glad_glUniform2f; -PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; -PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; -PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; -PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; -PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; -PFNGLGENQUERIESPROC glad_glGenQueries; -PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; -PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; -PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; -PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; -PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; -PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; -PFNGLISENABLEDIPROC glad_glIsEnabledi; -PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; -PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; -PFNGLUNIFORM2IVPROC glad_glUniform2iv; -PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; -PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; -PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; -PFNGLGETSHADERIVPROC glad_glGetShaderiv; -PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; -PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; -PFNGLGETDOUBLEVPROC glad_glGetDoublev; -PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; -PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; -PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; -PFNGLUNIFORM3FVPROC glad_glUniform3fv; -PFNGLDEPTHRANGEPROC glad_glDepthRange; -PFNGLMAPBUFFERPROC glad_glMapBuffer; -PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; -PFNGLDELETESYNCPROC glad_glDeleteSync; -PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; -PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; -PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; -PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; -PFNGLUNIFORM3IVPROC glad_glUniform3iv; -PFNGLPOLYGONMODEPROC glad_glPolygonMode; -PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; -PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; -PFNGLUSEPROGRAMPROC glad_glUseProgram; -PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; -PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; -PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; -PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; -PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; -PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; -PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; -PFNGLFINISHPROC glad_glFinish; -PFNGLDELETESHADERPROC glad_glDeleteShader; -PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; -PFNGLVIEWPORTPROC glad_glViewport; -PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; -PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; -PFNGLUNIFORM2UIPROC glad_glUniform2ui; -PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; -PFNGLCLEARDEPTHPROC glad_glClearDepth; -PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; -PFNGLTEXPARAMETERFPROC glad_glTexParameterf; -PFNGLTEXPARAMETERIPROC glad_glTexParameteri; -PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; -PFNGLTEXBUFFERPROC glad_glTexBuffer; -PFNGLPIXELSTOREIPROC glad_glPixelStorei; -PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; -PFNGLPIXELSTOREFPROC glad_glPixelStoref; -PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; -PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; -PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; -PFNGLLINKPROGRAMPROC glad_glLinkProgram; -PFNGLBINDTEXTUREPROC glad_glBindTexture; -PFNGLGETSTRINGPROC glad_glGetString; -PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; -PFNGLDETACHSHADERPROC glad_glDetachShader; -PFNGLENDQUERYPROC glad_glEndQuery; -PFNGLNORMALP3UIPROC glad_glNormalP3ui; -PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; -PFNGLDELETETEXTURESPROC glad_glDeleteTextures; -PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; -PFNGLDELETEQUERIESPROC glad_glDeleteQueries; -PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; -PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; -PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; -PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; -PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; -PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; -PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; -PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; -PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; -PFNGLUNIFORM1FPROC glad_glUniform1f; -PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; -PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; -PFNGLUNIFORM1IPROC glad_glUniform1i; -PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; -PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; -PFNGLDISABLEPROC glad_glDisable; -PFNGLLOGICOPPROC glad_glLogicOp; -PFNGLUNIFORM4UIPROC glad_glUniform4ui; -PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; -PFNGLCULLFACEPROC glad_glCullFace; -PFNGLGETSTRINGIPROC glad_glGetStringi; -PFNGLATTACHSHADERPROC glad_glAttachShader; -PFNGLQUERYCOUNTERPROC glad_glQueryCounter; -PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; -PFNGLDRAWELEMENTSPROC glad_glDrawElements; -PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; -PFNGLUNIFORM1IVPROC glad_glUniform1iv; -PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; -PFNGLREADBUFFERPROC glad_glReadBuffer; -PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; -PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; -PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; -PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; -PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; -PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; -PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; -PFNGLBLENDCOLORPROC glad_glBlendColor; -PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; -PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; -PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; -PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; -PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; -PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; -PFNGLISPROGRAMPROC glad_glIsProgram; -PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; -PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; -PFNGLUNIFORM4IPROC glad_glUniform4i; -PFNGLACTIVETEXTUREPROC glad_glActiveTexture; -PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; -PFNGLREADPIXELSPROC glad_glReadPixels; -PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; -PFNGLUNIFORM4FPROC glad_glUniform4f; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; -PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; -PFNGLSTENCILFUNCPROC glad_glStencilFunc; -PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; -PFNGLCOLORP4UIPROC glad_glColorP4ui; -PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; -PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; -PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; -PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; -PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; -PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; -PFNGLGENBUFFERSPROC glad_glGenBuffers; -PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; -PFNGLBLENDFUNCPROC glad_glBlendFunc; -PFNGLCREATEPROGRAMPROC glad_glCreateProgram; -PFNGLTEXIMAGE3DPROC glad_glTexImage3D; -PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; -PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; -PFNGLGETINTEGER64VPROC glad_glGetInteger64v; -PFNGLSCISSORPROC glad_glScissor; -PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; -PFNGLGETBOOLEANVPROC glad_glGetBooleanv; -PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; -PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; -PFNGLCLEARCOLORPROC glad_glClearColor; -PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; -PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; -PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; -PFNGLCOLORP4UIVPROC glad_glColorP4uiv; -PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; -PFNGLUNIFORM3UIPROC glad_glUniform3ui; -PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; -PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; -PFNGLUNIFORM2FVPROC glad_glUniform2fv; -PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; -PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; -PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; -PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; -PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; -PFNGLDEPTHFUNCPROC glad_glDepthFunc; -PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; -PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; -PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; -PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; -PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; -PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; -PFNGLCOLORMASKPROC glad_glColorMask; -PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; -PFNGLBLENDEQUATIONPROC glad_glBlendEquation; -PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; -PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; -PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; -PFNGLUNIFORM4FVPROC glad_glUniform4fv; -PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; -PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; -PFNGLISSAMPLERPROC glad_glIsSampler; -PFNGLVERTEXP3UIPROC glad_glVertexP3ui; -PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; -PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; -PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; -PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; -PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; -PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; -PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; -PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; -PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; -PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; -PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; -PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; -PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; -PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; -PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; -PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; -PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; -PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; -PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; -PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; -PFNGLDISABLEIPROC glad_glDisablei; -PFNGLSHADERSOURCEPROC glad_glShaderSource; -PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; -PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; -PFNGLGETSYNCIVPROC glad_glGetSynciv; -PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; -PFNGLBEGINQUERYPROC glad_glBeginQuery; -PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; -PFNGLBINDBUFFERPROC glad_glBindBuffer; -PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; -PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; -PFNGLBUFFERDATAPROC glad_glBufferData; -PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; -PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; -PFNGLGETERRORPROC glad_glGetError; -PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; -PFNGLGETFLOATVPROC glad_glGetFloatv; -PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; -PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; -PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; -PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; -PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; -PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; -PFNGLGETINTEGERVPROC glad_glGetIntegerv; -PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; -PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; -PFNGLISQUERYPROC glad_glIsQuery; -PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; -PFNGLTEXIMAGE2DPROC glad_glTexImage2D; -PFNGLSTENCILMASKPROC glad_glStencilMask; -PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; -PFNGLISTEXTUREPROC glad_glIsTexture; -PFNGLUNIFORM1FVPROC glad_glUniform1fv; -PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; -PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; -PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; -PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; -PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; -PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; -PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; -PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; -PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; -PFNGLDEPTHMASKPROC glad_glDepthMask; -PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; -PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; -PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; -PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; -PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; -PFNGLFRONTFACEPROC glad_glFrontFace; -int GLAD_GL_ARB_texture_compression; -int GLAD_GL_ARB_texture_swizzle; -int GLAD_GL_ATI_fragment_shader; -int GLAD_GL_EXT_texture_sRGB; -int GLAD_GL_ARB_explicit_attrib_location; -int GLAD_GL_ARB_ES3_compatibility; -int GLAD_GL_EXT_blend_color; -int GLAD_GL_EXT_framebuffer_sRGB; -int GLAD_GL_EXT_index_array_formats; -int GLAD_GL_ARB_vertex_shader; -int GLAD_GL_ARB_vertex_attrib_binding; -int GLAD_GL_ARB_vertex_program; -int GLAD_GL_EXT_texture_compression_s3tc; -int GLAD_GL_EXT_debug_marker; -int GLAD_GL_EXT_texture_swizzle; -int GLAD_GL_ARB_texture_multisample; -int GLAD_GL_ARB_texture_rg; -int GLAD_GL_ARB_texture_float; -int GLAD_GL_ARB_compressed_texture_pixel_storage; -int GLAD_GL_ARB_framebuffer_sRGB; -int GLAD_GL_ARB_vertex_array_object; -int GLAD_GL_ARB_depth_clamp; -int GLAD_GL_ARB_fragment_shader; -int GLAD_GL_ATI_vertex_array_object; -int GLAD_GL_ARB_vertex_buffer_object; -int GLAD_GL_ARB_fragment_program; -int GLAD_GL_EXT_framebuffer_multisample; -int GLAD_GL_ARB_framebuffer_object; -int GLAD_GL_ARB_draw_buffers_blend; -int GLAD_GL_EXT_vertex_shader; -int GLAD_GL_EXT_blend_func_separate; -int GLAD_GL_ARB_texture_non_power_of_two; -int GLAD_GL_EXT_texture; -int GLAD_GL_ARB_buffer_storage; -int GLAD_GL_ARB_explicit_uniform_location; -int GLAD_GL_EXT_framebuffer_object; -int GLAD_GL_EXT_framebuffer_multisample_blit_scaled; -int GLAD_GL_AMD_debug_output; -int GLAD_GL_ARB_depth_buffer_float; -int GLAD_GL_ARB_multisample; -int GLAD_GL_ARB_compatibility; -int GLAD_GL_ARB_depth_texture; -int GLAD_GL_ARB_sample_locations; -int GLAD_GL_ARB_ES2_compatibility; -int GLAD_GL_AMD_query_buffer_object; -int GLAD_GL_EXT_framebuffer_blit; -int GLAD_GL_EXT_vertex_array; -int GLAD_GL_ARB_draw_buffers; -int GLAD_GL_EXT_blend_equation_separate; -int GLAD_GL_ATI_element_array; -int GLAD_GL_ARB_debug_output; -int GLAD_GL_ARB_uniform_buffer_object; -PFNGLDEBUGMESSAGEENABLEAMDPROC glad_glDebugMessageEnableAMD; -PFNGLDEBUGMESSAGEINSERTAMDPROC glad_glDebugMessageInsertAMD; -PFNGLDEBUGMESSAGECALLBACKAMDPROC glad_glDebugMessageCallbackAMD; -PFNGLGETDEBUGMESSAGELOGAMDPROC glad_glGetDebugMessageLogAMD; -PFNGLRELEASESHADERCOMPILERPROC glad_glReleaseShaderCompiler; -PFNGLSHADERBINARYPROC glad_glShaderBinary; -PFNGLGETSHADERPRECISIONFORMATPROC glad_glGetShaderPrecisionFormat; -PFNGLDEPTHRANGEFPROC glad_glDepthRangef; -PFNGLCLEARDEPTHFPROC glad_glClearDepthf; -PFNGLBUFFERSTORAGEPROC glad_glBufferStorage; -PFNGLDEBUGMESSAGECONTROLARBPROC glad_glDebugMessageControlARB; -PFNGLDEBUGMESSAGEINSERTARBPROC glad_glDebugMessageInsertARB; -PFNGLDEBUGMESSAGECALLBACKARBPROC glad_glDebugMessageCallbackARB; -PFNGLGETDEBUGMESSAGELOGARBPROC glad_glGetDebugMessageLogARB; -PFNGLDRAWBUFFERSARBPROC glad_glDrawBuffersARB; -PFNGLBLENDEQUATIONIARBPROC glad_glBlendEquationiARB; -PFNGLBLENDEQUATIONSEPARATEIARBPROC glad_glBlendEquationSeparateiARB; -PFNGLBLENDFUNCIARBPROC glad_glBlendFunciARB; -PFNGLBLENDFUNCSEPARATEIARBPROC glad_glBlendFuncSeparateiARB; -PFNGLPROGRAMSTRINGARBPROC glad_glProgramStringARB; -PFNGLBINDPROGRAMARBPROC glad_glBindProgramARB; -PFNGLDELETEPROGRAMSARBPROC glad_glDeleteProgramsARB; -PFNGLGENPROGRAMSARBPROC glad_glGenProgramsARB; -PFNGLPROGRAMENVPARAMETER4DARBPROC glad_glProgramEnvParameter4dARB; -PFNGLPROGRAMENVPARAMETER4DVARBPROC glad_glProgramEnvParameter4dvARB; -PFNGLPROGRAMENVPARAMETER4FARBPROC glad_glProgramEnvParameter4fARB; -PFNGLPROGRAMENVPARAMETER4FVARBPROC glad_glProgramEnvParameter4fvARB; -PFNGLPROGRAMLOCALPARAMETER4DARBPROC glad_glProgramLocalParameter4dARB; -PFNGLPROGRAMLOCALPARAMETER4DVARBPROC glad_glProgramLocalParameter4dvARB; -PFNGLPROGRAMLOCALPARAMETER4FARBPROC glad_glProgramLocalParameter4fARB; -PFNGLPROGRAMLOCALPARAMETER4FVARBPROC glad_glProgramLocalParameter4fvARB; -PFNGLGETPROGRAMENVPARAMETERDVARBPROC glad_glGetProgramEnvParameterdvARB; -PFNGLGETPROGRAMENVPARAMETERFVARBPROC glad_glGetProgramEnvParameterfvARB; -PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC glad_glGetProgramLocalParameterdvARB; -PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC glad_glGetProgramLocalParameterfvARB; -PFNGLGETPROGRAMIVARBPROC glad_glGetProgramivARB; -PFNGLGETPROGRAMSTRINGARBPROC glad_glGetProgramStringARB; -PFNGLISPROGRAMARBPROC glad_glIsProgramARB; -PFNGLSAMPLECOVERAGEARBPROC glad_glSampleCoverageARB; -PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glFramebufferSampleLocationsfvARB; -PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC glad_glNamedFramebufferSampleLocationsfvARB; -PFNGLEVALUATEDEPTHVALUESARBPROC glad_glEvaluateDepthValuesARB; -PFNGLCOMPRESSEDTEXIMAGE3DARBPROC glad_glCompressedTexImage3DARB; -PFNGLCOMPRESSEDTEXIMAGE2DARBPROC glad_glCompressedTexImage2DARB; -PFNGLCOMPRESSEDTEXIMAGE1DARBPROC glad_glCompressedTexImage1DARB; -PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC glad_glCompressedTexSubImage3DARB; -PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC glad_glCompressedTexSubImage2DARB; -PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC glad_glCompressedTexSubImage1DARB; -PFNGLGETCOMPRESSEDTEXIMAGEARBPROC glad_glGetCompressedTexImageARB; -PFNGLBINDVERTEXBUFFERPROC glad_glBindVertexBuffer; -PFNGLVERTEXATTRIBFORMATPROC glad_glVertexAttribFormat; -PFNGLVERTEXATTRIBIFORMATPROC glad_glVertexAttribIFormat; -PFNGLVERTEXATTRIBLFORMATPROC glad_glVertexAttribLFormat; -PFNGLVERTEXATTRIBBINDINGPROC glad_glVertexAttribBinding; -PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor; -PFNGLBINDBUFFERARBPROC glad_glBindBufferARB; -PFNGLDELETEBUFFERSARBPROC glad_glDeleteBuffersARB; -PFNGLGENBUFFERSARBPROC glad_glGenBuffersARB; -PFNGLISBUFFERARBPROC glad_glIsBufferARB; -PFNGLBUFFERDATAARBPROC glad_glBufferDataARB; -PFNGLBUFFERSUBDATAARBPROC glad_glBufferSubDataARB; -PFNGLGETBUFFERSUBDATAARBPROC glad_glGetBufferSubDataARB; -PFNGLMAPBUFFERARBPROC glad_glMapBufferARB; -PFNGLUNMAPBUFFERARBPROC glad_glUnmapBufferARB; -PFNGLGETBUFFERPARAMETERIVARBPROC glad_glGetBufferParameterivARB; -PFNGLGETBUFFERPOINTERVARBPROC glad_glGetBufferPointervARB; -PFNGLVERTEXATTRIB1DARBPROC glad_glVertexAttrib1dARB; -PFNGLVERTEXATTRIB1DVARBPROC glad_glVertexAttrib1dvARB; -PFNGLVERTEXATTRIB1FARBPROC glad_glVertexAttrib1fARB; -PFNGLVERTEXATTRIB1FVARBPROC glad_glVertexAttrib1fvARB; -PFNGLVERTEXATTRIB1SARBPROC glad_glVertexAttrib1sARB; -PFNGLVERTEXATTRIB1SVARBPROC glad_glVertexAttrib1svARB; -PFNGLVERTEXATTRIB2DARBPROC glad_glVertexAttrib2dARB; -PFNGLVERTEXATTRIB2DVARBPROC glad_glVertexAttrib2dvARB; -PFNGLVERTEXATTRIB2FARBPROC glad_glVertexAttrib2fARB; -PFNGLVERTEXATTRIB2FVARBPROC glad_glVertexAttrib2fvARB; -PFNGLVERTEXATTRIB2SARBPROC glad_glVertexAttrib2sARB; -PFNGLVERTEXATTRIB2SVARBPROC glad_glVertexAttrib2svARB; -PFNGLVERTEXATTRIB3DARBPROC glad_glVertexAttrib3dARB; -PFNGLVERTEXATTRIB3DVARBPROC glad_glVertexAttrib3dvARB; -PFNGLVERTEXATTRIB3FARBPROC glad_glVertexAttrib3fARB; -PFNGLVERTEXATTRIB3FVARBPROC glad_glVertexAttrib3fvARB; -PFNGLVERTEXATTRIB3SARBPROC glad_glVertexAttrib3sARB; -PFNGLVERTEXATTRIB3SVARBPROC glad_glVertexAttrib3svARB; -PFNGLVERTEXATTRIB4NBVARBPROC glad_glVertexAttrib4NbvARB; -PFNGLVERTEXATTRIB4NIVARBPROC glad_glVertexAttrib4NivARB; -PFNGLVERTEXATTRIB4NSVARBPROC glad_glVertexAttrib4NsvARB; -PFNGLVERTEXATTRIB4NUBARBPROC glad_glVertexAttrib4NubARB; -PFNGLVERTEXATTRIB4NUBVARBPROC glad_glVertexAttrib4NubvARB; -PFNGLVERTEXATTRIB4NUIVARBPROC glad_glVertexAttrib4NuivARB; -PFNGLVERTEXATTRIB4NUSVARBPROC glad_glVertexAttrib4NusvARB; -PFNGLVERTEXATTRIB4BVARBPROC glad_glVertexAttrib4bvARB; -PFNGLVERTEXATTRIB4DARBPROC glad_glVertexAttrib4dARB; -PFNGLVERTEXATTRIB4DVARBPROC glad_glVertexAttrib4dvARB; -PFNGLVERTEXATTRIB4FARBPROC glad_glVertexAttrib4fARB; -PFNGLVERTEXATTRIB4FVARBPROC glad_glVertexAttrib4fvARB; -PFNGLVERTEXATTRIB4IVARBPROC glad_glVertexAttrib4ivARB; -PFNGLVERTEXATTRIB4SARBPROC glad_glVertexAttrib4sARB; -PFNGLVERTEXATTRIB4SVARBPROC glad_glVertexAttrib4svARB; -PFNGLVERTEXATTRIB4UBVARBPROC glad_glVertexAttrib4ubvARB; -PFNGLVERTEXATTRIB4UIVARBPROC glad_glVertexAttrib4uivARB; -PFNGLVERTEXATTRIB4USVARBPROC glad_glVertexAttrib4usvARB; -PFNGLVERTEXATTRIBPOINTERARBPROC glad_glVertexAttribPointerARB; -PFNGLENABLEVERTEXATTRIBARRAYARBPROC glad_glEnableVertexAttribArrayARB; -PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glad_glDisableVertexAttribArrayARB; -PFNGLGETVERTEXATTRIBDVARBPROC glad_glGetVertexAttribdvARB; -PFNGLGETVERTEXATTRIBFVARBPROC glad_glGetVertexAttribfvARB; -PFNGLGETVERTEXATTRIBIVARBPROC glad_glGetVertexAttribivARB; -PFNGLGETVERTEXATTRIBPOINTERVARBPROC glad_glGetVertexAttribPointervARB; -PFNGLBINDATTRIBLOCATIONARBPROC glad_glBindAttribLocationARB; -PFNGLGETACTIVEATTRIBARBPROC glad_glGetActiveAttribARB; -PFNGLGETATTRIBLOCATIONARBPROC glad_glGetAttribLocationARB; -PFNGLELEMENTPOINTERATIPROC glad_glElementPointerATI; -PFNGLDRAWELEMENTARRAYATIPROC glad_glDrawElementArrayATI; -PFNGLDRAWRANGEELEMENTARRAYATIPROC glad_glDrawRangeElementArrayATI; -PFNGLGENFRAGMENTSHADERSATIPROC glad_glGenFragmentShadersATI; -PFNGLBINDFRAGMENTSHADERATIPROC glad_glBindFragmentShaderATI; -PFNGLDELETEFRAGMENTSHADERATIPROC glad_glDeleteFragmentShaderATI; -PFNGLBEGINFRAGMENTSHADERATIPROC glad_glBeginFragmentShaderATI; -PFNGLENDFRAGMENTSHADERATIPROC glad_glEndFragmentShaderATI; -PFNGLPASSTEXCOORDATIPROC glad_glPassTexCoordATI; -PFNGLSAMPLEMAPATIPROC glad_glSampleMapATI; -PFNGLCOLORFRAGMENTOP1ATIPROC glad_glColorFragmentOp1ATI; -PFNGLCOLORFRAGMENTOP2ATIPROC glad_glColorFragmentOp2ATI; -PFNGLCOLORFRAGMENTOP3ATIPROC glad_glColorFragmentOp3ATI; -PFNGLALPHAFRAGMENTOP1ATIPROC glad_glAlphaFragmentOp1ATI; -PFNGLALPHAFRAGMENTOP2ATIPROC glad_glAlphaFragmentOp2ATI; -PFNGLALPHAFRAGMENTOP3ATIPROC glad_glAlphaFragmentOp3ATI; -PFNGLSETFRAGMENTSHADERCONSTANTATIPROC glad_glSetFragmentShaderConstantATI; -PFNGLNEWOBJECTBUFFERATIPROC glad_glNewObjectBufferATI; -PFNGLISOBJECTBUFFERATIPROC glad_glIsObjectBufferATI; -PFNGLUPDATEOBJECTBUFFERATIPROC glad_glUpdateObjectBufferATI; -PFNGLGETOBJECTBUFFERFVATIPROC glad_glGetObjectBufferfvATI; -PFNGLGETOBJECTBUFFERIVATIPROC glad_glGetObjectBufferivATI; -PFNGLFREEOBJECTBUFFERATIPROC glad_glFreeObjectBufferATI; -PFNGLARRAYOBJECTATIPROC glad_glArrayObjectATI; -PFNGLGETARRAYOBJECTFVATIPROC glad_glGetArrayObjectfvATI; -PFNGLGETARRAYOBJECTIVATIPROC glad_glGetArrayObjectivATI; -PFNGLVARIANTARRAYOBJECTATIPROC glad_glVariantArrayObjectATI; -PFNGLGETVARIANTARRAYOBJECTFVATIPROC glad_glGetVariantArrayObjectfvATI; -PFNGLGETVARIANTARRAYOBJECTIVATIPROC glad_glGetVariantArrayObjectivATI; -PFNGLBLENDCOLOREXTPROC glad_glBlendColorEXT; -PFNGLBLENDEQUATIONSEPARATEEXTPROC glad_glBlendEquationSeparateEXT; -PFNGLBLENDFUNCSEPARATEEXTPROC glad_glBlendFuncSeparateEXT; -PFNGLINSERTEVENTMARKEREXTPROC glad_glInsertEventMarkerEXT; -PFNGLPUSHGROUPMARKEREXTPROC glad_glPushGroupMarkerEXT; -PFNGLPOPGROUPMARKEREXTPROC glad_glPopGroupMarkerEXT; -PFNGLBLITFRAMEBUFFEREXTPROC glad_glBlitFramebufferEXT; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC glad_glRenderbufferStorageMultisampleEXT; -PFNGLISRENDERBUFFEREXTPROC glad_glIsRenderbufferEXT; -PFNGLBINDRENDERBUFFEREXTPROC glad_glBindRenderbufferEXT; -PFNGLDELETERENDERBUFFERSEXTPROC glad_glDeleteRenderbuffersEXT; -PFNGLGENRENDERBUFFERSEXTPROC glad_glGenRenderbuffersEXT; -PFNGLRENDERBUFFERSTORAGEEXTPROC glad_glRenderbufferStorageEXT; -PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glad_glGetRenderbufferParameterivEXT; -PFNGLISFRAMEBUFFEREXTPROC glad_glIsFramebufferEXT; -PFNGLBINDFRAMEBUFFEREXTPROC glad_glBindFramebufferEXT; -PFNGLDELETEFRAMEBUFFERSEXTPROC glad_glDeleteFramebuffersEXT; -PFNGLGENFRAMEBUFFERSEXTPROC glad_glGenFramebuffersEXT; -PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glad_glCheckFramebufferStatusEXT; -PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glad_glFramebufferTexture1DEXT; -PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glad_glFramebufferTexture2DEXT; -PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glad_glFramebufferTexture3DEXT; -PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glad_glFramebufferRenderbufferEXT; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glad_glGetFramebufferAttachmentParameterivEXT; -PFNGLGENERATEMIPMAPEXTPROC glad_glGenerateMipmapEXT; -PFNGLARRAYELEMENTEXTPROC glad_glArrayElementEXT; -PFNGLCOLORPOINTEREXTPROC glad_glColorPointerEXT; -PFNGLDRAWARRAYSEXTPROC glad_glDrawArraysEXT; -PFNGLEDGEFLAGPOINTEREXTPROC glad_glEdgeFlagPointerEXT; -PFNGLGETPOINTERVEXTPROC glad_glGetPointervEXT; -PFNGLINDEXPOINTEREXTPROC glad_glIndexPointerEXT; -PFNGLNORMALPOINTEREXTPROC glad_glNormalPointerEXT; -PFNGLTEXCOORDPOINTEREXTPROC glad_glTexCoordPointerEXT; -PFNGLVERTEXPOINTEREXTPROC glad_glVertexPointerEXT; -PFNGLBEGINVERTEXSHADEREXTPROC glad_glBeginVertexShaderEXT; -PFNGLENDVERTEXSHADEREXTPROC glad_glEndVertexShaderEXT; -PFNGLBINDVERTEXSHADEREXTPROC glad_glBindVertexShaderEXT; -PFNGLGENVERTEXSHADERSEXTPROC glad_glGenVertexShadersEXT; -PFNGLDELETEVERTEXSHADEREXTPROC glad_glDeleteVertexShaderEXT; -PFNGLSHADEROP1EXTPROC glad_glShaderOp1EXT; -PFNGLSHADEROP2EXTPROC glad_glShaderOp2EXT; -PFNGLSHADEROP3EXTPROC glad_glShaderOp3EXT; -PFNGLSWIZZLEEXTPROC glad_glSwizzleEXT; -PFNGLWRITEMASKEXTPROC glad_glWriteMaskEXT; -PFNGLINSERTCOMPONENTEXTPROC glad_glInsertComponentEXT; -PFNGLEXTRACTCOMPONENTEXTPROC glad_glExtractComponentEXT; -PFNGLGENSYMBOLSEXTPROC glad_glGenSymbolsEXT; -PFNGLSETINVARIANTEXTPROC glad_glSetInvariantEXT; -PFNGLSETLOCALCONSTANTEXTPROC glad_glSetLocalConstantEXT; -PFNGLVARIANTBVEXTPROC glad_glVariantbvEXT; -PFNGLVARIANTSVEXTPROC glad_glVariantsvEXT; -PFNGLVARIANTIVEXTPROC glad_glVariantivEXT; -PFNGLVARIANTFVEXTPROC glad_glVariantfvEXT; -PFNGLVARIANTDVEXTPROC glad_glVariantdvEXT; -PFNGLVARIANTUBVEXTPROC glad_glVariantubvEXT; -PFNGLVARIANTUSVEXTPROC glad_glVariantusvEXT; -PFNGLVARIANTUIVEXTPROC glad_glVariantuivEXT; -PFNGLVARIANTPOINTEREXTPROC glad_glVariantPointerEXT; -PFNGLENABLEVARIANTCLIENTSTATEEXTPROC glad_glEnableVariantClientStateEXT; -PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC glad_glDisableVariantClientStateEXT; -PFNGLBINDLIGHTPARAMETEREXTPROC glad_glBindLightParameterEXT; -PFNGLBINDMATERIALPARAMETEREXTPROC glad_glBindMaterialParameterEXT; -PFNGLBINDTEXGENPARAMETEREXTPROC glad_glBindTexGenParameterEXT; -PFNGLBINDTEXTUREUNITPARAMETEREXTPROC glad_glBindTextureUnitParameterEXT; -PFNGLBINDPARAMETEREXTPROC glad_glBindParameterEXT; -PFNGLISVARIANTENABLEDEXTPROC glad_glIsVariantEnabledEXT; -PFNGLGETVARIANTBOOLEANVEXTPROC glad_glGetVariantBooleanvEXT; -PFNGLGETVARIANTINTEGERVEXTPROC glad_glGetVariantIntegervEXT; -PFNGLGETVARIANTFLOATVEXTPROC glad_glGetVariantFloatvEXT; -PFNGLGETVARIANTPOINTERVEXTPROC glad_glGetVariantPointervEXT; -PFNGLGETINVARIANTBOOLEANVEXTPROC glad_glGetInvariantBooleanvEXT; -PFNGLGETINVARIANTINTEGERVEXTPROC glad_glGetInvariantIntegervEXT; -PFNGLGETINVARIANTFLOATVEXTPROC glad_glGetInvariantFloatvEXT; -PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC glad_glGetLocalConstantBooleanvEXT; -PFNGLGETLOCALCONSTANTINTEGERVEXTPROC glad_glGetLocalConstantIntegervEXT; -PFNGLGETLOCALCONSTANTFLOATVEXTPROC glad_glGetLocalConstantFloatvEXT; -static void load_GL_VERSION_1_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_0) return; - glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); - glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); - glad_glHint = (PFNGLHINTPROC)load("glHint"); - glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); - glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); - glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); - glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); - glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); - glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); - glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); - glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); - glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); - glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); - glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); - glad_glClear = (PFNGLCLEARPROC)load("glClear"); - glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); - glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); - glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); - glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); - glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); - glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); - glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); - glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); - glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); - glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); - glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); - glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); - glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); - glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); - glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); - glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); - glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); - glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); - glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); - glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); - glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); - glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); - glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); - glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); - glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); - glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); - glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); - glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); - glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); - glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); - glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); - glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); -} -static void load_GL_VERSION_1_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_1) return; - glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); - glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); - glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); - glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); - glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); - glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); - glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); - glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); - glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); - glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); - glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); - glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); - glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); -} -static void load_GL_VERSION_1_2(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_2) return; - glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); - glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); - glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); - glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); -} -static void load_GL_VERSION_1_3(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_3) return; - glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); - glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); - glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); - glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); - glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); - glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); - glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); - glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); - glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); -} -static void load_GL_VERSION_1_4(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_4) return; - glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); - glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); - glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); - glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); - glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); - glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); - glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); - glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); - glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); -} -static void load_GL_VERSION_1_5(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_5) return; - glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); - glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); - glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); - glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); - glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); - glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); - glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); - glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); - glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); - glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); - glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); - glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); - glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); - glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); - glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); - glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); - glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); - glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); - glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); -} -static void load_GL_VERSION_2_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_2_0) return; - glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); - glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); - glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); - glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); - glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); - glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); - glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); - glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); - glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); - glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); - glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); - glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); - glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); - glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); - glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); - glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); - glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); - glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); - glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); - glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); - glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); - glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); - glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); - glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); - glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); - glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); - glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); - glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); - glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); - glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); - glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); - glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); - glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); - glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); - glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); - glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); - glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); - glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); - glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); - glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); - glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); - glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); - glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); - glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); - glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); - glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); - glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); - glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); - glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); - glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); - glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); - glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); - glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); - glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); - glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); - glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); - glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); - glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); - glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); - glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); - glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); - glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); - glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); - glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); - glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); - glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); - glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); - glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); - glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); - glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); - glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); - glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); - glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); - glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); - glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); - glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); - glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); - glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); - glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); - glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); - glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); - glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); - glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); - glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); - glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); - glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); - glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); - glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); - glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); - glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); - glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); - glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); - glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); -} -static void load_GL_VERSION_2_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_2_1) return; - glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); - glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); - glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); - glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); - glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); - glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); -} -static void load_GL_VERSION_3_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_0) return; - glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); - glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); - glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); - glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); - glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); - glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); - glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); - glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); - glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); - glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); - glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); - glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); - glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); - glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); - glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); - glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); - glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); - glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); - glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); - glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); - glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); - glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); - glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); - glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); - glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); - glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); - glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); - glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); - glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); - glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); - glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); - glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); - glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); - glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); - glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); - glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); - glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); - glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); - glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); - glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); - glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); - glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); - glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); - glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); - glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); - glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); - glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); - glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); - glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); - glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); - glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); - glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); - glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); - glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); - glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); - glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); - glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); - glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); - glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); - glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); - glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); - glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); - glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); - glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); - glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); - glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); - glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); - glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); - glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); - glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); - glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); - glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); - glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); - glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); - glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); - glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); - glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); - glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); - glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); - glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); - glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); - glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); - glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); - glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); -} -static void load_GL_VERSION_3_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_1) return; - glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); - glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); - glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); - glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); - glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); - glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); - glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); - glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); - glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); - glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); - glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); - glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); - glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); - glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); - glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); -} -static void load_GL_VERSION_3_2(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_2) return; - glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); - glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); - glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); - glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); - glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); - glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); - glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); - glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); - glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); - glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); - glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); - glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); - glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); - glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); - glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); - glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); - glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); - glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); - glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); -} -static void load_GL_VERSION_3_3(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_3) return; - glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); - glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); - glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); - glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); - glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); - glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); - glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); - glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); - glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); - glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); - glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); - glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); - glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); - glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); - glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); - glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); - glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); - glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); - glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); - glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); - glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); - glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); - glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); - glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); - glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); - glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); - glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); - glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); - glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); - glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); - glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); - glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); - glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); - glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); - glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); - glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); - glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); - glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); - glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); - glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); - glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); - glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); - glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); - glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); - glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); - glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); - glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); - glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); - glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); - glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); - glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); - glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); - glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); - glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); - glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); - glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); - glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); - glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); -} -static void load_GL_AMD_debug_output(GLADloadproc load) { - if(!GLAD_GL_AMD_debug_output) return; - glad_glDebugMessageEnableAMD = (PFNGLDEBUGMESSAGEENABLEAMDPROC)load("glDebugMessageEnableAMD"); - glad_glDebugMessageInsertAMD = (PFNGLDEBUGMESSAGEINSERTAMDPROC)load("glDebugMessageInsertAMD"); - glad_glDebugMessageCallbackAMD = (PFNGLDEBUGMESSAGECALLBACKAMDPROC)load("glDebugMessageCallbackAMD"); - glad_glGetDebugMessageLogAMD = (PFNGLGETDEBUGMESSAGELOGAMDPROC)load("glGetDebugMessageLogAMD"); -} -static void load_GL_ARB_ES2_compatibility(GLADloadproc load) { - if(!GLAD_GL_ARB_ES2_compatibility) return; - glad_glReleaseShaderCompiler = (PFNGLRELEASESHADERCOMPILERPROC)load("glReleaseShaderCompiler"); - glad_glShaderBinary = (PFNGLSHADERBINARYPROC)load("glShaderBinary"); - glad_glGetShaderPrecisionFormat = (PFNGLGETSHADERPRECISIONFORMATPROC)load("glGetShaderPrecisionFormat"); - glad_glDepthRangef = (PFNGLDEPTHRANGEFPROC)load("glDepthRangef"); - glad_glClearDepthf = (PFNGLCLEARDEPTHFPROC)load("glClearDepthf"); -} -static void load_GL_ARB_buffer_storage(GLADloadproc load) { - if(!GLAD_GL_ARB_buffer_storage) return; - glad_glBufferStorage = (PFNGLBUFFERSTORAGEPROC)load("glBufferStorage"); -} -static void load_GL_ARB_debug_output(GLADloadproc load) { - if(!GLAD_GL_ARB_debug_output) return; - glad_glDebugMessageControlARB = (PFNGLDEBUGMESSAGECONTROLARBPROC)load("glDebugMessageControlARB"); - glad_glDebugMessageInsertARB = (PFNGLDEBUGMESSAGEINSERTARBPROC)load("glDebugMessageInsertARB"); - glad_glDebugMessageCallbackARB = (PFNGLDEBUGMESSAGECALLBACKARBPROC)load("glDebugMessageCallbackARB"); - glad_glGetDebugMessageLogARB = (PFNGLGETDEBUGMESSAGELOGARBPROC)load("glGetDebugMessageLogARB"); -} -static void load_GL_ARB_draw_buffers(GLADloadproc load) { - if(!GLAD_GL_ARB_draw_buffers) return; - glad_glDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC)load("glDrawBuffersARB"); -} -static void load_GL_ARB_draw_buffers_blend(GLADloadproc load) { - if(!GLAD_GL_ARB_draw_buffers_blend) return; - glad_glBlendEquationiARB = (PFNGLBLENDEQUATIONIARBPROC)load("glBlendEquationiARB"); - glad_glBlendEquationSeparateiARB = (PFNGLBLENDEQUATIONSEPARATEIARBPROC)load("glBlendEquationSeparateiARB"); - glad_glBlendFunciARB = (PFNGLBLENDFUNCIARBPROC)load("glBlendFunciARB"); - glad_glBlendFuncSeparateiARB = (PFNGLBLENDFUNCSEPARATEIARBPROC)load("glBlendFuncSeparateiARB"); -} -static void load_GL_ARB_fragment_program(GLADloadproc load) { - if(!GLAD_GL_ARB_fragment_program) return; - glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)load("glProgramStringARB"); - glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)load("glBindProgramARB"); - glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)load("glDeleteProgramsARB"); - glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)load("glGenProgramsARB"); - glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)load("glProgramEnvParameter4dARB"); - glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)load("glProgramEnvParameter4dvARB"); - glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)load("glProgramEnvParameter4fARB"); - glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)load("glProgramEnvParameter4fvARB"); - glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)load("glProgramLocalParameter4dARB"); - glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)load("glProgramLocalParameter4dvARB"); - glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)load("glProgramLocalParameter4fARB"); - glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)load("glProgramLocalParameter4fvARB"); - glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)load("glGetProgramEnvParameterdvARB"); - glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)load("glGetProgramEnvParameterfvARB"); - glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)load("glGetProgramLocalParameterdvARB"); - glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)load("glGetProgramLocalParameterfvARB"); - glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)load("glGetProgramivARB"); - glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)load("glGetProgramStringARB"); - glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC)load("glIsProgramARB"); -} -static void load_GL_ARB_framebuffer_object(GLADloadproc load) { - if(!GLAD_GL_ARB_framebuffer_object) return; - glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); - glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); - glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); - glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); - glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); - glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); - glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); - glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); - glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); - glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); - glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); - glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); - glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); - glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); - glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); - glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); - glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); - glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); - glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); - glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); -} -static void load_GL_ARB_multisample(GLADloadproc load) { - if(!GLAD_GL_ARB_multisample) return; - glad_glSampleCoverageARB = (PFNGLSAMPLECOVERAGEARBPROC)load("glSampleCoverageARB"); -} -static void load_GL_ARB_sample_locations(GLADloadproc load) { - if(!GLAD_GL_ARB_sample_locations) return; - glad_glFramebufferSampleLocationsfvARB = (PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)load("glFramebufferSampleLocationsfvARB"); - glad_glNamedFramebufferSampleLocationsfvARB = (PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC)load("glNamedFramebufferSampleLocationsfvARB"); - glad_glEvaluateDepthValuesARB = (PFNGLEVALUATEDEPTHVALUESARBPROC)load("glEvaluateDepthValuesARB"); -} -static void load_GL_ARB_texture_compression(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_compression) return; - glad_glCompressedTexImage3DARB = (PFNGLCOMPRESSEDTEXIMAGE3DARBPROC)load("glCompressedTexImage3DARB"); - glad_glCompressedTexImage2DARB = (PFNGLCOMPRESSEDTEXIMAGE2DARBPROC)load("glCompressedTexImage2DARB"); - glad_glCompressedTexImage1DARB = (PFNGLCOMPRESSEDTEXIMAGE1DARBPROC)load("glCompressedTexImage1DARB"); - glad_glCompressedTexSubImage3DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC)load("glCompressedTexSubImage3DARB"); - glad_glCompressedTexSubImage2DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC)load("glCompressedTexSubImage2DARB"); - glad_glCompressedTexSubImage1DARB = (PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC)load("glCompressedTexSubImage1DARB"); - glad_glGetCompressedTexImageARB = (PFNGLGETCOMPRESSEDTEXIMAGEARBPROC)load("glGetCompressedTexImageARB"); -} -static void load_GL_ARB_texture_multisample(GLADloadproc load) { - if(!GLAD_GL_ARB_texture_multisample) return; - glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); - glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); - glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); - glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); -} -static void load_GL_ARB_uniform_buffer_object(GLADloadproc load) { - if(!GLAD_GL_ARB_uniform_buffer_object) return; - glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); - glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); - glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); - glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); - glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); - glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); - glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); - glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); - glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); - glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); -} -static void load_GL_ARB_vertex_array_object(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_array_object) return; - glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); - glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); - glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); - glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); -} -static void load_GL_ARB_vertex_attrib_binding(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_attrib_binding) return; - glad_glBindVertexBuffer = (PFNGLBINDVERTEXBUFFERPROC)load("glBindVertexBuffer"); - glad_glVertexAttribFormat = (PFNGLVERTEXATTRIBFORMATPROC)load("glVertexAttribFormat"); - glad_glVertexAttribIFormat = (PFNGLVERTEXATTRIBIFORMATPROC)load("glVertexAttribIFormat"); - glad_glVertexAttribLFormat = (PFNGLVERTEXATTRIBLFORMATPROC)load("glVertexAttribLFormat"); - glad_glVertexAttribBinding = (PFNGLVERTEXATTRIBBINDINGPROC)load("glVertexAttribBinding"); - glad_glVertexBindingDivisor = (PFNGLVERTEXBINDINGDIVISORPROC)load("glVertexBindingDivisor"); -} -static void load_GL_ARB_vertex_buffer_object(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_buffer_object) return; - glad_glBindBufferARB = (PFNGLBINDBUFFERARBPROC)load("glBindBufferARB"); - glad_glDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC)load("glDeleteBuffersARB"); - glad_glGenBuffersARB = (PFNGLGENBUFFERSARBPROC)load("glGenBuffersARB"); - glad_glIsBufferARB = (PFNGLISBUFFERARBPROC)load("glIsBufferARB"); - glad_glBufferDataARB = (PFNGLBUFFERDATAARBPROC)load("glBufferDataARB"); - glad_glBufferSubDataARB = (PFNGLBUFFERSUBDATAARBPROC)load("glBufferSubDataARB"); - glad_glGetBufferSubDataARB = (PFNGLGETBUFFERSUBDATAARBPROC)load("glGetBufferSubDataARB"); - glad_glMapBufferARB = (PFNGLMAPBUFFERARBPROC)load("glMapBufferARB"); - glad_glUnmapBufferARB = (PFNGLUNMAPBUFFERARBPROC)load("glUnmapBufferARB"); - glad_glGetBufferParameterivARB = (PFNGLGETBUFFERPARAMETERIVARBPROC)load("glGetBufferParameterivARB"); - glad_glGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)load("glGetBufferPointervARB"); -} -static void load_GL_ARB_vertex_program(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_program) return; - glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)load("glVertexAttrib1dARB"); - glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)load("glVertexAttrib1dvARB"); - glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)load("glVertexAttrib1fARB"); - glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)load("glVertexAttrib1fvARB"); - glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)load("glVertexAttrib1sARB"); - glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)load("glVertexAttrib1svARB"); - glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)load("glVertexAttrib2dARB"); - glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)load("glVertexAttrib2dvARB"); - glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)load("glVertexAttrib2fARB"); - glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)load("glVertexAttrib2fvARB"); - glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)load("glVertexAttrib2sARB"); - glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)load("glVertexAttrib2svARB"); - glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)load("glVertexAttrib3dARB"); - glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)load("glVertexAttrib3dvARB"); - glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)load("glVertexAttrib3fARB"); - glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)load("glVertexAttrib3fvARB"); - glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)load("glVertexAttrib3sARB"); - glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)load("glVertexAttrib3svARB"); - glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)load("glVertexAttrib4NbvARB"); - glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)load("glVertexAttrib4NivARB"); - glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)load("glVertexAttrib4NsvARB"); - glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)load("glVertexAttrib4NubARB"); - glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)load("glVertexAttrib4NubvARB"); - glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)load("glVertexAttrib4NuivARB"); - glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)load("glVertexAttrib4NusvARB"); - glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)load("glVertexAttrib4bvARB"); - glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)load("glVertexAttrib4dARB"); - glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)load("glVertexAttrib4dvARB"); - glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)load("glVertexAttrib4fARB"); - glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)load("glVertexAttrib4fvARB"); - glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)load("glVertexAttrib4ivARB"); - glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)load("glVertexAttrib4sARB"); - glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)load("glVertexAttrib4svARB"); - glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)load("glVertexAttrib4ubvARB"); - glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)load("glVertexAttrib4uivARB"); - glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)load("glVertexAttrib4usvARB"); - glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)load("glVertexAttribPointerARB"); - glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)load("glEnableVertexAttribArrayARB"); - glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)load("glDisableVertexAttribArrayARB"); - glad_glProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)load("glProgramStringARB"); - glad_glBindProgramARB = (PFNGLBINDPROGRAMARBPROC)load("glBindProgramARB"); - glad_glDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC)load("glDeleteProgramsARB"); - glad_glGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)load("glGenProgramsARB"); - glad_glProgramEnvParameter4dARB = (PFNGLPROGRAMENVPARAMETER4DARBPROC)load("glProgramEnvParameter4dARB"); - glad_glProgramEnvParameter4dvARB = (PFNGLPROGRAMENVPARAMETER4DVARBPROC)load("glProgramEnvParameter4dvARB"); - glad_glProgramEnvParameter4fARB = (PFNGLPROGRAMENVPARAMETER4FARBPROC)load("glProgramEnvParameter4fARB"); - glad_glProgramEnvParameter4fvARB = (PFNGLPROGRAMENVPARAMETER4FVARBPROC)load("glProgramEnvParameter4fvARB"); - glad_glProgramLocalParameter4dARB = (PFNGLPROGRAMLOCALPARAMETER4DARBPROC)load("glProgramLocalParameter4dARB"); - glad_glProgramLocalParameter4dvARB = (PFNGLPROGRAMLOCALPARAMETER4DVARBPROC)load("glProgramLocalParameter4dvARB"); - glad_glProgramLocalParameter4fARB = (PFNGLPROGRAMLOCALPARAMETER4FARBPROC)load("glProgramLocalParameter4fARB"); - glad_glProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)load("glProgramLocalParameter4fvARB"); - glad_glGetProgramEnvParameterdvARB = (PFNGLGETPROGRAMENVPARAMETERDVARBPROC)load("glGetProgramEnvParameterdvARB"); - glad_glGetProgramEnvParameterfvARB = (PFNGLGETPROGRAMENVPARAMETERFVARBPROC)load("glGetProgramEnvParameterfvARB"); - glad_glGetProgramLocalParameterdvARB = (PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC)load("glGetProgramLocalParameterdvARB"); - glad_glGetProgramLocalParameterfvARB = (PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC)load("glGetProgramLocalParameterfvARB"); - glad_glGetProgramivARB = (PFNGLGETPROGRAMIVARBPROC)load("glGetProgramivARB"); - glad_glGetProgramStringARB = (PFNGLGETPROGRAMSTRINGARBPROC)load("glGetProgramStringARB"); - glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)load("glGetVertexAttribdvARB"); - glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)load("glGetVertexAttribfvARB"); - glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)load("glGetVertexAttribivARB"); - glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)load("glGetVertexAttribPointervARB"); - glad_glIsProgramARB = (PFNGLISPROGRAMARBPROC)load("glIsProgramARB"); -} -static void load_GL_ARB_vertex_shader(GLADloadproc load) { - if(!GLAD_GL_ARB_vertex_shader) return; - glad_glVertexAttrib1fARB = (PFNGLVERTEXATTRIB1FARBPROC)load("glVertexAttrib1fARB"); - glad_glVertexAttrib1sARB = (PFNGLVERTEXATTRIB1SARBPROC)load("glVertexAttrib1sARB"); - glad_glVertexAttrib1dARB = (PFNGLVERTEXATTRIB1DARBPROC)load("glVertexAttrib1dARB"); - glad_glVertexAttrib2fARB = (PFNGLVERTEXATTRIB2FARBPROC)load("glVertexAttrib2fARB"); - glad_glVertexAttrib2sARB = (PFNGLVERTEXATTRIB2SARBPROC)load("glVertexAttrib2sARB"); - glad_glVertexAttrib2dARB = (PFNGLVERTEXATTRIB2DARBPROC)load("glVertexAttrib2dARB"); - glad_glVertexAttrib3fARB = (PFNGLVERTEXATTRIB3FARBPROC)load("glVertexAttrib3fARB"); - glad_glVertexAttrib3sARB = (PFNGLVERTEXATTRIB3SARBPROC)load("glVertexAttrib3sARB"); - glad_glVertexAttrib3dARB = (PFNGLVERTEXATTRIB3DARBPROC)load("glVertexAttrib3dARB"); - glad_glVertexAttrib4fARB = (PFNGLVERTEXATTRIB4FARBPROC)load("glVertexAttrib4fARB"); - glad_glVertexAttrib4sARB = (PFNGLVERTEXATTRIB4SARBPROC)load("glVertexAttrib4sARB"); - glad_glVertexAttrib4dARB = (PFNGLVERTEXATTRIB4DARBPROC)load("glVertexAttrib4dARB"); - glad_glVertexAttrib4NubARB = (PFNGLVERTEXATTRIB4NUBARBPROC)load("glVertexAttrib4NubARB"); - glad_glVertexAttrib1fvARB = (PFNGLVERTEXATTRIB1FVARBPROC)load("glVertexAttrib1fvARB"); - glad_glVertexAttrib1svARB = (PFNGLVERTEXATTRIB1SVARBPROC)load("glVertexAttrib1svARB"); - glad_glVertexAttrib1dvARB = (PFNGLVERTEXATTRIB1DVARBPROC)load("glVertexAttrib1dvARB"); - glad_glVertexAttrib2fvARB = (PFNGLVERTEXATTRIB2FVARBPROC)load("glVertexAttrib2fvARB"); - glad_glVertexAttrib2svARB = (PFNGLVERTEXATTRIB2SVARBPROC)load("glVertexAttrib2svARB"); - glad_glVertexAttrib2dvARB = (PFNGLVERTEXATTRIB2DVARBPROC)load("glVertexAttrib2dvARB"); - glad_glVertexAttrib3fvARB = (PFNGLVERTEXATTRIB3FVARBPROC)load("glVertexAttrib3fvARB"); - glad_glVertexAttrib3svARB = (PFNGLVERTEXATTRIB3SVARBPROC)load("glVertexAttrib3svARB"); - glad_glVertexAttrib3dvARB = (PFNGLVERTEXATTRIB3DVARBPROC)load("glVertexAttrib3dvARB"); - glad_glVertexAttrib4fvARB = (PFNGLVERTEXATTRIB4FVARBPROC)load("glVertexAttrib4fvARB"); - glad_glVertexAttrib4svARB = (PFNGLVERTEXATTRIB4SVARBPROC)load("glVertexAttrib4svARB"); - glad_glVertexAttrib4dvARB = (PFNGLVERTEXATTRIB4DVARBPROC)load("glVertexAttrib4dvARB"); - glad_glVertexAttrib4ivARB = (PFNGLVERTEXATTRIB4IVARBPROC)load("glVertexAttrib4ivARB"); - glad_glVertexAttrib4bvARB = (PFNGLVERTEXATTRIB4BVARBPROC)load("glVertexAttrib4bvARB"); - glad_glVertexAttrib4ubvARB = (PFNGLVERTEXATTRIB4UBVARBPROC)load("glVertexAttrib4ubvARB"); - glad_glVertexAttrib4usvARB = (PFNGLVERTEXATTRIB4USVARBPROC)load("glVertexAttrib4usvARB"); - glad_glVertexAttrib4uivARB = (PFNGLVERTEXATTRIB4UIVARBPROC)load("glVertexAttrib4uivARB"); - glad_glVertexAttrib4NbvARB = (PFNGLVERTEXATTRIB4NBVARBPROC)load("glVertexAttrib4NbvARB"); - glad_glVertexAttrib4NsvARB = (PFNGLVERTEXATTRIB4NSVARBPROC)load("glVertexAttrib4NsvARB"); - glad_glVertexAttrib4NivARB = (PFNGLVERTEXATTRIB4NIVARBPROC)load("glVertexAttrib4NivARB"); - glad_glVertexAttrib4NubvARB = (PFNGLVERTEXATTRIB4NUBVARBPROC)load("glVertexAttrib4NubvARB"); - glad_glVertexAttrib4NusvARB = (PFNGLVERTEXATTRIB4NUSVARBPROC)load("glVertexAttrib4NusvARB"); - glad_glVertexAttrib4NuivARB = (PFNGLVERTEXATTRIB4NUIVARBPROC)load("glVertexAttrib4NuivARB"); - glad_glVertexAttribPointerARB = (PFNGLVERTEXATTRIBPOINTERARBPROC)load("glVertexAttribPointerARB"); - glad_glEnableVertexAttribArrayARB = (PFNGLENABLEVERTEXATTRIBARRAYARBPROC)load("glEnableVertexAttribArrayARB"); - glad_glDisableVertexAttribArrayARB = (PFNGLDISABLEVERTEXATTRIBARRAYARBPROC)load("glDisableVertexAttribArrayARB"); - glad_glBindAttribLocationARB = (PFNGLBINDATTRIBLOCATIONARBPROC)load("glBindAttribLocationARB"); - glad_glGetActiveAttribARB = (PFNGLGETACTIVEATTRIBARBPROC)load("glGetActiveAttribARB"); - glad_glGetAttribLocationARB = (PFNGLGETATTRIBLOCATIONARBPROC)load("glGetAttribLocationARB"); - glad_glGetVertexAttribdvARB = (PFNGLGETVERTEXATTRIBDVARBPROC)load("glGetVertexAttribdvARB"); - glad_glGetVertexAttribfvARB = (PFNGLGETVERTEXATTRIBFVARBPROC)load("glGetVertexAttribfvARB"); - glad_glGetVertexAttribivARB = (PFNGLGETVERTEXATTRIBIVARBPROC)load("glGetVertexAttribivARB"); - glad_glGetVertexAttribPointervARB = (PFNGLGETVERTEXATTRIBPOINTERVARBPROC)load("glGetVertexAttribPointervARB"); -} -static void load_GL_ATI_element_array(GLADloadproc load) { - if(!GLAD_GL_ATI_element_array) return; - glad_glElementPointerATI = (PFNGLELEMENTPOINTERATIPROC)load("glElementPointerATI"); - glad_glDrawElementArrayATI = (PFNGLDRAWELEMENTARRAYATIPROC)load("glDrawElementArrayATI"); - glad_glDrawRangeElementArrayATI = (PFNGLDRAWRANGEELEMENTARRAYATIPROC)load("glDrawRangeElementArrayATI"); -} -static void load_GL_ATI_fragment_shader(GLADloadproc load) { - if(!GLAD_GL_ATI_fragment_shader) return; - glad_glGenFragmentShadersATI = (PFNGLGENFRAGMENTSHADERSATIPROC)load("glGenFragmentShadersATI"); - glad_glBindFragmentShaderATI = (PFNGLBINDFRAGMENTSHADERATIPROC)load("glBindFragmentShaderATI"); - glad_glDeleteFragmentShaderATI = (PFNGLDELETEFRAGMENTSHADERATIPROC)load("glDeleteFragmentShaderATI"); - glad_glBeginFragmentShaderATI = (PFNGLBEGINFRAGMENTSHADERATIPROC)load("glBeginFragmentShaderATI"); - glad_glEndFragmentShaderATI = (PFNGLENDFRAGMENTSHADERATIPROC)load("glEndFragmentShaderATI"); - glad_glPassTexCoordATI = (PFNGLPASSTEXCOORDATIPROC)load("glPassTexCoordATI"); - glad_glSampleMapATI = (PFNGLSAMPLEMAPATIPROC)load("glSampleMapATI"); - glad_glColorFragmentOp1ATI = (PFNGLCOLORFRAGMENTOP1ATIPROC)load("glColorFragmentOp1ATI"); - glad_glColorFragmentOp2ATI = (PFNGLCOLORFRAGMENTOP2ATIPROC)load("glColorFragmentOp2ATI"); - glad_glColorFragmentOp3ATI = (PFNGLCOLORFRAGMENTOP3ATIPROC)load("glColorFragmentOp3ATI"); - glad_glAlphaFragmentOp1ATI = (PFNGLALPHAFRAGMENTOP1ATIPROC)load("glAlphaFragmentOp1ATI"); - glad_glAlphaFragmentOp2ATI = (PFNGLALPHAFRAGMENTOP2ATIPROC)load("glAlphaFragmentOp2ATI"); - glad_glAlphaFragmentOp3ATI = (PFNGLALPHAFRAGMENTOP3ATIPROC)load("glAlphaFragmentOp3ATI"); - glad_glSetFragmentShaderConstantATI = (PFNGLSETFRAGMENTSHADERCONSTANTATIPROC)load("glSetFragmentShaderConstantATI"); -} -static void load_GL_ATI_vertex_array_object(GLADloadproc load) { - if(!GLAD_GL_ATI_vertex_array_object) return; - glad_glNewObjectBufferATI = (PFNGLNEWOBJECTBUFFERATIPROC)load("glNewObjectBufferATI"); - glad_glIsObjectBufferATI = (PFNGLISOBJECTBUFFERATIPROC)load("glIsObjectBufferATI"); - glad_glUpdateObjectBufferATI = (PFNGLUPDATEOBJECTBUFFERATIPROC)load("glUpdateObjectBufferATI"); - glad_glGetObjectBufferfvATI = (PFNGLGETOBJECTBUFFERFVATIPROC)load("glGetObjectBufferfvATI"); - glad_glGetObjectBufferivATI = (PFNGLGETOBJECTBUFFERIVATIPROC)load("glGetObjectBufferivATI"); - glad_glFreeObjectBufferATI = (PFNGLFREEOBJECTBUFFERATIPROC)load("glFreeObjectBufferATI"); - glad_glArrayObjectATI = (PFNGLARRAYOBJECTATIPROC)load("glArrayObjectATI"); - glad_glGetArrayObjectfvATI = (PFNGLGETARRAYOBJECTFVATIPROC)load("glGetArrayObjectfvATI"); - glad_glGetArrayObjectivATI = (PFNGLGETARRAYOBJECTIVATIPROC)load("glGetArrayObjectivATI"); - glad_glVariantArrayObjectATI = (PFNGLVARIANTARRAYOBJECTATIPROC)load("glVariantArrayObjectATI"); - glad_glGetVariantArrayObjectfvATI = (PFNGLGETVARIANTARRAYOBJECTFVATIPROC)load("glGetVariantArrayObjectfvATI"); - glad_glGetVariantArrayObjectivATI = (PFNGLGETVARIANTARRAYOBJECTIVATIPROC)load("glGetVariantArrayObjectivATI"); -} -static void load_GL_EXT_blend_color(GLADloadproc load) { - if(!GLAD_GL_EXT_blend_color) return; - glad_glBlendColorEXT = (PFNGLBLENDCOLOREXTPROC)load("glBlendColorEXT"); -} -static void load_GL_EXT_blend_equation_separate(GLADloadproc load) { - if(!GLAD_GL_EXT_blend_equation_separate) return; - glad_glBlendEquationSeparateEXT = (PFNGLBLENDEQUATIONSEPARATEEXTPROC)load("glBlendEquationSeparateEXT"); -} -static void load_GL_EXT_blend_func_separate(GLADloadproc load) { - if(!GLAD_GL_EXT_blend_func_separate) return; - glad_glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC)load("glBlendFuncSeparateEXT"); -} -static void load_GL_EXT_debug_marker(GLADloadproc load) { - if(!GLAD_GL_EXT_debug_marker) return; - glad_glInsertEventMarkerEXT = (PFNGLINSERTEVENTMARKEREXTPROC)load("glInsertEventMarkerEXT"); - glad_glPushGroupMarkerEXT = (PFNGLPUSHGROUPMARKEREXTPROC)load("glPushGroupMarkerEXT"); - glad_glPopGroupMarkerEXT = (PFNGLPOPGROUPMARKEREXTPROC)load("glPopGroupMarkerEXT"); -} -static void load_GL_EXT_framebuffer_blit(GLADloadproc load) { - if(!GLAD_GL_EXT_framebuffer_blit) return; - glad_glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)load("glBlitFramebufferEXT"); -} -static void load_GL_EXT_framebuffer_multisample(GLADloadproc load) { - if(!GLAD_GL_EXT_framebuffer_multisample) return; - glad_glRenderbufferStorageMultisampleEXT = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)load("glRenderbufferStorageMultisampleEXT"); -} -static void load_GL_EXT_framebuffer_object(GLADloadproc load) { - if(!GLAD_GL_EXT_framebuffer_object) return; - glad_glIsRenderbufferEXT = (PFNGLISRENDERBUFFEREXTPROC)load("glIsRenderbufferEXT"); - glad_glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)load("glBindRenderbufferEXT"); - glad_glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)load("glDeleteRenderbuffersEXT"); - glad_glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)load("glGenRenderbuffersEXT"); - glad_glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)load("glRenderbufferStorageEXT"); - glad_glGetRenderbufferParameterivEXT = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)load("glGetRenderbufferParameterivEXT"); - glad_glIsFramebufferEXT = (PFNGLISFRAMEBUFFEREXTPROC)load("glIsFramebufferEXT"); - glad_glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)load("glBindFramebufferEXT"); - glad_glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)load("glDeleteFramebuffersEXT"); - glad_glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)load("glGenFramebuffersEXT"); - glad_glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)load("glCheckFramebufferStatusEXT"); - glad_glFramebufferTexture1DEXT = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC)load("glFramebufferTexture1DEXT"); - glad_glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)load("glFramebufferTexture2DEXT"); - glad_glFramebufferTexture3DEXT = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC)load("glFramebufferTexture3DEXT"); - glad_glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)load("glFramebufferRenderbufferEXT"); - glad_glGetFramebufferAttachmentParameterivEXT = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)load("glGetFramebufferAttachmentParameterivEXT"); - glad_glGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC)load("glGenerateMipmapEXT"); -} -static void load_GL_EXT_vertex_array(GLADloadproc load) { - if(!GLAD_GL_EXT_vertex_array) return; - glad_glArrayElementEXT = (PFNGLARRAYELEMENTEXTPROC)load("glArrayElementEXT"); - glad_glColorPointerEXT = (PFNGLCOLORPOINTEREXTPROC)load("glColorPointerEXT"); - glad_glDrawArraysEXT = (PFNGLDRAWARRAYSEXTPROC)load("glDrawArraysEXT"); - glad_glEdgeFlagPointerEXT = (PFNGLEDGEFLAGPOINTEREXTPROC)load("glEdgeFlagPointerEXT"); - glad_glGetPointervEXT = (PFNGLGETPOINTERVEXTPROC)load("glGetPointervEXT"); - glad_glIndexPointerEXT = (PFNGLINDEXPOINTEREXTPROC)load("glIndexPointerEXT"); - glad_glNormalPointerEXT = (PFNGLNORMALPOINTEREXTPROC)load("glNormalPointerEXT"); - glad_glTexCoordPointerEXT = (PFNGLTEXCOORDPOINTEREXTPROC)load("glTexCoordPointerEXT"); - glad_glVertexPointerEXT = (PFNGLVERTEXPOINTEREXTPROC)load("glVertexPointerEXT"); -} -static void load_GL_EXT_vertex_shader(GLADloadproc load) { - if(!GLAD_GL_EXT_vertex_shader) return; - glad_glBeginVertexShaderEXT = (PFNGLBEGINVERTEXSHADEREXTPROC)load("glBeginVertexShaderEXT"); - glad_glEndVertexShaderEXT = (PFNGLENDVERTEXSHADEREXTPROC)load("glEndVertexShaderEXT"); - glad_glBindVertexShaderEXT = (PFNGLBINDVERTEXSHADEREXTPROC)load("glBindVertexShaderEXT"); - glad_glGenVertexShadersEXT = (PFNGLGENVERTEXSHADERSEXTPROC)load("glGenVertexShadersEXT"); - glad_glDeleteVertexShaderEXT = (PFNGLDELETEVERTEXSHADEREXTPROC)load("glDeleteVertexShaderEXT"); - glad_glShaderOp1EXT = (PFNGLSHADEROP1EXTPROC)load("glShaderOp1EXT"); - glad_glShaderOp2EXT = (PFNGLSHADEROP2EXTPROC)load("glShaderOp2EXT"); - glad_glShaderOp3EXT = (PFNGLSHADEROP3EXTPROC)load("glShaderOp3EXT"); - glad_glSwizzleEXT = (PFNGLSWIZZLEEXTPROC)load("glSwizzleEXT"); - glad_glWriteMaskEXT = (PFNGLWRITEMASKEXTPROC)load("glWriteMaskEXT"); - glad_glInsertComponentEXT = (PFNGLINSERTCOMPONENTEXTPROC)load("glInsertComponentEXT"); - glad_glExtractComponentEXT = (PFNGLEXTRACTCOMPONENTEXTPROC)load("glExtractComponentEXT"); - glad_glGenSymbolsEXT = (PFNGLGENSYMBOLSEXTPROC)load("glGenSymbolsEXT"); - glad_glSetInvariantEXT = (PFNGLSETINVARIANTEXTPROC)load("glSetInvariantEXT"); - glad_glSetLocalConstantEXT = (PFNGLSETLOCALCONSTANTEXTPROC)load("glSetLocalConstantEXT"); - glad_glVariantbvEXT = (PFNGLVARIANTBVEXTPROC)load("glVariantbvEXT"); - glad_glVariantsvEXT = (PFNGLVARIANTSVEXTPROC)load("glVariantsvEXT"); - glad_glVariantivEXT = (PFNGLVARIANTIVEXTPROC)load("glVariantivEXT"); - glad_glVariantfvEXT = (PFNGLVARIANTFVEXTPROC)load("glVariantfvEXT"); - glad_glVariantdvEXT = (PFNGLVARIANTDVEXTPROC)load("glVariantdvEXT"); - glad_glVariantubvEXT = (PFNGLVARIANTUBVEXTPROC)load("glVariantubvEXT"); - glad_glVariantusvEXT = (PFNGLVARIANTUSVEXTPROC)load("glVariantusvEXT"); - glad_glVariantuivEXT = (PFNGLVARIANTUIVEXTPROC)load("glVariantuivEXT"); - glad_glVariantPointerEXT = (PFNGLVARIANTPOINTEREXTPROC)load("glVariantPointerEXT"); - glad_glEnableVariantClientStateEXT = (PFNGLENABLEVARIANTCLIENTSTATEEXTPROC)load("glEnableVariantClientStateEXT"); - glad_glDisableVariantClientStateEXT = (PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC)load("glDisableVariantClientStateEXT"); - glad_glBindLightParameterEXT = (PFNGLBINDLIGHTPARAMETEREXTPROC)load("glBindLightParameterEXT"); - glad_glBindMaterialParameterEXT = (PFNGLBINDMATERIALPARAMETEREXTPROC)load("glBindMaterialParameterEXT"); - glad_glBindTexGenParameterEXT = (PFNGLBINDTEXGENPARAMETEREXTPROC)load("glBindTexGenParameterEXT"); - glad_glBindTextureUnitParameterEXT = (PFNGLBINDTEXTUREUNITPARAMETEREXTPROC)load("glBindTextureUnitParameterEXT"); - glad_glBindParameterEXT = (PFNGLBINDPARAMETEREXTPROC)load("glBindParameterEXT"); - glad_glIsVariantEnabledEXT = (PFNGLISVARIANTENABLEDEXTPROC)load("glIsVariantEnabledEXT"); - glad_glGetVariantBooleanvEXT = (PFNGLGETVARIANTBOOLEANVEXTPROC)load("glGetVariantBooleanvEXT"); - glad_glGetVariantIntegervEXT = (PFNGLGETVARIANTINTEGERVEXTPROC)load("glGetVariantIntegervEXT"); - glad_glGetVariantFloatvEXT = (PFNGLGETVARIANTFLOATVEXTPROC)load("glGetVariantFloatvEXT"); - glad_glGetVariantPointervEXT = (PFNGLGETVARIANTPOINTERVEXTPROC)load("glGetVariantPointervEXT"); - glad_glGetInvariantBooleanvEXT = (PFNGLGETINVARIANTBOOLEANVEXTPROC)load("glGetInvariantBooleanvEXT"); - glad_glGetInvariantIntegervEXT = (PFNGLGETINVARIANTINTEGERVEXTPROC)load("glGetInvariantIntegervEXT"); - glad_glGetInvariantFloatvEXT = (PFNGLGETINVARIANTFLOATVEXTPROC)load("glGetInvariantFloatvEXT"); - glad_glGetLocalConstantBooleanvEXT = (PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC)load("glGetLocalConstantBooleanvEXT"); - glad_glGetLocalConstantIntegervEXT = (PFNGLGETLOCALCONSTANTINTEGERVEXTPROC)load("glGetLocalConstantIntegervEXT"); - glad_glGetLocalConstantFloatvEXT = (PFNGLGETLOCALCONSTANTFLOATVEXTPROC)load("glGetLocalConstantFloatvEXT"); -} -static int find_extensionsGL(void) { - if (!get_exts()) return 0; - GLAD_GL_AMD_debug_output = has_ext("GL_AMD_debug_output"); - GLAD_GL_AMD_query_buffer_object = has_ext("GL_AMD_query_buffer_object"); - GLAD_GL_ARB_ES2_compatibility = has_ext("GL_ARB_ES2_compatibility"); - GLAD_GL_ARB_ES3_compatibility = has_ext("GL_ARB_ES3_compatibility"); - GLAD_GL_ARB_buffer_storage = has_ext("GL_ARB_buffer_storage"); - GLAD_GL_ARB_compatibility = has_ext("GL_ARB_compatibility"); - GLAD_GL_ARB_compressed_texture_pixel_storage = has_ext("GL_ARB_compressed_texture_pixel_storage"); - GLAD_GL_ARB_debug_output = has_ext("GL_ARB_debug_output"); - GLAD_GL_ARB_depth_buffer_float = has_ext("GL_ARB_depth_buffer_float"); - GLAD_GL_ARB_depth_clamp = has_ext("GL_ARB_depth_clamp"); - GLAD_GL_ARB_depth_texture = has_ext("GL_ARB_depth_texture"); - GLAD_GL_ARB_draw_buffers = has_ext("GL_ARB_draw_buffers"); - GLAD_GL_ARB_draw_buffers_blend = has_ext("GL_ARB_draw_buffers_blend"); - GLAD_GL_ARB_explicit_attrib_location = has_ext("GL_ARB_explicit_attrib_location"); - GLAD_GL_ARB_explicit_uniform_location = has_ext("GL_ARB_explicit_uniform_location"); - GLAD_GL_ARB_fragment_program = has_ext("GL_ARB_fragment_program"); - GLAD_GL_ARB_fragment_shader = has_ext("GL_ARB_fragment_shader"); - GLAD_GL_ARB_framebuffer_object = has_ext("GL_ARB_framebuffer_object"); - GLAD_GL_ARB_framebuffer_sRGB = has_ext("GL_ARB_framebuffer_sRGB"); - GLAD_GL_ARB_multisample = has_ext("GL_ARB_multisample"); - GLAD_GL_ARB_sample_locations = has_ext("GL_ARB_sample_locations"); - GLAD_GL_ARB_texture_compression = has_ext("GL_ARB_texture_compression"); - GLAD_GL_ARB_texture_float = has_ext("GL_ARB_texture_float"); - GLAD_GL_ARB_texture_multisample = has_ext("GL_ARB_texture_multisample"); - GLAD_GL_ARB_texture_non_power_of_two = has_ext("GL_ARB_texture_non_power_of_two"); - GLAD_GL_ARB_texture_rg = has_ext("GL_ARB_texture_rg"); - GLAD_GL_ARB_texture_swizzle = has_ext("GL_ARB_texture_swizzle"); - GLAD_GL_ARB_uniform_buffer_object = has_ext("GL_ARB_uniform_buffer_object"); - GLAD_GL_ARB_vertex_array_object = has_ext("GL_ARB_vertex_array_object"); - GLAD_GL_ARB_vertex_attrib_binding = has_ext("GL_ARB_vertex_attrib_binding"); - GLAD_GL_ARB_vertex_buffer_object = has_ext("GL_ARB_vertex_buffer_object"); - GLAD_GL_ARB_vertex_program = has_ext("GL_ARB_vertex_program"); - GLAD_GL_ARB_vertex_shader = has_ext("GL_ARB_vertex_shader"); - GLAD_GL_ATI_element_array = has_ext("GL_ATI_element_array"); - GLAD_GL_ATI_fragment_shader = has_ext("GL_ATI_fragment_shader"); - GLAD_GL_ATI_vertex_array_object = has_ext("GL_ATI_vertex_array_object"); - GLAD_GL_EXT_blend_color = has_ext("GL_EXT_blend_color"); - GLAD_GL_EXT_blend_equation_separate = has_ext("GL_EXT_blend_equation_separate"); - GLAD_GL_EXT_blend_func_separate = has_ext("GL_EXT_blend_func_separate"); - GLAD_GL_EXT_debug_marker = has_ext("GL_EXT_debug_marker"); - GLAD_GL_EXT_framebuffer_blit = has_ext("GL_EXT_framebuffer_blit"); - GLAD_GL_EXT_framebuffer_multisample = has_ext("GL_EXT_framebuffer_multisample"); - GLAD_GL_EXT_framebuffer_multisample_blit_scaled = has_ext("GL_EXT_framebuffer_multisample_blit_scaled"); - GLAD_GL_EXT_framebuffer_object = has_ext("GL_EXT_framebuffer_object"); - GLAD_GL_EXT_framebuffer_sRGB = has_ext("GL_EXT_framebuffer_sRGB"); - GLAD_GL_EXT_index_array_formats = has_ext("GL_EXT_index_array_formats"); - GLAD_GL_EXT_texture = has_ext("GL_EXT_texture"); - GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc"); - GLAD_GL_EXT_texture_sRGB = has_ext("GL_EXT_texture_sRGB"); - GLAD_GL_EXT_texture_swizzle = has_ext("GL_EXT_texture_swizzle"); - GLAD_GL_EXT_vertex_array = has_ext("GL_EXT_vertex_array"); - GLAD_GL_EXT_vertex_shader = has_ext("GL_EXT_vertex_shader"); - free_exts(); - return 1; -} - -static void find_coreGL(void) { - - /* Thank you @elmindreda - * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 - * https://github.com/glfw/glfw/blob/master/src/context.c#L36 - */ - int i, major, minor; - - const char* version; - const char* prefixes[] = { - "OpenGL ES-CM ", - "OpenGL ES-CL ", - "OpenGL ES ", - NULL - }; - - version = (const char*) glGetString(GL_VERSION); - if (!version) return; - - for (i = 0; prefixes[i]; i++) { - const size_t length = strlen(prefixes[i]); - if (strncmp(version, prefixes[i], length) == 0) { - version += length; - break; - } - } - -/* PR #18 */ -#ifdef _MSC_VER - sscanf_s(version, "%d.%d", &major, &minor); -#else - sscanf(version, "%d.%d", &major, &minor); -#endif - - GLVersion.major = major; GLVersion.minor = minor; - max_loaded_major = major; max_loaded_minor = minor; - GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; - GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; - GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; - GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; - GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; - GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; - GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; - GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; - GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; - GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; - GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; - GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; - if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 3)) { - max_loaded_major = 3; - max_loaded_minor = 3; - } -} - -int gladLoadGLLoader(GLADloadproc load) { - GLVersion.major = 0; GLVersion.minor = 0; - glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - if(glGetString == NULL) return 0; - if(glGetString(GL_VERSION) == NULL) return 0; - find_coreGL(); - load_GL_VERSION_1_0(load); - load_GL_VERSION_1_1(load); - load_GL_VERSION_1_2(load); - load_GL_VERSION_1_3(load); - load_GL_VERSION_1_4(load); - load_GL_VERSION_1_5(load); - load_GL_VERSION_2_0(load); - load_GL_VERSION_2_1(load); - load_GL_VERSION_3_0(load); - load_GL_VERSION_3_1(load); - load_GL_VERSION_3_2(load); - load_GL_VERSION_3_3(load); - - if (!find_extensionsGL()) return 0; - load_GL_AMD_debug_output(load); - load_GL_ARB_ES2_compatibility(load); - load_GL_ARB_buffer_storage(load); - load_GL_ARB_debug_output(load); - load_GL_ARB_draw_buffers(load); - load_GL_ARB_draw_buffers_blend(load); - load_GL_ARB_fragment_program(load); - load_GL_ARB_framebuffer_object(load); - load_GL_ARB_multisample(load); - load_GL_ARB_sample_locations(load); - load_GL_ARB_texture_compression(load); - load_GL_ARB_texture_multisample(load); - load_GL_ARB_uniform_buffer_object(load); - load_GL_ARB_vertex_array_object(load); - load_GL_ARB_vertex_attrib_binding(load); - load_GL_ARB_vertex_buffer_object(load); - load_GL_ARB_vertex_program(load); - load_GL_ARB_vertex_shader(load); - load_GL_ATI_element_array(load); - load_GL_ATI_fragment_shader(load); - load_GL_ATI_vertex_array_object(load); - load_GL_EXT_blend_color(load); - load_GL_EXT_blend_equation_separate(load); - load_GL_EXT_blend_func_separate(load); - load_GL_EXT_debug_marker(load); - load_GL_EXT_framebuffer_blit(load); - load_GL_EXT_framebuffer_multisample(load); - load_GL_EXT_framebuffer_object(load); - load_GL_EXT_vertex_array(load); - load_GL_EXT_vertex_shader(load); - return GLVersion.major != 0 || GLVersion.minor != 0; -} - -#endif // GLAD_IMPLEMENTATION diff --git a/raylib-sys/raygui b/raylib-sys/raygui new file mode 160000 index 00000000..1d9fd310 --- /dev/null +++ b/raylib-sys/raygui @@ -0,0 +1 @@ +Subproject commit 1d9fd31074ce9ab06391e934cd4bc351475924d1 diff --git a/raylib-sys/raygui.h b/raylib-sys/raygui.h deleted file mode 100755 index 2cb7e03b..00000000 --- a/raylib-sys/raygui.h +++ /dev/null @@ -1,3946 +0,0 @@ -/******************************************************************************************* -* -* raygui v2.8 - A simple and easy-to-use immediate-mode gui library -* -* DESCRIPTION: -* -* raygui is a tools-dev-focused immediate-mode-gui library based on raylib but also -* available as a standalone library, as long as input and drawing functions are provided. -* -* Controls provided: -* -* # Container/separators Controls -* - WindowBox -* - GroupBox -* - Line -* - Panel -* -* # Basic Controls -* - Label -* - Button -* - LabelButton --> Label -* - ImageButton --> Button -* - ImageButtonEx --> Button -* - Toggle -* - ToggleGroup --> Toggle -* - CheckBox -* - ComboBox -* - DropdownBox -* - TextBox -* - TextBoxMulti -* - ValueBox --> TextBox -* - Spinner --> Button, ValueBox -* - Slider -* - SliderBar --> Slider -* - ProgressBar -* - StatusBar -* - ScrollBar -* - ScrollPanel -* - DummyRec -* - Grid -* -* # Advance Controls -* - ListView -* - ColorPicker --> ColorPanel, ColorBarHue -* - MessageBox --> Window, Label, Button -* - TextInputBox --> Window, Label, TextBox, Button -* -* It also provides a set of functions for styling the controls based on its properties (size, color). -* -* CONFIGURATION: -* -* #define RAYGUI_IMPLEMENTATION -* Generates the implementation of the library into the included file. -* If not defined, the library is in header only mode and can be included in other headers -* or source files without problems. But only ONE file should hold the implementation. -* -* #define RAYGUI_STATIC (defined by default) -* The generated implementation will stay private inside implementation file and all -* internal symbols and functions will only be visible inside that file. -* -* #define RAYGUI_STANDALONE -* Avoid raylib.h header inclusion in this file. Data types defined on raylib are defined -* internally in the library and input management and drawing functions must be provided by -* the user (check library implementation for further details). -* -* #define RAYGUI_SUPPORT_ICONS -* Includes riconsdata.h header defining a set of 128 icons (binary format) to be used on -* multiple controls and following raygui styles -* -* -* VERSIONS HISTORY: -* 2.8 (03-May-2020) Centralized rectangles drawing to GuiDrawRectangle() -* 2.7 (20-Feb-2020) Added possible tooltips API -* 2.6 (09-Sep-2019) ADDED: GuiTextInputBox() -* REDESIGNED: GuiListView*(), GuiDropdownBox(), GuiSlider*(), GuiProgressBar(), GuiMessageBox() -* REVIEWED: GuiTextBox(), GuiSpinner(), GuiValueBox(), GuiLoadStyle() -* Replaced property INNER_PADDING by TEXT_PADDING, renamed some properties -* Added 8 new custom styles ready to use -* Multiple minor tweaks and bugs corrected -* 2.5 (28-May-2019) Implemented extended GuiTextBox(), GuiValueBox(), GuiSpinner() -* 2.3 (29-Apr-2019) Added rIcons auxiliar library and support for it, multiple controls reviewed -* Refactor all controls drawing mechanism to use control state -* 2.2 (05-Feb-2019) Added GuiScrollBar(), GuiScrollPanel(), reviewed GuiListView(), removed Gui*Ex() controls -* 2.1 (26-Dec-2018) Redesign of GuiCheckBox(), GuiComboBox(), GuiDropdownBox(), GuiToggleGroup() > Use combined text string -* Complete redesign of style system (breaking change) -* 2.0 (08-Nov-2018) Support controls guiLock and custom fonts, reviewed GuiComboBox(), GuiListView()... -* 1.9 (09-Oct-2018) Controls review: GuiGrid(), GuiTextBox(), GuiTextBoxMulti(), GuiValueBox()... -* 1.8 (01-May-2018) Lot of rework and redesign to align with rGuiStyler and rGuiLayout -* 1.5 (21-Jun-2017) Working in an improved styles system -* 1.4 (15-Jun-2017) Rewritten all GUI functions (removed useless ones) -* 1.3 (12-Jun-2017) Redesigned styles system -* 1.1 (01-Jun-2017) Complete review of the library -* 1.0 (07-Jun-2016) Converted to header-only by Ramon Santamaria. -* 0.9 (07-Mar-2016) Reviewed and tested by Albert Martos, Ian Eito, Sergio Martinez and Ramon Santamaria. -* 0.8 (27-Aug-2015) Initial release. Implemented by Kevin Gato, Daniel Nicolás and Ramon Santamaria. -* -* CONTRIBUTORS: -* Ramon Santamaria: Supervision, review, redesign, update and maintenance... -* Vlad Adrian: Complete rewrite of GuiTextBox() to support extended features (2019) -* Sergio Martinez: Review, testing (2015) and redesign of multiple controls (2018) -* Adria Arranz: Testing and Implementation of additional controls (2018) -* Jordi Jorba: Testing and Implementation of additional controls (2018) -* Albert Martos: Review and testing of the library (2015) -* Ian Eito: Review and testing of the library (2015) -* Kevin Gato: Initial implementation of basic components (2014) -* Daniel Nicolas: Initial implementation of basic components (2014) -* -* -* LICENSE: zlib/libpng -* -* Copyright (c) 2014-2020 Ramon Santamaria (@raysan5) -* -* This software is provided "as-is", without any express or implied warranty. In no event -* will the authors be held liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, including commercial -* applications, and to alter it and redistribute it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not claim that you -* wrote the original software. If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be misrepresented -* as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -**********************************************************************************************/ - -#ifndef RAYGUI_H -#define RAYGUI_H - -#define RAYGUI_VERSION "2.6-dev" - -#if !defined(RAYGUI_STANDALONE) -#include "raylib.h" -#endif - -// Define functions scope to be used internally (static) or externally (extern) to the module including this file -#if defined(RAYGUI_STATIC) -#define RAYGUIDEF static // Functions just visible to module including this file -#else -#ifdef __cplusplus -#define RAYGUIDEF extern "C" // Functions visible from other files (no name mangling of functions in C++) -#else -// NOTE: By default any function declared in a C file is extern -#define RAYGUIDEF extern // Functions visible from other files -#endif -#endif - -#if defined(_WIN32) -#if defined(BUILD_LIBTYPE_SHARED) -#define RAYGUIDEF __declspec(dllexport) // We are building raygui as a Win32 shared library (.dll). -#elif defined(USE_LIBTYPE_SHARED) -#define RAYGUIDEF __declspec(dllimport) // We are using raygui as a Win32 shared library (.dll) -#endif -#endif - -#if !defined(RAYGUI_MALLOC) && !defined(RAYGUI_CALLOC) && !defined(RAYGUI_FREE) -#include // Required for: malloc(), calloc(), free() -#endif - -// Allow custom memory allocators -#ifndef RAYGUI_MALLOC -#define RAYGUI_MALLOC(sz) malloc(sz) -#endif -#ifndef RAYGUI_CALLOC -#define RAYGUI_CALLOC(n, sz) calloc(n, sz) -#endif -#ifndef RAYGUI_FREE -#define RAYGUI_FREE(p) free(p) -#endif - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -#define NUM_CONTROLS 16 // Number of standard controls -#define NUM_PROPS_DEFAULT 16 // Number of standard properties -#define NUM_PROPS_EXTENDED 8 // Number of extended properties - -#define TEXTEDIT_CURSOR_BLINK_FRAMES 20 // Text edit controls cursor blink timming - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -// NOTE: Some types are required for RAYGUI_STANDALONE usage -//---------------------------------------------------------------------------------- -#if defined(RAYGUI_STANDALONE) -#ifndef __cplusplus -// Boolean type -#ifndef true -typedef enum -{ - false, - true -} bool; -#endif -#endif - -// Vector2 type -typedef struct Vector2 -{ - float x; - float y; -} Vector2; - -// Vector3 type -typedef struct Vector3 -{ - float x; - float y; - float z; -} Vector3; - -// Color type, RGBA (32bit) -typedef struct Color -{ - unsigned char r; - unsigned char g; - unsigned char b; - unsigned char a; -} Color; - -// Rectangle type -typedef struct Rectangle -{ - float x; - float y; - float width; - float height; -} Rectangle; - -// TODO: Texture2D type is very coupled to raylib, mostly required by GuiImageButton() -// It should be redesigned to be provided by user -typedef struct Texture2D -{ - unsigned int id; // OpenGL texture id - int width; // Texture base width - int height; // Texture base height - int mipmaps; // Mipmap levels, 1 by default - int format; // Data format (PixelFormat type) -} Texture2D; - -// Font character info -typedef struct CharInfo CharInfo; - -// TODO: Font type is very coupled to raylib, mostly required by GuiLoadStyle() -// It should be redesigned to be provided by user -typedef struct Font -{ - int baseSize; // Base size (default chars height) - int charsCount; // Number of characters - Texture2D texture; // Characters texture atlas - Rectangle *recs; // Characters rectangles in texture - CharInfo *chars; // Characters info data -} Font; -#endif - -// Style property -typedef struct GuiStyleProp -{ - unsigned short controlId; - unsigned short propertyId; - int propertyValue; -} GuiStyleProp; - -// Gui control state -typedef enum -{ - GUI_STATE_NORMAL = 0, - GUI_STATE_FOCUSED, - GUI_STATE_PRESSED, - GUI_STATE_DISABLED, -} GuiControlState; - -// Gui control text alignment -typedef enum -{ - GUI_TEXT_ALIGN_LEFT = 0, - GUI_TEXT_ALIGN_CENTER, - GUI_TEXT_ALIGN_RIGHT, -} GuiTextAlignment; - -// Gui controls -typedef enum -{ - DEFAULT = 0, - LABEL, // LABELBUTTON - BUTTON, // IMAGEBUTTON - TOGGLE, // TOGGLEGROUP - SLIDER, // SLIDERBAR - PROGRESSBAR, - CHECKBOX, - COMBOBOX, - DROPDOWNBOX, - TEXTBOX, // TEXTBOXMULTI - VALUEBOX, - SPINNER, - LISTVIEW, - COLORPICKER, - SCROLLBAR, - STATUSBAR -} GuiControl; - -// Gui base properties for every control -typedef enum -{ - BORDER_COLOR_NORMAL = 0, - BASE_COLOR_NORMAL, - TEXT_COLOR_NORMAL, - BORDER_COLOR_FOCUSED, - BASE_COLOR_FOCUSED, - TEXT_COLOR_FOCUSED, - BORDER_COLOR_PRESSED, - BASE_COLOR_PRESSED, - TEXT_COLOR_PRESSED, - BORDER_COLOR_DISABLED, - BASE_COLOR_DISABLED, - TEXT_COLOR_DISABLED, - BORDER_WIDTH, - TEXT_PADDING, - TEXT_ALIGNMENT, - RESERVED -} GuiControlProperty; - -// Gui extended properties depend on control -// NOTE: We reserve a fixed size of additional properties per control - -// DEFAULT properties -typedef enum -{ - TEXT_SIZE = 16, - TEXT_SPACING, - LINE_COLOR, - BACKGROUND_COLOR, -} GuiDefaultProperty; - -// Label -//typedef enum { } GuiLabelProperty; - -// Button -//typedef enum { } GuiButtonProperty; - -// Toggle / ToggleGroup -typedef enum -{ - GROUP_PADDING = 16, -} GuiToggleProperty; - -// Slider / SliderBar -typedef enum -{ - SLIDER_WIDTH = 16, - SLIDER_PADDING -} GuiSliderProperty; - -// ProgressBar -typedef enum -{ - PROGRESS_PADDING = 16, -} GuiProgressBarProperty; - -// CheckBox -typedef enum -{ - CHECK_PADDING = 16 -} GuiCheckBoxProperty; - -// ComboBox -typedef enum -{ - COMBO_BUTTON_WIDTH = 16, - COMBO_BUTTON_PADDING -} GuiComboBoxProperty; - -// DropdownBox -typedef enum -{ - ARROW_PADDING = 16, - DROPDOWN_ITEMS_PADDING -} GuiDropdownBoxProperty; - -// TextBox / TextBoxMulti / ValueBox / Spinner -typedef enum -{ - TEXT_INNER_PADDING = 16, - TEXT_LINES_PADDING, - COLOR_SELECTED_FG, - COLOR_SELECTED_BG -} GuiTextBoxProperty; - -// Spinner -typedef enum -{ - SPIN_BUTTON_WIDTH = 16, - SPIN_BUTTON_PADDING, -} GuiSpinnerProperty; - -// ScrollBar -typedef enum -{ - ARROWS_SIZE = 16, - ARROWS_VISIBLE, - SCROLL_SLIDER_PADDING, - SCROLL_SLIDER_SIZE, - SCROLL_PADDING, - SCROLL_SPEED, -} GuiScrollBarProperty; - -// ScrollBar side -typedef enum -{ - SCROLLBAR_LEFT_SIDE = 0, - SCROLLBAR_RIGHT_SIDE -} GuiScrollBarSide; - -// ListView -typedef enum -{ - LIST_ITEMS_HEIGHT = 16, - LIST_ITEMS_PADDING, - SCROLLBAR_WIDTH, - SCROLLBAR_SIDE, -} GuiListViewProperty; - -// ColorPicker -typedef enum -{ - COLOR_SELECTOR_SIZE = 16, - HUEBAR_WIDTH, // Right hue bar width - HUEBAR_PADDING, // Right hue bar separation from panel - HUEBAR_SELECTOR_HEIGHT, // Right hue bar selector height - HUEBAR_SELECTOR_OVERFLOW // Right hue bar selector overflow -} GuiColorPickerProperty; - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -// ... - -//---------------------------------------------------------------------------------- -// Module Functions Declaration -//---------------------------------------------------------------------------------- - -// State modification functions -RAYGUIDEF void GuiEnable(void); // Enable gui controls (global state) -RAYGUIDEF void GuiDisable(void); // Disable gui controls (global state) -RAYGUIDEF void GuiLock(void); // Lock gui controls (global state) -RAYGUIDEF void GuiUnlock(void); // Unlock gui controls (global state) -RAYGUIDEF void GuiFade(float alpha); // Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f -RAYGUIDEF void GuiSetState(int state); // Set gui state (global state) -RAYGUIDEF int GuiGetState(void); // Get gui state (global state) - -// Font set/get functions -RAYGUIDEF void GuiSetFont(Font font); // Set gui custom font (global state) -RAYGUIDEF Font GuiGetFont(void); // Get gui custom font (global state) - -// Style set/get functions -RAYGUIDEF void GuiSetStyle(int control, int property, int value); // Set one style property -RAYGUIDEF int GuiGetStyle(int control, int property); // Get one style property - -// Tooltips set functions -RAYGUIDEF void GuiEnableTooltip(void); // Enable gui tooltips -RAYGUIDEF void GuiDisableTooltip(void); // Disable gui tooltips -RAYGUIDEF void GuiSetTooltip(const char *tooltip); // Set current tooltip for display -RAYGUIDEF void GuiClearTooltip(void); // Clear any tooltip registered - -// Container/separator controls, useful for controls organization -RAYGUIDEF bool GuiWindowBox(Rectangle bounds, const char *title); // Window Box control, shows a window that can be closed -RAYGUIDEF void GuiGroupBox(Rectangle bounds, const char *text); // Group Box control with text name -RAYGUIDEF void GuiLine(Rectangle bounds, const char *text); // Line separator control, could contain text -RAYGUIDEF void GuiPanel(Rectangle bounds); // Panel control, useful to group controls -RAYGUIDEF Rectangle GuiScrollPanel(Rectangle bounds, Rectangle content, Vector2 *scroll); // Scroll Panel control - -// Basic controls set -RAYGUIDEF void GuiLabel(Rectangle bounds, const char *text); // Label control, shows text -RAYGUIDEF bool GuiButton(Rectangle bounds, const char *text); // Button control, returns true when clicked -RAYGUIDEF bool GuiLabelButton(Rectangle bounds, const char *text); // Label button control, show true when clicked -RAYGUIDEF bool GuiImageButton(Rectangle bounds, const char *text, Texture2D texture); // Image button control, returns true when clicked -RAYGUIDEF bool GuiImageButtonEx(Rectangle bounds, const char *text, Texture2D texture, Rectangle texSource); // Image button extended control, returns true when clicked -RAYGUIDEF bool GuiToggle(Rectangle bounds, const char *text, bool active); // Toggle Button control, returns true when active -RAYGUIDEF int GuiToggleGroup(Rectangle bounds, const char *text, int active); // Toggle Group control, returns active toggle index -RAYGUIDEF bool GuiCheckBox(Rectangle bounds, const char *text, bool checked); // Check Box control, returns true when active -RAYGUIDEF int GuiComboBox(Rectangle bounds, const char *text, int active); // Combo Box control, returns selected item index -RAYGUIDEF bool GuiDropdownBox(Rectangle bounds, const char *text, int *active, bool editMode); // Dropdown Box control, returns selected item -RAYGUIDEF bool GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Spinner control, returns selected value -RAYGUIDEF bool GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Value Box control, updates input text with numbers -RAYGUIDEF bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode); // Text Box control, updates input text -RAYGUIDEF bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool editMode); // Text Box control with multiple lines -RAYGUIDEF float GuiSlider(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue); // Slider control, returns selected value -RAYGUIDEF float GuiSliderBar(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue); // Slider Bar control, returns selected value -RAYGUIDEF float GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue); // Progress Bar control, shows current progress value -RAYGUIDEF void GuiStatusBar(Rectangle bounds, const char *text); // Status Bar control, shows info text -RAYGUIDEF void GuiDummyRec(Rectangle bounds, const char *text); // Dummy control for placeholders -RAYGUIDEF int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue); // Scroll Bar control -RAYGUIDEF Vector2 GuiGrid(Rectangle bounds, float spacing, int subdivs); // Grid control - -// Advance controls set -RAYGUIDEF int GuiListView(Rectangle bounds, const char *text, int *scrollIndex, int active); // List View control, returns selected list item index -RAYGUIDEF int GuiListViewEx(Rectangle bounds, const char **text, int count, int *focus, int *scrollIndex, int active); // List View with extended parameters -RAYGUIDEF int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons); // Message Box control, displays a message -RAYGUIDEF int GuiTextInputBox(Rectangle bounds, const char *title, const char *message, const char *buttons, char *text); // Text Input Box control, ask for text -RAYGUIDEF Color GuiColorPicker(Rectangle bounds, Color color); // Color Picker control (multiple color controls) -RAYGUIDEF Color GuiColorPanel(Rectangle bounds, Color color); // Color Panel control -RAYGUIDEF float GuiColorBarAlpha(Rectangle bounds, float alpha); // Color Bar Alpha control -RAYGUIDEF float GuiColorBarHue(Rectangle bounds, float value); // Color Bar Hue control - -// Styles loading functions -RAYGUIDEF void GuiLoadStyle(const char *fileName); // Load style file (.rgs) -RAYGUIDEF void GuiLoadStyleDefault(void); // Load style default over global style - -/* -typedef GuiStyle (unsigned int *) -RAYGUIDEF GuiStyle LoadGuiStyle(const char *fileName); // Load style from file (.rgs) -RAYGUIDEF void UnloadGuiStyle(GuiStyle style); // Unload style -*/ - -RAYGUIDEF const char *GuiIconText(int iconId, const char *text); // Get text with icon id prepended (if supported) - -#if defined(RAYGUI_SUPPORT_ICONS) -// Gui icons functionality -RAYGUIDEF void GuiDrawIcon(int iconId, Vector2 position, int pixelSize, Color color); - -RAYGUIDEF unsigned int *GuiGetIcons(void); // Get full icons data pointer -RAYGUIDEF unsigned int *GuiGetIconData(int iconId); // Get icon bit data -RAYGUIDEF void GuiSetIconData(int iconId, unsigned int *data); // Set icon bit data - -RAYGUIDEF void GuiSetIconPixel(int iconId, int x, int y); // Set icon pixel value -RAYGUIDEF void GuiClearIconPixel(int iconId, int x, int y); // Clear icon pixel value -RAYGUIDEF bool GuiCheckIconPixel(int iconId, int x, int y); // Check icon pixel value -#endif - -#endif // RAYGUI_H - -/*********************************************************************************** -* -* RAYGUI IMPLEMENTATION -* -************************************************************************************/ - -#if defined(RAYGUI_IMPLEMENTATION) - -#if defined(RAYGUI_SUPPORT_ICONS) -#define RICONS_IMPLEMENTATION -#include "ricons.h" // Required for: raygui icons data -#endif - -#include // Required for: FILE, fopen(), fclose(), fprintf(), feof(), fscanf(), vsprintf() -#include // Required for: strlen() on GuiTextBox() -#include // Required for: roundf() on GuiColorPicker() - -#if defined(RAYGUI_STANDALONE) -#include // Required for: va_list, va_start(), vfprintf(), va_end() -#endif - -#ifdef __cplusplus -#define RAYGUI_CLITERAL(name) name -#else -#define RAYGUI_CLITERAL(name) (name) -#endif - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -//... - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -//---------------------------------------------------------------------------------- -// Gui control property style color element -typedef enum -{ - BORDER = 0, - BASE, - TEXT, - OTHER -} GuiPropertyElement; - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -static GuiControlState guiState = GUI_STATE_NORMAL; - -static Font guiFont = {0}; // Gui current font (WARNING: highly coupled to raylib) -static bool guiLocked = false; // Gui lock state (no inputs processed) -static float guiAlpha = 1.0f; // Gui element transpacency on drawing - -// Global gui style array (allocated on data segment by default) -// NOTE: In raygui we manage a single int array with all the possible style properties. -// When a new style is loaded, it loads over the global style... but default gui style -// could always be recovered with GuiLoadStyleDefault() -static unsigned int guiStyle[NUM_CONTROLS * (NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED)] = {0}; -static bool guiStyleLoaded = false; // Style loaded flag for lazy style initialization - -// Tooltips required variables -static const char *guiTooltip = NULL; // Gui tooltip currently active (user provided) -static bool guiTooltipEnabled = true; // Gui tooltips enabled - -//---------------------------------------------------------------------------------- -// Standalone Mode Functions Declaration -// -// NOTE: raygui depend on some raylib input and drawing functions -// To use raygui as standalone library, below functions must be defined by the user -//---------------------------------------------------------------------------------- -#if defined(RAYGUI_STANDALONE) - -#define KEY_RIGHT 262 -#define KEY_LEFT 263 -#define KEY_DOWN 264 -#define KEY_UP 265 -#define KEY_BACKSPACE 259 -#define KEY_ENTER 257 - -#define MOUSE_LEFT_BUTTON 0 - -// Input required functions -//------------------------------------------------------------------------------- -static Vector2 GetMousePosition(void); -static int GetMouseWheelMove(void); -static bool IsMouseButtonDown(int button); -static bool IsMouseButtonPressed(int button); -static bool IsMouseButtonReleased(int button); - -static bool IsKeyDown(int key); -static bool IsKeyPressed(int key); -static int GetKeyPressed(void); // -- GuiTextBox(), GuiTextBoxMulti(), GuiValueBox() -//------------------------------------------------------------------------------- - -// Drawing required functions -//------------------------------------------------------------------------------- -static void DrawRectangle(int x, int y, int width, int height, Color color); // -- GuiDrawRectangle(), GuiDrawIcon() - -static void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // -- GuiColorPicker() -static void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // -- GuiDropdownBox(), GuiScrollBar() -static void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Color tint); // -- GuiImageButtonEx() - -static void DrawTextRec(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint); // -- GuiTextBoxMulti() -//------------------------------------------------------------------------------- - -// Text required functions -//------------------------------------------------------------------------------- -static Font GetFontDefault(void); // -- GuiLoadStyleDefault() -static Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // -- GetTextWidth(), GuiTextBoxMulti() -static void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // -- GuiDrawText() - -static Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int charsCount); // -- GuiLoadStyle() -static char *LoadText(const char *fileName); // -- GuiLoadStyle() -static const char *GetDirectoryPath(const char *filePath); // -- GuiLoadStyle() -//------------------------------------------------------------------------------- - -// raylib functions already implemented in raygui -//------------------------------------------------------------------------------- -static Color GetColor(int hexValue); // Returns a Color struct from hexadecimal value -static int ColorToInt(Color color); // Returns hexadecimal value for a Color -static Color Fade(Color color, float alpha); // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f -static bool CheckCollisionPointRec(Vector2 point, Rectangle rec); // Check if point is inside rectangle -static const char *TextFormat(const char *text, ...); // Formatting of text with variables to 'embed' -static const char **TextSplit(const char *text, char delimiter, int *count); // Split text into multiple strings -static int TextToInteger(const char *text); // Get integer value from text - -static void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); // Draw rectangle vertical gradient -//------------------------------------------------------------------------------- - -#endif // RAYGUI_STANDALONE - -//---------------------------------------------------------------------------------- -// Module specific Functions Declaration -//---------------------------------------------------------------------------------- -static int GetTextWidth(const char *text); // Gui get text width using default font -static Rectangle GetTextBounds(int control, Rectangle bounds); // Get text bounds considering control bounds -static const char *GetTextIcon(const char *text, int *iconId); // Get text icon if provided and move text cursor - -static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color tint); // Gui draw text using default font -static void GuiDrawRectangle(Rectangle rec, int borderWidth, Color borderColor, Color color); // Gui draw rectangle using default raygui style -static void GuiDrawTooltip(Rectangle bounds); // Draw tooltip relatively to bounds - -static const char **GuiTextSplit(const char *text, int *count, int *textRow); // Split controls text into multiple strings -static Vector3 ConvertHSVtoRGB(Vector3 hsv); // Convert color data from HSV to RGB -static Vector3 ConvertRGBtoHSV(Vector3 rgb); // Convert color data from RGB to HSV - -//---------------------------------------------------------------------------------- -// Gui Setup Functions Definition -//---------------------------------------------------------------------------------- -// Enable gui global state -void GuiEnable(void) { guiState = GUI_STATE_NORMAL; } - -// Disable gui global state -void GuiDisable(void) { guiState = GUI_STATE_DISABLED; } - -// Lock gui global state -void GuiLock(void) { guiLocked = true; } - -// Unlock gui global state -void GuiUnlock(void) { guiLocked = false; } - -// Set gui controls alpha global state -void GuiFade(float alpha) -{ - if (alpha < 0.0f) - alpha = 0.0f; - else if (alpha > 1.0f) - alpha = 1.0f; - - guiAlpha = alpha; -} - -// Set gui state (global state) -void GuiSetState(int state) { guiState = (GuiControlState)state; } - -// Get gui state (global state) -int GuiGetState(void) { return guiState; } - -// Set custom gui font -// NOTE: Font loading/unloading is external to raygui -void GuiSetFont(Font font) -{ - if (font.texture.id > 0) - { - // NOTE: If we try to setup a font but default style has not been - // lazily loaded before, it will be overwritten, so we need to force - // default style loading first - if (!guiStyleLoaded) - GuiLoadStyleDefault(); - - guiFont = font; - GuiSetStyle(DEFAULT, TEXT_SIZE, font.baseSize); - } -} - -// Get custom gui font -Font GuiGetFont(void) -{ - return guiFont; -} - -// Set control style property value -void GuiSetStyle(int control, int property, int value) -{ - if (!guiStyleLoaded) - GuiLoadStyleDefault(); - guiStyle[control * (NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED) + property] = value; - - // Default properties are propagated to all controls - if ((control == 0) && (property < NUM_PROPS_DEFAULT)) - { - for (int i = 1; i < NUM_CONTROLS; i++) - guiStyle[i * (NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED) + property] = value; - } -} - -// Get control style property value -int GuiGetStyle(int control, int property) -{ - if (!guiStyleLoaded) - GuiLoadStyleDefault(); - return guiStyle[control * (NUM_PROPS_DEFAULT + NUM_PROPS_EXTENDED) + property]; -} - -// Enable gui tooltips -void GuiEnableTooltip(void) { guiTooltipEnabled = true; } - -// Disable gui tooltips -void GuiDisableTooltip(void) { guiTooltipEnabled = false; } - -// Set current tooltip for display -void GuiSetTooltip(const char *tooltip) { guiTooltip = tooltip; } - -// Clear any tooltip registered -void GuiClearTooltip(void) { guiTooltip = NULL; } - -//---------------------------------------------------------------------------------- -// Gui Controls Functions Definition -//---------------------------------------------------------------------------------- - -// Window Box control -bool GuiWindowBox(Rectangle bounds, const char *title) -{ -// NOTE: This define is also used by GuiMessageBox() and GuiTextInputBox() -#define WINDOW_STATUSBAR_HEIGHT 22 - - //GuiControlState state = guiState; - bool clicked = false; - - int statusBarHeight = WINDOW_STATUSBAR_HEIGHT + 2 * GuiGetStyle(STATUSBAR, BORDER_WIDTH); - statusBarHeight += (statusBarHeight % 2); - - Rectangle statusBar = {bounds.x, bounds.y, bounds.width, statusBarHeight}; - if (bounds.height < statusBarHeight * 2) - bounds.height = statusBarHeight * 2; - - Rectangle windowPanel = {bounds.x, bounds.y + statusBarHeight - 1, bounds.width, bounds.height - statusBarHeight}; - Rectangle closeButtonRec = {statusBar.x + statusBar.width - GuiGetStyle(STATUSBAR, BORDER_WIDTH) - 20, - statusBar.y + statusBarHeight / 2 - 18 / 2, 18, 18}; - - // Update control - //-------------------------------------------------------------------- - // NOTE: Logic is directly managed by button - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiStatusBar(statusBar, title); // Draw window header as status bar - GuiPanel(windowPanel); // Draw window base - - // Draw window close button - int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); - int tempTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, BORDER_WIDTH, 1); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); -#if defined(RAYGUI_SUPPORT_ICONS) - clicked = GuiButton(closeButtonRec, GuiIconText(RICON_CROSS_SMALL, NULL)); -#else - clicked = GuiButton(closeButtonRec, "x"); -#endif - GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlignment); - //-------------------------------------------------------------------- - - return clicked; -} - -// Group Box control with text name -void GuiGroupBox(Rectangle bounds, const char *text) -{ -#define GROUPBOX_LINE_THICK 1 -#define GROUPBOX_TEXT_PADDING 10 - - GuiControlState state = guiState; - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){bounds.x, bounds.y, GROUPBOX_LINE_THICK, bounds.height}, 0, BLANK, Fade(GetColor(GuiGetStyle(DEFAULT, (state == GUI_STATE_DISABLED) ? BORDER_COLOR_DISABLED : LINE_COLOR)), guiAlpha)); - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){bounds.x, bounds.y + bounds.height - 1, bounds.width, GROUPBOX_LINE_THICK}, 0, BLANK, Fade(GetColor(GuiGetStyle(DEFAULT, (state == GUI_STATE_DISABLED) ? BORDER_COLOR_DISABLED : LINE_COLOR)), guiAlpha)); - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){bounds.x + bounds.width - 1, bounds.y, GROUPBOX_LINE_THICK, bounds.height}, 0, BLANK, Fade(GetColor(GuiGetStyle(DEFAULT, (state == GUI_STATE_DISABLED) ? BORDER_COLOR_DISABLED : LINE_COLOR)), guiAlpha)); - - GuiLine(RAYGUI_CLITERAL(Rectangle){bounds.x, bounds.y, bounds.width, 1}, text); - //-------------------------------------------------------------------- -} - -// Line control -void GuiLine(Rectangle bounds, const char *text) -{ -#define LINE_TEXT_PADDING 10 - - GuiControlState state = guiState; - - Color color = Fade(GetColor(GuiGetStyle(DEFAULT, (state == GUI_STATE_DISABLED) ? BORDER_COLOR_DISABLED : LINE_COLOR)), guiAlpha); - - // Draw control - //-------------------------------------------------------------------- - if (text == NULL) - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){bounds.x, bounds.y + bounds.height / 2, bounds.width, 1}, 0, BLANK, color); - else - { - Rectangle textBounds = {0}; - textBounds.width = GetTextWidth(text); // TODO: Consider text icon - textBounds.height = GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + LINE_TEXT_PADDING; - textBounds.y = bounds.y - GuiGetStyle(DEFAULT, TEXT_SIZE) / 2; - - // Draw line with embedded text label: "--- text --------------" - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){bounds.x, bounds.y, LINE_TEXT_PADDING - 2, 1}, 0, BLANK, color); - GuiLabel(textBounds, text); - GuiDrawRectangle(RAYGUI_CLITERAL(Rectangle){bounds.x + LINE_TEXT_PADDING + textBounds.width + 4, bounds.y, bounds.width - textBounds.width - LINE_TEXT_PADDING - 4, 1}, 0, BLANK, color); - } - //-------------------------------------------------------------------- -} - -// Panel control -void GuiPanel(Rectangle bounds) -{ -#define PANEL_BORDER_WIDTH 1 - - GuiControlState state = guiState; - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, PANEL_BORDER_WIDTH, Fade(GetColor(GuiGetStyle(DEFAULT, (state == GUI_STATE_DISABLED) ? BORDER_COLOR_DISABLED : LINE_COLOR)), guiAlpha), - Fade(GetColor(GuiGetStyle(DEFAULT, (state == GUI_STATE_DISABLED) ? BASE_COLOR_DISABLED : BACKGROUND_COLOR)), guiAlpha)); - //-------------------------------------------------------------------- -} - -// Scroll Panel control -Rectangle GuiScrollPanel(Rectangle bounds, Rectangle content, Vector2 *scroll) -{ - GuiControlState state = guiState; - - Vector2 scrollPos = {0.0f, 0.0f}; - if (scroll != NULL) - scrollPos = *scroll; - - bool hasHorizontalScrollBar = (content.width > bounds.width - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH)) ? true : false; - bool hasVerticalScrollBar = (content.height > bounds.height - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH)) ? true : false; - - // Recheck to account for the other scrollbar being visible - if (!hasHorizontalScrollBar) - hasHorizontalScrollBar = (hasVerticalScrollBar && (content.width > (bounds.width - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH)))) ? true : false; - if (!hasVerticalScrollBar) - hasVerticalScrollBar = (hasHorizontalScrollBar && (content.height > (bounds.height - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH)))) ? true : false; - - const int horizontalScrollBarWidth = hasHorizontalScrollBar ? GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH) : 0; - const int verticalScrollBarWidth = hasVerticalScrollBar ? GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH) : 0; - const Rectangle horizontalScrollBar = {(float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE) ? (float)bounds.x + verticalScrollBarWidth : (float)bounds.x) + GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)bounds.y + bounds.height - horizontalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)bounds.width - verticalScrollBarWidth - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)horizontalScrollBarWidth}; - const Rectangle verticalScrollBar = {(float)((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE) ? (float)bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH) : (float)bounds.x + bounds.width - verticalScrollBarWidth - GuiGetStyle(DEFAULT, BORDER_WIDTH)), (float)bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), (float)verticalScrollBarWidth, (float)bounds.height - horizontalScrollBarWidth - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH)}; - - // Calculate view area (area without the scrollbars) - Rectangle view = (GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE) ? RAYGUI_CLITERAL(Rectangle){bounds.x + verticalScrollBarWidth + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.width - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth, bounds.height - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth} : RAYGUI_CLITERAL(Rectangle){bounds.x + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.y + GuiGetStyle(DEFAULT, BORDER_WIDTH), bounds.width - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth, bounds.height - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth}; - - // Clip view area to the actual content size - if (view.width > content.width) - view.width = content.width; - if (view.height > content.height) - view.height = content.height; - - // TODO: Review! - const int horizontalMin = hasHorizontalScrollBar ? ((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE) ? -verticalScrollBarWidth : 0) - GuiGetStyle(DEFAULT, BORDER_WIDTH) : ((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE) ? -verticalScrollBarWidth : 0) - GuiGetStyle(DEFAULT, BORDER_WIDTH); - const int horizontalMax = hasHorizontalScrollBar ? content.width - bounds.width + verticalScrollBarWidth + GuiGetStyle(DEFAULT, BORDER_WIDTH) - ((GuiGetStyle(LISTVIEW, SCROLLBAR_SIDE) == SCROLLBAR_LEFT_SIDE) ? verticalScrollBarWidth : 0) : -GuiGetStyle(DEFAULT, BORDER_WIDTH); - const int verticalMin = hasVerticalScrollBar ? -GuiGetStyle(DEFAULT, BORDER_WIDTH) : -GuiGetStyle(DEFAULT, BORDER_WIDTH); - const int verticalMax = hasVerticalScrollBar ? content.height - bounds.height + horizontalScrollBarWidth + GuiGetStyle(DEFAULT, BORDER_WIDTH) : -GuiGetStyle(DEFAULT, BORDER_WIDTH); - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check button state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - state = GUI_STATE_PRESSED; - else - state = GUI_STATE_FOCUSED; - - if (hasHorizontalScrollBar) - { - if (IsKeyDown(KEY_RIGHT)) - scrollPos.x -= GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - if (IsKeyDown(KEY_LEFT)) - scrollPos.x += GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - } - - if (hasVerticalScrollBar) - { - if (IsKeyDown(KEY_DOWN)) - scrollPos.y -= GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - if (IsKeyDown(KEY_UP)) - scrollPos.y += GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - } - - scrollPos.y += GetMouseWheelMove() * 20; - } - } - - // Normalize scroll values - if (scrollPos.x > -horizontalMin) - scrollPos.x = -horizontalMin; - if (scrollPos.x < -horizontalMax) - scrollPos.x = -horizontalMax; - if (scrollPos.y > -verticalMin) - scrollPos.y = -verticalMin; - if (scrollPos.y < -verticalMax) - scrollPos.y = -verticalMax; - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, 0, BLANK, GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); // Draw background - - // Save size of the scrollbar slider - const int slider = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE); - - // Draw horizontal scrollbar if visible - if (hasHorizontalScrollBar) - { - // Change scrollbar slider size to show the diff in size between the content width and the widget width - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, ((bounds.width - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth) / content.width) * (bounds.width - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - verticalScrollBarWidth)); - scrollPos.x = -GuiScrollBar(horizontalScrollBar, -scrollPos.x, horizontalMin, horizontalMax); - } - - // Draw vertical scrollbar if visible - if (hasVerticalScrollBar) - { - // Change scrollbar slider size to show the diff in size between the content height and the widget height - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, ((bounds.height - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth) / content.height) * (bounds.height - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH) - horizontalScrollBarWidth)); - scrollPos.y = -GuiScrollBar(verticalScrollBar, -scrollPos.y, verticalMin, verticalMax); - } - - // Draw detail corner rectangle if both scroll bars are visible - if (hasHorizontalScrollBar && hasVerticalScrollBar) - { - // TODO: Consider scroll bars side - Rectangle corner = {horizontalScrollBar.x + horizontalScrollBar.width + 2, verticalScrollBar.y + verticalScrollBar.height + 2, horizontalScrollBarWidth - 4, verticalScrollBarWidth - 4}; - GuiDrawRectangle(corner, 0, BLANK, Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT + (state * 3))), guiAlpha)); - } - - // Draw scrollbar lines depending on current state - GuiDrawRectangle(bounds, GuiGetStyle(DEFAULT, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, (float)BORDER + (state * 3))), guiAlpha), BLANK); - - // Set scrollbar slider size back to the way it was before - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, slider); - //-------------------------------------------------------------------- - - if (scroll != NULL) - *scroll = scrollPos; - - return view; -} - -// Label control -void GuiLabel(Rectangle bounds, const char *text) -{ - GuiControlState state = guiState; - - // Update control - //-------------------------------------------------------------------- - // ... - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawText(text, GetTextBounds(LABEL, bounds), GuiGetStyle(LABEL, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LABEL, (state == GUI_STATE_DISABLED) ? TEXT_COLOR_DISABLED : TEXT_COLOR_NORMAL)), guiAlpha)); - //-------------------------------------------------------------------- -} - -// Button control, returns true when clicked -bool GuiButton(Rectangle bounds, const char *text) -{ - GuiControlState state = guiState; - bool pressed = false; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check button state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - state = GUI_STATE_PRESSED; - else - state = GUI_STATE_FOCUSED; - - if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - pressed = true; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(BUTTON, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(BUTTON, BORDER + (state * 3))), guiAlpha), Fade(GetColor(GuiGetStyle(BUTTON, BASE + (state * 3))), guiAlpha)); - GuiDrawText(text, GetTextBounds(BUTTON, bounds), GuiGetStyle(BUTTON, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(BUTTON, TEXT + (state * 3))), guiAlpha)); - //------------------------------------------------------------------ - - return pressed; -} - -// Label button control -bool GuiLabelButton(Rectangle bounds, const char *text) -{ - GuiControlState state = guiState; - bool pressed = false; - - // NOTE: We force bounds.width to be all text - int textWidth = MeasureTextEx(guiFont, text, GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SPACING)).x; - if (bounds.width < textWidth) - bounds.width = textWidth; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check checkbox state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - state = GUI_STATE_PRESSED; - else - state = GUI_STATE_FOCUSED; - - if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - pressed = true; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawText(text, GetTextBounds(LABEL, bounds), GuiGetStyle(LABEL, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state * 3))), guiAlpha)); - //-------------------------------------------------------------------- - - return pressed; -} - -// Image button control, returns true when clicked -bool GuiImageButton(Rectangle bounds, const char *text, Texture2D texture) -{ - return GuiImageButtonEx(bounds, text, texture, RAYGUI_CLITERAL(Rectangle){0, 0, (float)texture.width, (float)texture.height}); -} - -// Image button control, returns true when clicked -bool GuiImageButtonEx(Rectangle bounds, const char *text, Texture2D texture, Rectangle texSource) -{ - GuiControlState state = guiState; - bool clicked = false; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check button state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - state = GUI_STATE_PRESSED; - else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - clicked = true; - else - state = GUI_STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(BUTTON, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(BUTTON, BORDER + (state * 3))), guiAlpha), Fade(GetColor(GuiGetStyle(BUTTON, BASE + (state * 3))), guiAlpha)); - - if (text != NULL) - GuiDrawText(text, GetTextBounds(BUTTON, bounds), GuiGetStyle(BUTTON, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(BUTTON, TEXT + (state * 3))), guiAlpha)); - if (texture.id > 0) - DrawTextureRec(texture, texSource, RAYGUI_CLITERAL(Vector2){bounds.x + bounds.width / 2 - texSource.width / 2, bounds.y + bounds.height / 2 - texSource.height / 2}, Fade(GetColor(GuiGetStyle(BUTTON, TEXT + (state * 3))), guiAlpha)); - //------------------------------------------------------------------ - - return clicked; -} - -// Toggle Button control, returns true when active -bool GuiToggle(Rectangle bounds, const char *text, bool active) -{ - GuiControlState state = guiState; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check toggle button state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - state = GUI_STATE_PRESSED; - else if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - { - state = GUI_STATE_NORMAL; - active = !active; - } - else - state = GUI_STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state == GUI_STATE_NORMAL) - { - GuiDrawRectangle(bounds, GuiGetStyle(TOGGLE, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TOGGLE, (active ? BORDER_COLOR_PRESSED : (BORDER + state * 3)))), guiAlpha), Fade(GetColor(GuiGetStyle(TOGGLE, (active ? BASE_COLOR_PRESSED : (BASE + state * 3)))), guiAlpha)); - GuiDrawText(text, GetTextBounds(TOGGLE, bounds), GuiGetStyle(TOGGLE, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(TOGGLE, (active ? TEXT_COLOR_PRESSED : (TEXT + state * 3)))), guiAlpha)); - } - else - { - GuiDrawRectangle(bounds, GuiGetStyle(TOGGLE, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TOGGLE, BORDER + state * 3)), guiAlpha), Fade(GetColor(GuiGetStyle(TOGGLE, BASE + state * 3)), guiAlpha)); - GuiDrawText(text, GetTextBounds(TOGGLE, bounds), GuiGetStyle(TOGGLE, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(TOGGLE, TEXT + state * 3)), guiAlpha)); - } - //-------------------------------------------------------------------- - - return active; -} - -// Toggle Group control, returns toggled button index -int GuiToggleGroup(Rectangle bounds, const char *text, int active) -{ -#if !defined(TOGGLEGROUP_MAX_ELEMENTS) -#define TOGGLEGROUP_MAX_ELEMENTS 32 -#endif - - float initBoundsX = bounds.x; - - // Get substrings items from text (items pointers) - int rows[TOGGLEGROUP_MAX_ELEMENTS] = {0}; - int itemsCount = 0; - const char **items = GuiTextSplit(text, &itemsCount, rows); - - int prevRow = rows[0]; - - for (int i = 0; i < itemsCount; i++) - { - if (prevRow != rows[i]) - { - bounds.x = initBoundsX; - bounds.y += (bounds.height + GuiGetStyle(TOGGLE, GROUP_PADDING)); - prevRow = rows[i]; - } - - if (i == active) - GuiToggle(bounds, items[i], true); - else if (GuiToggle(bounds, items[i], false) == true) - active = i; - - bounds.x += (bounds.width + GuiGetStyle(TOGGLE, GROUP_PADDING)); - } - - return active; -} - -// Check Box control, returns true when active -bool GuiCheckBox(Rectangle bounds, const char *text, bool checked) -{ - GuiControlState state = guiState; - - Rectangle textBounds = {0}; - - if (text != NULL) - { - textBounds.width = GetTextWidth(text); - textBounds.height = GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(CHECKBOX, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height / 2 - GuiGetStyle(DEFAULT, TEXT_SIZE) / 2; - if (GuiGetStyle(CHECKBOX, TEXT_ALIGNMENT) == GUI_TEXT_ALIGN_LEFT) - textBounds.x = bounds.x - textBounds.width - GuiGetStyle(CHECKBOX, TEXT_PADDING); - } - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - Rectangle totalBounds = { - (GuiGetStyle(CHECKBOX, TEXT_ALIGNMENT) == GUI_TEXT_ALIGN_LEFT) ? textBounds.x : bounds.x, - bounds.y, - bounds.width + textBounds.width + GuiGetStyle(CHECKBOX, TEXT_PADDING), - bounds.height, - }; - - // Check checkbox state - if (CheckCollisionPointRec(mousePoint, totalBounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - state = GUI_STATE_PRESSED; - else - state = GUI_STATE_FOCUSED; - - if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - checked = !checked; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(CHECKBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(CHECKBOX, BORDER + (state * 3))), guiAlpha), BLANK); - - if (checked) - { - Rectangle check = {bounds.x + GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING), - bounds.y + GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING), - bounds.width - 2 * (GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING)), - bounds.height - 2 * (GuiGetStyle(CHECKBOX, BORDER_WIDTH) + GuiGetStyle(CHECKBOX, CHECK_PADDING))}; - GuiDrawRectangle(check, 0, BLANK, Fade(GetColor(GuiGetStyle(CHECKBOX, TEXT + state * 3)), guiAlpha)); - } - - if (text != NULL) - GuiDrawText(text, textBounds, (GuiGetStyle(CHECKBOX, TEXT_ALIGNMENT) == GUI_TEXT_ALIGN_RIGHT) ? GUI_TEXT_ALIGN_LEFT : GUI_TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state * 3))), guiAlpha)); - //-------------------------------------------------------------------- - - return checked; -} - -// Combo Box control, returns selected item index -int GuiComboBox(Rectangle bounds, const char *text, int active) -{ - GuiControlState state = guiState; - - bounds.width -= (GuiGetStyle(COMBOBOX, COMBO_BUTTON_WIDTH) + GuiGetStyle(COMBOBOX, COMBO_BUTTON_PADDING)); - - Rectangle selector = {(float)bounds.x + bounds.width + GuiGetStyle(COMBOBOX, COMBO_BUTTON_PADDING), - (float)bounds.y, (float)GuiGetStyle(COMBOBOX, COMBO_BUTTON_WIDTH), (float)bounds.height}; - - // Get substrings items from text (items pointers, lengths and count) - int itemsCount = 0; - const char **items = GuiTextSplit(text, &itemsCount, NULL); - - if (active < 0) - active = 0; - else if (active > itemsCount - 1) - active = itemsCount - 1; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked && (itemsCount > 1)) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds) || - CheckCollisionPointRec(mousePoint, selector)) - { - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - active += 1; - if (active >= itemsCount) - active = 0; - } - - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - state = GUI_STATE_PRESSED; - else - state = GUI_STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - // Draw combo box main - GuiDrawRectangle(bounds, GuiGetStyle(COMBOBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(COMBOBOX, BORDER + (state * 3))), guiAlpha), Fade(GetColor(GuiGetStyle(COMBOBOX, BASE + (state * 3))), guiAlpha)); - GuiDrawText(items[active], GetTextBounds(COMBOBOX, bounds), GuiGetStyle(COMBOBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(COMBOBOX, TEXT + (state * 3))), guiAlpha)); - - // Draw selector using a custom button - // NOTE: BORDER_WIDTH and TEXT_ALIGNMENT forced values - int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); - int tempTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, BORDER_WIDTH, 1); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); - - GuiButton(selector, TextFormat("%i/%i", active + 1, itemsCount)); - - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlign); - GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); - //-------------------------------------------------------------------- - - return active; -} - -// Dropdown Box control -// NOTE: Returns mouse click -bool GuiDropdownBox(Rectangle bounds, const char *text, int *active, bool editMode) -{ - GuiControlState state = guiState; - int itemSelected = *active; - int itemFocused = -1; - - // Get substrings items from text (items pointers, lengths and count) - int itemsCount = 0; - const char **items = GuiTextSplit(text, &itemsCount, NULL); - - Rectangle boundsOpen = bounds; - boundsOpen.height = (itemsCount + 1) * (bounds.height + GuiGetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_PADDING)); - - Rectangle itemBounds = bounds; - - bool pressed = false; // Check mouse button pressed - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked && (itemsCount > 1)) - { - Vector2 mousePoint = GetMousePosition(); - - if (editMode) - { - state = GUI_STATE_PRESSED; - - // Check if mouse has been pressed or released outside limits - if (!CheckCollisionPointRec(mousePoint, boundsOpen)) - { - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON) || IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - pressed = true; - } - - // Check if already selected item has been pressed again - if (CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - pressed = true; - - // Check focused and selected item - for (int i = 0; i < itemsCount; i++) - { - // Update item rectangle y position for next item - itemBounds.y += (bounds.height + GuiGetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_PADDING)); - - if (CheckCollisionPointRec(mousePoint, itemBounds)) - { - itemFocused = i; - if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) - { - itemSelected = i; - pressed = true; // Item selected, change to editMode = false - } - break; - } - } - - itemBounds = bounds; - } - else - { - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - pressed = true; - state = GUI_STATE_PRESSED; - } - else - state = GUI_STATE_FOCUSED; - } - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (editMode) - GuiPanel(boundsOpen); - - GuiDrawRectangle(bounds, GuiGetStyle(DROPDOWNBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BORDER + state * 3)), guiAlpha), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BASE + state * 3)), guiAlpha)); - GuiDrawText(items[itemSelected], GetTextBounds(DEFAULT, bounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + state * 3)), guiAlpha)); - - if (editMode) - { - // Draw visible items - for (int i = 0; i < itemsCount; i++) - { - // Update item rectangle y position for next item - itemBounds.y += (bounds.height + GuiGetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_PADDING)); - - if (i == itemSelected) - { - GuiDrawRectangle(itemBounds, GuiGetStyle(DROPDOWNBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BORDER_COLOR_PRESSED)), guiAlpha), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BASE_COLOR_PRESSED)), guiAlpha)); - GuiDrawText(items[i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_PRESSED)), guiAlpha)); - } - else if (i == itemFocused) - { - GuiDrawRectangle(itemBounds, GuiGetStyle(DROPDOWNBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BORDER_COLOR_FOCUSED)), guiAlpha), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, BASE_COLOR_FOCUSED)), guiAlpha)); - GuiDrawText(items[i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_FOCUSED)), guiAlpha)); - } - else - GuiDrawText(items[i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(DROPDOWNBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT_COLOR_NORMAL)), guiAlpha)); - } - } - - // TODO: Avoid this function, use icon instead or 'v' - DrawTriangle(RAYGUI_CLITERAL(Vector2){bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height / 2 - 2}, - RAYGUI_CLITERAL(Vector2){bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING) + 5, bounds.y + bounds.height / 2 - 2 + 5}, - RAYGUI_CLITERAL(Vector2){bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING) + 10, bounds.y + bounds.height / 2 - 2}, - Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state * 3))), guiAlpha)); - - //GuiDrawText("v", RAYGUI_CLITERAL(Rectangle){ bounds.x + bounds.width - GuiGetStyle(DROPDOWNBOX, ARROW_PADDING), bounds.y + bounds.height/2 - 2, 10, 10 }, - // GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(DROPDOWNBOX, TEXT + (state*3))), guiAlpha)); - //-------------------------------------------------------------------- - - *active = itemSelected; - return pressed; -} - -// Text Box control, updates input text -// NOTE 1: Requires static variables: framesCounter -// NOTE 2: Returns if KEY_ENTER pressed (useful for data validation) -bool GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode) -{ - static int framesCounter = 0; // Required for blinking cursor - - GuiControlState state = guiState; - bool pressed = false; - - Rectangle cursor = { - bounds.x + GuiGetStyle(TEXTBOX, TEXT_PADDING) + GetTextWidth(text) + 2, - bounds.y + bounds.height / 2 - GuiGetStyle(DEFAULT, TEXT_SIZE), - 1, - GuiGetStyle(DEFAULT, TEXT_SIZE) * 2}; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (editMode) - { - state = GUI_STATE_PRESSED; - framesCounter++; - - int key = GetKeyPressed(); // Returns codepoint as Unicode - int keyCount = strlen(text); - - // Only allow keys in range [32..125] - if (keyCount < (textSize - 1)) - { - int maxWidth = (bounds.width - (GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING) * 2)); - - if ((GetTextWidth(text) < (maxWidth - GuiGetStyle(DEFAULT, TEXT_SIZE))) && (key >= 32)) - { - int byteLength = 0; - const char *textUtf8 = CodepointToUtf8(key, &byteLength); - - for (int i = 0; i < byteLength; i++) - { - text[keyCount] = textUtf8[i]; - keyCount++; - } - - text[keyCount] = '\0'; - } - } - - // Delete text - if (keyCount > 0) - { - if (IsKeyPressed(KEY_BACKSPACE)) - { - keyCount--; - text[keyCount] = '\0'; - framesCounter = 0; - if (keyCount < 0) - keyCount = 0; - } - else if (IsKeyDown(KEY_BACKSPACE)) - { - if ((framesCounter > TEXTEDIT_CURSOR_BLINK_FRAMES) && (framesCounter % 2) == 0) - keyCount--; - text[keyCount] = '\0'; - if (keyCount < 0) - keyCount = 0; - } - } - - if (IsKeyPressed(KEY_ENTER) || (!CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) - pressed = true; - - // Check text alignment to position cursor properly - int textAlignment = GuiGetStyle(TEXTBOX, TEXT_ALIGNMENT); - if (textAlignment == GUI_TEXT_ALIGN_CENTER) - cursor.x = bounds.x + GetTextWidth(text) / 2 + bounds.width / 2 + 1; - else if (textAlignment == GUI_TEXT_ALIGN_RIGHT) - cursor.x = bounds.x + bounds.width - GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING); - } - else - { - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = GUI_STATE_FOCUSED; - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - pressed = true; - } - } - - if (pressed) - framesCounter = 0; - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state == GUI_STATE_PRESSED) - { - GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state * 3))), guiAlpha), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_PRESSED)), guiAlpha)); - - // Draw blinking cursor - if (editMode && ((framesCounter / 20) % 2 == 0)) - GuiDrawRectangle(cursor, 0, BLANK, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER_COLOR_PRESSED)), guiAlpha)); - } - else if (state == GUI_STATE_DISABLED) - { - GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state * 3))), guiAlpha), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_DISABLED)), guiAlpha)); - } - else - GuiDrawRectangle(bounds, 1, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state * 3))), guiAlpha), BLANK); - - GuiDrawText(text, GetTextBounds(TEXTBOX, bounds), GuiGetStyle(TEXTBOX, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(TEXTBOX, TEXT + (state * 3))), guiAlpha)); - //-------------------------------------------------------------------- - - return pressed; -} - -// Spinner control, returns selected value -bool GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode) -{ - GuiControlState state = guiState; - - bool pressed = false; - int tempValue = *value; - - Rectangle spinner = {bounds.x + GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SPIN_BUTTON_PADDING), bounds.y, - bounds.width - 2 * (GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH) + GuiGetStyle(SPINNER, SPIN_BUTTON_PADDING)), bounds.height}; - Rectangle leftButtonBound = {(float)bounds.x, (float)bounds.y, (float)GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.height}; - Rectangle rightButtonBound = {(float)bounds.x + bounds.width - GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.y, (float)GuiGetStyle(SPINNER, SPIN_BUTTON_WIDTH), (float)bounds.height}; - - Rectangle textBounds = {0}; - if (text != NULL) - { - textBounds.width = GetTextWidth(text); - textBounds.height = GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(SPINNER, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height / 2 - GuiGetStyle(DEFAULT, TEXT_SIZE) / 2; - if (GuiGetStyle(SPINNER, TEXT_ALIGNMENT) == GUI_TEXT_ALIGN_LEFT) - textBounds.x = bounds.x - textBounds.width - GuiGetStyle(SPINNER, TEXT_PADDING); - } - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check spinner state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - state = GUI_STATE_PRESSED; - else - state = GUI_STATE_FOCUSED; - } - } - - if (!editMode) - { - if (tempValue < minValue) - tempValue = minValue; - if (tempValue > maxValue) - tempValue = maxValue; - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - // TODO: Set Spinner properties for ValueBox - pressed = GuiValueBox(spinner, NULL, &tempValue, minValue, maxValue, editMode); - - // Draw value selector custom buttons - // NOTE: BORDER_WIDTH and TEXT_ALIGNMENT forced values - int tempBorderWidth = GuiGetStyle(BUTTON, BORDER_WIDTH); - int tempTextAlign = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, BORDER_WIDTH, GuiGetStyle(SPINNER, BORDER_WIDTH)); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); - -#if defined(RAYGUI_SUPPORT_ICONS) - if (GuiButton(leftButtonBound, GuiIconText(RICON_ARROW_LEFT_FILL, NULL))) - tempValue--; - if (GuiButton(rightButtonBound, GuiIconText(RICON_ARROW_RIGHT_FILL, NULL))) - tempValue++; -#else - if (GuiButton(leftButtonBound, "<")) - tempValue--; - if (GuiButton(rightButtonBound, ">")) - tempValue++; -#endif - - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, tempTextAlign); - GuiSetStyle(BUTTON, BORDER_WIDTH, tempBorderWidth); - - // Draw text label if provided - if (text != NULL) - GuiDrawText(text, textBounds, (GuiGetStyle(SPINNER, TEXT_ALIGNMENT) == GUI_TEXT_ALIGN_RIGHT) ? GUI_TEXT_ALIGN_LEFT : GUI_TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state * 3))), guiAlpha)); - //-------------------------------------------------------------------- - - *value = tempValue; - return pressed; -} - -// Value Box control, updates input text with numbers -// NOTE: Requires static variables: framesCounter -bool GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode) -{ -#if !defined(VALUEBOX_MAX_CHARS) -#define VALUEBOX_MAX_CHARS 32 -#endif - - static int framesCounter = 0; // Required for blinking cursor - - GuiControlState state = guiState; - bool pressed = false; - - char textValue[VALUEBOX_MAX_CHARS + 1] = "\0"; - sprintf(textValue, "%i", *value); - - Rectangle textBounds = {0}; - if (text != NULL) - { - textBounds.width = GetTextWidth(text); - textBounds.height = GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(VALUEBOX, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height / 2 - GuiGetStyle(DEFAULT, TEXT_SIZE) / 2; - if (GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT) == GUI_TEXT_ALIGN_LEFT) - textBounds.x = bounds.x - textBounds.width - GuiGetStyle(VALUEBOX, TEXT_PADDING); - } - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - bool valueHasChanged = false; - - if (editMode) - { - state = GUI_STATE_PRESSED; - - framesCounter++; - - int keyCount = strlen(textValue); - - // Only allow keys in range [48..57] - if (keyCount < VALUEBOX_MAX_CHARS) - { - int maxWidth = bounds.width; - if (GetTextWidth(textValue) < maxWidth) - { - int key = GetKeyPressed(); - if ((key >= 48) && (key <= 57)) - { - textValue[keyCount] = (char)key; - keyCount++; - valueHasChanged = true; - } - } - } - - // Delete text - if (keyCount > 0) - { - if (IsKeyPressed(KEY_BACKSPACE)) - { - keyCount--; - textValue[keyCount] = '\0'; - framesCounter = 0; - if (keyCount < 0) - keyCount = 0; - valueHasChanged = true; - } - else if (IsKeyDown(KEY_BACKSPACE)) - { - if ((framesCounter > TEXTEDIT_CURSOR_BLINK_FRAMES) && (framesCounter % 2) == 0) - keyCount--; - textValue[keyCount] = '\0'; - if (keyCount < 0) - keyCount = 0; - valueHasChanged = true; - } - } - - if (valueHasChanged) - *value = TextToInteger(textValue); - - if (IsKeyPressed(KEY_ENTER) || (!CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) - pressed = true; - } - else - { - if (*value > maxValue) - *value = maxValue; - else if (*value < minValue) - *value = minValue; - - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = GUI_STATE_FOCUSED; - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - pressed = true; - } - } - - if (pressed) - framesCounter = 0; - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - Color baseColor = BLANK; - if (state == GUI_STATE_PRESSED) - baseColor = GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_PRESSED)); - else if (state == GUI_STATE_DISABLED) - baseColor = GetColor(GuiGetStyle(VALUEBOX, BASE_COLOR_DISABLED)); - - // WARNING: BLANK color does not work properly with Fade() - GuiDrawRectangle(bounds, GuiGetStyle(VALUEBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER + (state * 3))), guiAlpha), baseColor); - GuiDrawText(textValue, GetTextBounds(VALUEBOX, bounds), GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(VALUEBOX, TEXT + (state * 3))), guiAlpha)); - - // Draw blinking cursor - if ((state == GUI_STATE_PRESSED) && (editMode && ((framesCounter / 20) % 2 == 0))) - { - // NOTE: ValueBox internal text is always centered - Rectangle cursor = {bounds.x + GetTextWidth(textValue) / 2 + bounds.width / 2 + 2, bounds.y + 2 * GuiGetStyle(VALUEBOX, BORDER_WIDTH), 1, bounds.height - 4 * GuiGetStyle(VALUEBOX, BORDER_WIDTH)}; - GuiDrawRectangle(cursor, 0, BLANK, Fade(GetColor(GuiGetStyle(VALUEBOX, BORDER_COLOR_PRESSED)), guiAlpha)); - } - - // Draw text label if provided - if (text != NULL) - GuiDrawText(text, textBounds, (GuiGetStyle(VALUEBOX, TEXT_ALIGNMENT) == GUI_TEXT_ALIGN_RIGHT) ? GUI_TEXT_ALIGN_LEFT : GUI_TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(LABEL, TEXT + (state * 3))), guiAlpha)); - //-------------------------------------------------------------------- - - return pressed; -} - -// Text Box control with multiple lines -bool GuiTextBoxMulti(Rectangle bounds, char *text, int textSize, bool editMode) -{ - static int framesCounter = 0; // Required for blinking cursor - - GuiControlState state = guiState; - bool pressed = false; - - Rectangle textAreaBounds = { - bounds.x + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING), - bounds.y + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING), - bounds.width - 2 * GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING), - bounds.height - 2 * GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING)}; - - // Cursor position, [x, y] values should be updated - Rectangle cursor = {0, 0, 1, GuiGetStyle(DEFAULT, TEXT_SIZE) + 2}; - - int textWidth = 0; - int currentLine = 0; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (editMode) - { - state = GUI_STATE_PRESSED; - framesCounter++; - - int key = GetKeyPressed(); - int keyCount = strlen(text); - - // Introduce characters - if (keyCount < (textSize - 1)) - { - Vector2 textSize = MeasureTextEx(guiFont, text, GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SPACING)); - - if (textSize.y < (textAreaBounds.height - GuiGetStyle(DEFAULT, TEXT_SIZE))) - { - if (IsKeyPressed(KEY_ENTER)) - { - text[keyCount] = '\n'; - keyCount++; - } - else if (((key >= 32) && (key < 255))) // TODO: Support Unicode inputs - { - text[keyCount] = (char)key; - keyCount++; - } - } - } - - // Delete characters - if (keyCount > 0) - { - if (IsKeyPressed(KEY_BACKSPACE)) - { - keyCount--; - text[keyCount] = '\0'; - framesCounter = 0; - - if (keyCount < 0) - keyCount = 0; - } - else if (IsKeyDown(KEY_BACKSPACE)) - { - if ((framesCounter > TEXTEDIT_CURSOR_BLINK_FRAMES) && (framesCounter % 2) == 0) - keyCount--; - text[keyCount] = '\0'; - - if (keyCount < 0) - keyCount = 0; - } - } - - // Calculate cursor position considering text - char oneCharText[2] = {0}; - int lastBreakingPos = -1; - - for (int i = 0; i < keyCount && currentLine < keyCount; i++) - { - oneCharText[0] = text[i]; - textWidth += (GetTextWidth(oneCharText) + GuiGetStyle(DEFAULT, TEXT_SPACING)); - - if (text[i] == ' ' || text[i] == '\n') - lastBreakingPos = i; - - if (text[i] == '\n' || textWidth >= textAreaBounds.width) - { - currentLine++; - textWidth = 0; - - if (lastBreakingPos > 0) - i = lastBreakingPos; - else - textWidth += (GetTextWidth(oneCharText) + GuiGetStyle(DEFAULT, TEXT_SPACING)); - - lastBreakingPos = -1; - } - } - - cursor.x = bounds.x + GuiGetStyle(TEXTBOX, BORDER_WIDTH) + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING) + textWidth - GuiGetStyle(DEFAULT, TEXT_SPACING); - cursor.y = bounds.y + GuiGetStyle(TEXTBOX, BORDER_WIDTH) + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING) / 2 + ((GuiGetStyle(DEFAULT, TEXT_SIZE) + GuiGetStyle(TEXTBOX, TEXT_INNER_PADDING)) * currentLine); - - // Exit edit mode - if (!CheckCollisionPointRec(mousePoint, bounds) && IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - pressed = true; - } - else - { - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = GUI_STATE_FOCUSED; - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - pressed = true; - } - } - - if (pressed) - framesCounter = 0; // Reset blinking cursor - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state == GUI_STATE_PRESSED) - { - GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state * 3))), guiAlpha), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_PRESSED)), guiAlpha)); - - // Draw blinking cursor - if (editMode && ((framesCounter / 20) % 2 == 0)) - GuiDrawRectangle(cursor, 0, BLANK, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER_COLOR_PRESSED)), guiAlpha)); - } - else if (state == GUI_STATE_DISABLED) - { - GuiDrawRectangle(bounds, GuiGetStyle(TEXTBOX, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state * 3))), guiAlpha), Fade(GetColor(GuiGetStyle(TEXTBOX, BASE_COLOR_DISABLED)), guiAlpha)); - } - else - GuiDrawRectangle(bounds, 1, Fade(GetColor(GuiGetStyle(TEXTBOX, BORDER + (state * 3))), guiAlpha), BLANK); - - DrawTextRec(guiFont, text, textAreaBounds, GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SPACING), true, Fade(GetColor(GuiGetStyle(TEXTBOX, TEXT + (state * 3))), guiAlpha)); - //-------------------------------------------------------------------- - - return pressed; -} - -// Slider control with pro parameters -// NOTE: Other GuiSlider*() controls use this one -float GuiSliderPro(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue, int sliderWidth) -{ - GuiControlState state = guiState; - - int sliderValue = (int)(((value - minValue) / (maxValue - minValue)) * (bounds.width - 2 * GuiGetStyle(SLIDER, BORDER_WIDTH))); - - Rectangle slider = {bounds.x, bounds.y + GuiGetStyle(SLIDER, BORDER_WIDTH) + GuiGetStyle(SLIDER, SLIDER_PADDING), - 0, bounds.height - 2 * GuiGetStyle(SLIDER, BORDER_WIDTH) - 2 * GuiGetStyle(SLIDER, SLIDER_PADDING)}; - - if (sliderWidth > 0) // Slider - { - slider.x += (sliderValue - sliderWidth / 2); - slider.width = sliderWidth; - } - else if (sliderWidth == 0) // SliderBar - { - slider.x += GuiGetStyle(SLIDER, BORDER_WIDTH); - slider.width = sliderValue; - } - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = GUI_STATE_PRESSED; - - // Get equivalent value and slider position from mousePoint.x - value = ((maxValue - minValue) * (mousePoint.x - (float)(bounds.x + sliderWidth / 2))) / (float)(bounds.width - sliderWidth) + minValue; - - if (sliderWidth > 0) - slider.x = mousePoint.x - slider.width / 2; // Slider - else if (sliderWidth == 0) - slider.width = sliderValue; // SliderBar - } - else - state = GUI_STATE_FOCUSED; - } - - if (value > maxValue) - value = maxValue; - else if (value < minValue) - value = minValue; - } - - // Bar limits check - if (sliderWidth > 0) // Slider - { - if (slider.x <= (bounds.x + GuiGetStyle(SLIDER, BORDER_WIDTH))) - slider.x = bounds.x + GuiGetStyle(SLIDER, BORDER_WIDTH); - else if ((slider.x + slider.width) >= (bounds.x + bounds.width)) - slider.x = bounds.x + bounds.width - slider.width - GuiGetStyle(SLIDER, BORDER_WIDTH); - } - else if (sliderWidth == 0) // SliderBar - { - if (slider.width > bounds.width) - slider.width = bounds.width - 2 * GuiGetStyle(SLIDER, BORDER_WIDTH); - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(SLIDER, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(SLIDER, BORDER + (state * 3))), guiAlpha), Fade(GetColor(GuiGetStyle(SLIDER, (state != GUI_STATE_DISABLED) ? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED)), guiAlpha)); - - // Draw slider internal bar (depends on state) - if ((state == GUI_STATE_NORMAL) || (state == GUI_STATE_PRESSED)) - GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, BASE_COLOR_PRESSED)), guiAlpha)); - else if (state == GUI_STATE_FOCUSED) - GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, TEXT_COLOR_FOCUSED)), guiAlpha)); - - // Draw left/right text if provided - if (textLeft != NULL) - { - Rectangle textBounds = {0}; - textBounds.width = GetTextWidth(textLeft); // TODO: Consider text icon - textBounds.height = GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x - textBounds.width - GuiGetStyle(SLIDER, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height / 2 - GuiGetStyle(DEFAULT, TEXT_SIZE) / 2; - - GuiDrawText(textLeft, textBounds, GUI_TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state * 3))), guiAlpha)); - } - - if (textRight != NULL) - { - Rectangle textBounds = {0}; - textBounds.width = GetTextWidth(textRight); // TODO: Consider text icon - textBounds.height = GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(SLIDER, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height / 2 - GuiGetStyle(DEFAULT, TEXT_SIZE) / 2; - - GuiDrawText(textRight, textBounds, GUI_TEXT_ALIGN_LEFT, Fade(GetColor(GuiGetStyle(SLIDER, TEXT + (state * 3))), guiAlpha)); - } - //-------------------------------------------------------------------- - - return value; -} - -// Slider control extended, returns selected value and has text -float GuiSlider(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue) -{ - return GuiSliderPro(bounds, textLeft, textRight, value, minValue, maxValue, GuiGetStyle(SLIDER, SLIDER_WIDTH)); -} - -// Slider Bar control extended, returns selected value -float GuiSliderBar(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue) -{ - return GuiSliderPro(bounds, textLeft, textRight, value, minValue, maxValue, 0); -} - -// Progress Bar control extended, shows current progress value -float GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight, float value, float minValue, float maxValue) -{ - GuiControlState state = guiState; - - Rectangle progress = {bounds.x + GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), - bounds.y + GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) + GuiGetStyle(PROGRESSBAR, PROGRESS_PADDING), 0, - bounds.height - 2 * GuiGetStyle(PROGRESSBAR, BORDER_WIDTH) - 2 * GuiGetStyle(PROGRESSBAR, PROGRESS_PADDING)}; - - // Update control - //-------------------------------------------------------------------- - if (state != GUI_STATE_DISABLED) - progress.width = (int)(value / (maxValue - minValue) * (float)(bounds.width - 2 * GuiGetStyle(PROGRESSBAR, BORDER_WIDTH))); - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(PROGRESSBAR, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(PROGRESSBAR, BORDER + (state * 3))), guiAlpha), BLANK); - - // Draw slider internal progress bar (depends on state) - if ((state == GUI_STATE_NORMAL) || (state == GUI_STATE_PRESSED)) - GuiDrawRectangle(progress, 0, BLANK, Fade(GetColor(GuiGetStyle(PROGRESSBAR, BASE_COLOR_PRESSED)), guiAlpha)); - else if (state == GUI_STATE_FOCUSED) - GuiDrawRectangle(progress, 0, BLANK, Fade(GetColor(GuiGetStyle(PROGRESSBAR, TEXT_COLOR_FOCUSED)), guiAlpha)); - - // Draw left/right text if provided - if (textLeft != NULL) - { - Rectangle textBounds = {0}; - textBounds.width = GetTextWidth(textLeft); // TODO: Consider text icon - textBounds.height = GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x - textBounds.width - GuiGetStyle(PROGRESSBAR, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height / 2 - GuiGetStyle(DEFAULT, TEXT_SIZE) / 2; - - GuiDrawText(textLeft, textBounds, GUI_TEXT_ALIGN_RIGHT, Fade(GetColor(GuiGetStyle(PROGRESSBAR, TEXT + (state * 3))), guiAlpha)); - } - - if (textRight != NULL) - { - Rectangle textBounds = {0}; - textBounds.width = GetTextWidth(textRight); // TODO: Consider text icon - textBounds.height = GuiGetStyle(DEFAULT, TEXT_SIZE); - textBounds.x = bounds.x + bounds.width + GuiGetStyle(PROGRESSBAR, TEXT_PADDING); - textBounds.y = bounds.y + bounds.height / 2 - GuiGetStyle(DEFAULT, TEXT_SIZE) / 2; - - GuiDrawText(textRight, textBounds, GUI_TEXT_ALIGN_LEFT, Fade(GetColor(GuiGetStyle(PROGRESSBAR, TEXT + (state * 3))), guiAlpha)); - } - //-------------------------------------------------------------------- - - return value; -} - -// Status Bar control -void GuiStatusBar(Rectangle bounds, const char *text) -{ - GuiControlState state = guiState; - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(STATUSBAR, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(STATUSBAR, (state != GUI_STATE_DISABLED) ? BORDER_COLOR_NORMAL : BORDER_COLOR_DISABLED)), guiAlpha), - Fade(GetColor(GuiGetStyle(STATUSBAR, (state != GUI_STATE_DISABLED) ? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED)), guiAlpha)); - GuiDrawText(text, GetTextBounds(STATUSBAR, bounds), GuiGetStyle(STATUSBAR, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(STATUSBAR, (state != GUI_STATE_DISABLED) ? TEXT_COLOR_NORMAL : TEXT_COLOR_DISABLED)), guiAlpha)); - //-------------------------------------------------------------------- -} - -// Dummy rectangle control, intended for placeholding -void GuiDummyRec(Rectangle bounds, const char *text) -{ - GuiControlState state = guiState; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check button state - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - state = GUI_STATE_PRESSED; - else - state = GUI_STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, 0, BLANK, Fade(GetColor(GuiGetStyle(DEFAULT, (state != GUI_STATE_DISABLED) ? BASE_COLOR_NORMAL : BASE_COLOR_DISABLED)), guiAlpha)); - GuiDrawText(text, GetTextBounds(DEFAULT, bounds), GUI_TEXT_ALIGN_CENTER, Fade(GetColor(GuiGetStyle(BUTTON, (state != GUI_STATE_DISABLED) ? TEXT_COLOR_NORMAL : TEXT_COLOR_DISABLED)), guiAlpha)); - //------------------------------------------------------------------ -} - -// Scroll Bar control -// TODO: I feel GuiScrollBar could be simplified... -int GuiScrollBar(Rectangle bounds, int value, int minValue, int maxValue) -{ - GuiControlState state = guiState; - - // Is the scrollbar horizontal or vertical? - bool isVertical = (bounds.width > bounds.height) ? false : true; - - // The size (width or height depending on scrollbar type) of the spinner buttons - const int spinnerSize = GuiGetStyle(SCROLLBAR, ARROWS_VISIBLE) ? (isVertical ? bounds.width - 2 * GuiGetStyle(SCROLLBAR, BORDER_WIDTH) : bounds.height - 2 * GuiGetStyle(SCROLLBAR, BORDER_WIDTH)) : 0; - - // Arrow buttons [<] [>] [∧] [∨] - Rectangle arrowUpLeft = {0}; - Rectangle arrowDownRight = {0}; - - // Actual area of the scrollbar excluding the arrow buttons - Rectangle scrollbar = {0}; - - // Slider bar that moves --[///]----- - Rectangle slider = {0}; - - // Normalize value - if (value > maxValue) - value = maxValue; - if (value < minValue) - value = minValue; - - const int range = maxValue - minValue; - int sliderSize = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE); - - // Calculate rectangles for all of the components - arrowUpLeft = RAYGUI_CLITERAL(Rectangle){(float)bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)spinnerSize, (float)spinnerSize}; - - if (isVertical) - { - arrowDownRight = RAYGUI_CLITERAL(Rectangle){(float)bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)bounds.y + bounds.height - spinnerSize - GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)spinnerSize, (float)spinnerSize}; - scrollbar = RAYGUI_CLITERAL(Rectangle){bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING), arrowUpLeft.y + arrowUpLeft.height, bounds.width - 2 * (GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING)), bounds.height - arrowUpLeft.height - arrowDownRight.height - 2 * GuiGetStyle(SCROLLBAR, BORDER_WIDTH)}; - sliderSize = (sliderSize >= scrollbar.height) ? (scrollbar.height - 2) : sliderSize; // Make sure the slider won't get outside of the scrollbar - slider = RAYGUI_CLITERAL(Rectangle){(float)bounds.x + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING), (float)scrollbar.y + (int)(((float)(value - minValue) / range) * (scrollbar.height - sliderSize)), (float)bounds.width - 2 * (GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING)), (float)sliderSize}; - } - else - { - arrowDownRight = RAYGUI_CLITERAL(Rectangle){(float)bounds.x + bounds.width - spinnerSize - GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH), (float)spinnerSize, (float)spinnerSize}; - scrollbar = RAYGUI_CLITERAL(Rectangle){arrowUpLeft.x + arrowUpLeft.width, bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING), bounds.width - arrowUpLeft.width - arrowDownRight.width - 2 * GuiGetStyle(SCROLLBAR, BORDER_WIDTH), bounds.height - 2 * (GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_PADDING))}; - sliderSize = (sliderSize >= scrollbar.width) ? (scrollbar.width - 2) : sliderSize; // Make sure the slider won't get outside of the scrollbar - slider = RAYGUI_CLITERAL(Rectangle){(float)scrollbar.x + (int)(((float)(value - minValue) / range) * (scrollbar.width - sliderSize)), (float)bounds.y + GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING), (float)sliderSize, (float)bounds.height - 2 * (GuiGetStyle(SCROLLBAR, BORDER_WIDTH) + GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING))}; - } - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = GUI_STATE_FOCUSED; - - // Handle mouse wheel - int wheel = GetMouseWheelMove(); - if (wheel != 0) - value += wheel; - - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - if (CheckCollisionPointRec(mousePoint, arrowUpLeft)) - value -= range / GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - else if (CheckCollisionPointRec(mousePoint, arrowDownRight)) - value += range / GuiGetStyle(SCROLLBAR, SCROLL_SPEED); - - state = GUI_STATE_PRESSED; - } - else if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - if (!isVertical) - { - Rectangle scrollArea = {arrowUpLeft.x + arrowUpLeft.width, arrowUpLeft.y, scrollbar.width, bounds.height - 2 * GuiGetStyle(SCROLLBAR, BORDER_WIDTH)}; - if (CheckCollisionPointRec(mousePoint, scrollArea)) - value = ((float)(mousePoint.x - scrollArea.x - slider.width / 2) * range) / (scrollArea.width - slider.width) + minValue; - } - else - { - Rectangle scrollArea = {arrowUpLeft.x, arrowUpLeft.y + arrowUpLeft.height, bounds.width - 2 * GuiGetStyle(SCROLLBAR, BORDER_WIDTH), scrollbar.height}; - if (CheckCollisionPointRec(mousePoint, scrollArea)) - value = ((float)(mousePoint.y - scrollArea.y - slider.height / 2) * range) / (scrollArea.height - slider.height) + minValue; - } - } - } - - // Normalize value - if (value > maxValue) - value = maxValue; - if (value < minValue) - value = minValue; - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(SCROLLBAR, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER + state * 3)), guiAlpha), Fade(GetColor(GuiGetStyle(DEFAULT, BORDER_COLOR_DISABLED)), guiAlpha)); // Draw the background - - GuiDrawRectangle(scrollbar, 0, BLANK, Fade(GetColor(GuiGetStyle(BUTTON, BASE_COLOR_NORMAL)), guiAlpha)); // Draw the scrollbar active area background - GuiDrawRectangle(slider, 0, BLANK, Fade(GetColor(GuiGetStyle(SLIDER, BORDER + state * 3)), guiAlpha)); // Draw the slider bar - - // Draw arrows - const int padding = (spinnerSize - GuiGetStyle(SCROLLBAR, ARROWS_SIZE)) / 2; - const Vector2 lineCoords[] = - { - // Coordinates for < 0,1,2 - {arrowUpLeft.x + padding, arrowUpLeft.y + spinnerSize / 2}, - {arrowUpLeft.x + spinnerSize - padding, arrowUpLeft.y + padding}, - {arrowUpLeft.x + spinnerSize - padding, arrowUpLeft.y + spinnerSize - padding}, - - // Coordinates for > 3,4,5 - {arrowDownRight.x + padding, arrowDownRight.y + padding}, - {arrowDownRight.x + spinnerSize - padding, arrowDownRight.y + spinnerSize / 2}, - {arrowDownRight.x + padding, arrowDownRight.y + spinnerSize - padding}, - - // Coordinates for ∧ 6,7,8 - {arrowUpLeft.x + spinnerSize / 2, arrowUpLeft.y + padding}, - {arrowUpLeft.x + padding, arrowUpLeft.y + spinnerSize - padding}, - {arrowUpLeft.x + spinnerSize - padding, arrowUpLeft.y + spinnerSize - padding}, - - // Coordinates for ∨ 9,10,11 - {arrowDownRight.x + padding, arrowDownRight.y + padding}, - {arrowDownRight.x + spinnerSize / 2, arrowDownRight.y + spinnerSize - padding}, - {arrowDownRight.x + spinnerSize - padding, arrowDownRight.y + padding}}; - - Color lineColor = Fade(GetColor(GuiGetStyle(BUTTON, TEXT + state * 3)), guiAlpha); - - if (GuiGetStyle(SCROLLBAR, ARROWS_VISIBLE)) - { - if (isVertical) - { - DrawTriangle(lineCoords[6], lineCoords[7], lineCoords[8], lineColor); - DrawTriangle(lineCoords[9], lineCoords[10], lineCoords[11], lineColor); - } - else - { - DrawTriangle(lineCoords[2], lineCoords[1], lineCoords[0], lineColor); - DrawTriangle(lineCoords[5], lineCoords[4], lineCoords[3], lineColor); - } - } - //-------------------------------------------------------------------- - - return value; -} - -// List View control -int GuiListView(Rectangle bounds, const char *text, int *scrollIndex, int active) -{ - int itemsCount = 0; - const char **items = NULL; - - if (text != NULL) - items = GuiTextSplit(text, &itemsCount, NULL); - - return GuiListViewEx(bounds, items, itemsCount, NULL, scrollIndex, active); -} - -// List View control with extended parameters -int GuiListViewEx(Rectangle bounds, const char **text, int count, int *focus, int *scrollIndex, int active) -{ - GuiControlState state = guiState; - int itemFocused = (focus == NULL) ? -1 : *focus; - int itemSelected = active; - - // Check if we need a scroll bar - bool useScrollBar = false; - if ((GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING)) * count > bounds.height) - useScrollBar = true; - - // Define base item rectangle [0] - Rectangle itemBounds = {0}; - itemBounds.x = bounds.x + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING); - itemBounds.y = bounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING) + GuiGetStyle(DEFAULT, BORDER_WIDTH); - itemBounds.width = bounds.width - 2 * GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING) - GuiGetStyle(DEFAULT, BORDER_WIDTH); - itemBounds.height = GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT); - if (useScrollBar) - itemBounds.width -= GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH); - - // Get items on the list - int visibleItems = bounds.height / (GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING)); - if (visibleItems > count) - visibleItems = count; - - int startIndex = (scrollIndex == NULL) ? 0 : *scrollIndex; - if ((startIndex < 0) || (startIndex > (count - visibleItems))) - startIndex = 0; - int endIndex = startIndex + visibleItems; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - // Check mouse inside list view - if (CheckCollisionPointRec(mousePoint, bounds)) - { - state = GUI_STATE_FOCUSED; - - // Check focused and selected item - for (int i = 0; i < visibleItems; i++) - { - if (CheckCollisionPointRec(mousePoint, itemBounds)) - { - itemFocused = startIndex + i; - if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) - { - if (itemSelected == (startIndex + i)) - itemSelected = -1; - else - itemSelected = startIndex + i; - } - break; - } - - // Update item rectangle y position for next item - itemBounds.y += (GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING)); - } - - if (useScrollBar) - { - int wheelMove = GetMouseWheelMove(); - startIndex -= wheelMove; - - if (startIndex < 0) - startIndex = 0; - else if (startIndex > (count - visibleItems)) - startIndex = count - visibleItems; - - endIndex = startIndex + visibleItems; - if (endIndex > count) - endIndex = count; - } - } - else - itemFocused = -1; - - // Reset item rectangle y to [0] - itemBounds.y = bounds.y + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING) + GuiGetStyle(DEFAULT, BORDER_WIDTH); - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - GuiDrawRectangle(bounds, GuiGetStyle(DEFAULT, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER + state * 3)), guiAlpha), GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR))); // Draw background - - // Draw visible items - for (int i = 0; ((i < visibleItems) && (text != NULL)); i++) - { - if (state == GUI_STATE_DISABLED) - { - if ((startIndex + i) == itemSelected) - GuiDrawRectangle(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_DISABLED)), guiAlpha), Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_DISABLED)), guiAlpha)); - - GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_DISABLED)), guiAlpha)); - } - else - { - if ((startIndex + i) == itemSelected) - { - // Draw item selected - GuiDrawRectangle(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_PRESSED)), guiAlpha), Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_PRESSED)), guiAlpha)); - GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_PRESSED)), guiAlpha)); - } - else if ((startIndex + i) == itemFocused) - { - // Draw item focused - GuiDrawRectangle(itemBounds, GuiGetStyle(LISTVIEW, BORDER_WIDTH), Fade(GetColor(GuiGetStyle(LISTVIEW, BORDER_COLOR_FOCUSED)), guiAlpha), Fade(GetColor(GuiGetStyle(LISTVIEW, BASE_COLOR_FOCUSED)), guiAlpha)); - GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_FOCUSED)), guiAlpha)); - } - else - { - // Draw item normal - GuiDrawText(text[startIndex + i], GetTextBounds(DEFAULT, itemBounds), GuiGetStyle(LISTVIEW, TEXT_ALIGNMENT), Fade(GetColor(GuiGetStyle(LISTVIEW, TEXT_COLOR_NORMAL)), guiAlpha)); - } - } - - // Update item rectangle y position for next item - itemBounds.y += (GuiGetStyle(LISTVIEW, LIST_ITEMS_HEIGHT) + GuiGetStyle(LISTVIEW, LIST_ITEMS_PADDING)); - } - - if (useScrollBar) - { - Rectangle scrollBarBounds = { - bounds.x + bounds.width - GuiGetStyle(LISTVIEW, BORDER_WIDTH) - GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH), - bounds.y + GuiGetStyle(LISTVIEW, BORDER_WIDTH), (float)GuiGetStyle(LISTVIEW, SCROLLBAR_WIDTH), - bounds.height - 2 * GuiGetStyle(DEFAULT, BORDER_WIDTH)}; - - // Calculate percentage of visible items and apply same percentage to scrollbar - float percentVisible = (float)(endIndex - startIndex) / count; - float sliderSize = bounds.height * percentVisible; - - int prevSliderSize = GuiGetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE); // Save default slider size - int prevScrollSpeed = GuiGetStyle(SCROLLBAR, SCROLL_SPEED); // Save default scroll speed - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, sliderSize); // Change slider size - GuiSetStyle(SCROLLBAR, SCROLL_SPEED, count - visibleItems); // Change scroll speed - - startIndex = GuiScrollBar(scrollBarBounds, startIndex, 0, count - visibleItems); - - GuiSetStyle(SCROLLBAR, SCROLL_SPEED, prevScrollSpeed); // Reset scroll speed to default - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, prevSliderSize); // Reset slider size to default - } - //-------------------------------------------------------------------- - - if (focus != NULL) - *focus = itemFocused; - if (scrollIndex != NULL) - *scrollIndex = startIndex; - - return itemSelected; -} - -// Color Panel control -Color GuiColorPanelEx(Rectangle bounds, Color color, float hue) -{ - GuiControlState state = guiState; - Vector2 pickerSelector = {0}; - - Vector3 vcolor = {(float)color.r / 255.0f, (float)color.g / 255.0f, (float)color.b / 255.0f}; - Vector3 hsv = ConvertRGBtoHSV(vcolor); - - pickerSelector.x = bounds.x + (float)hsv.y * bounds.width; // HSV: Saturation - pickerSelector.y = bounds.y + (1.0f - (float)hsv.z) * bounds.height; // HSV: Value - - Vector3 maxHue = {hue >= 0.0f ? hue : hsv.x, 1.0f, 1.0f}; - Vector3 rgbHue = ConvertHSVtoRGB(maxHue); - Color maxHueCol = {(unsigned char)(255.0f * rgbHue.x), - (unsigned char)(255.0f * rgbHue.y), - (unsigned char)(255.0f * rgbHue.z), 255}; - - const Color colWhite = {255, 255, 255, 255}; - const Color colBlack = {0, 0, 0, 255}; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = GUI_STATE_PRESSED; - pickerSelector = mousePoint; - - // Calculate color from picker - Vector2 colorPick = {pickerSelector.x - bounds.x, pickerSelector.y - bounds.y}; - - colorPick.x /= (float)bounds.width; // Get normalized value on x - colorPick.y /= (float)bounds.height; // Get normalized value on y - - hsv.y = colorPick.x; - hsv.z = 1.0f - colorPick.y; - - Vector3 rgb = ConvertHSVtoRGB(hsv); - - // NOTE: Vector3ToColor() only available on raylib 1.8.1 - color = RAYGUI_CLITERAL(Color){(unsigned char)(255.0f * rgb.x), - (unsigned char)(255.0f * rgb.y), - (unsigned char)(255.0f * rgb.z), - (unsigned char)(255.0f * (float)color.a / 255.0f)}; - } - else - state = GUI_STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state != GUI_STATE_DISABLED) - { - DrawRectangleGradientEx(bounds, Fade(colWhite, guiAlpha), Fade(colWhite, guiAlpha), Fade(maxHueCol, guiAlpha), Fade(maxHueCol, guiAlpha)); - DrawRectangleGradientEx(bounds, Fade(colBlack, 0), Fade(colBlack, guiAlpha), Fade(colBlack, guiAlpha), Fade(colBlack, 0)); - - // Draw color picker: selector - Rectangle selector = {pickerSelector.x - GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE) / 2, pickerSelector.y - GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE) / 2, GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE), GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE)}; - GuiDrawRectangle(selector, 0, BLANK, Fade(colWhite, guiAlpha)); - } - else - { - DrawRectangleGradientEx(bounds, Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), guiAlpha), Fade(Fade(colBlack, 0.6f), guiAlpha), Fade(Fade(colBlack, 0.6f), guiAlpha), Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), 0.6f), guiAlpha)); - } - - GuiDrawRectangle(bounds, 1, Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state * 3)), guiAlpha), BLANK); - //-------------------------------------------------------------------- - - return color; -} - -Color GuiColorPanel(Rectangle bounds, Color color) -{ - return GuiColorPanelEx(bounds, color, -1.0f); -} - -// Color Bar Alpha control -// NOTE: Returns alpha value normalized [0..1] -float GuiColorBarAlpha(Rectangle bounds, float alpha) -{ -#define COLORBARALPHA_CHECKED_SIZE 10 - - GuiControlState state = guiState; - Rectangle selector = {(float)bounds.x + alpha * bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)bounds.y - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT), (float)bounds.height + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) * 2}; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds) || - CheckCollisionPointRec(mousePoint, selector)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = GUI_STATE_PRESSED; - selector.x = mousePoint.x - selector.width / 2; - - alpha = (mousePoint.x - bounds.x) / bounds.width; - if (alpha <= 0.0f) - alpha = 0.0f; - if (alpha >= 1.0f) - alpha = 1.0f; - //selector.x = bounds.x + (int)(((alpha - 0)/(100 - 0))*(bounds.width - 2*GuiGetStyle(SLIDER, BORDER_WIDTH))) - selector.width/2; - } - else - state = GUI_STATE_FOCUSED; - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - - // Draw alpha bar: checked background - if (state != GUI_STATE_DISABLED) - { - int checksX = bounds.width / COLORBARALPHA_CHECKED_SIZE; - int checksY = bounds.height / COLORBARALPHA_CHECKED_SIZE; - - for (int x = 0; x < checksX; x++) - { - for (int y = 0; y < checksY; y++) - { - Rectangle check = {bounds.x + x * COLORBARALPHA_CHECKED_SIZE, bounds.y + y * COLORBARALPHA_CHECKED_SIZE, COLORBARALPHA_CHECKED_SIZE, COLORBARALPHA_CHECKED_SIZE}; - GuiDrawRectangle(check, 0, BLANK, ((x + y) % 2) ? Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), 0.4f), guiAlpha) : Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.4f), guiAlpha)); - } - } - - DrawRectangleGradientEx(bounds, RAYGUI_CLITERAL(Color){255, 255, 255, 0}, RAYGUI_CLITERAL(Color){255, 255, 255, 0}, Fade(RAYGUI_CLITERAL(Color){0, 0, 0, 255}, guiAlpha), Fade(RAYGUI_CLITERAL(Color){0, 0, 0, 255}, guiAlpha)); - } - else - DrawRectangleGradientEx(bounds, Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), guiAlpha), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), guiAlpha)); - - GuiDrawRectangle(bounds, 1, Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state * 3)), guiAlpha), BLANK); - - // Draw alpha bar: selector - GuiDrawRectangle(selector, 0, BLANK, Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state * 3)), guiAlpha)); - //-------------------------------------------------------------------- - - return alpha; -} - -// Color Bar Hue control -// NOTE: Returns hue value normalized [0..1] -float GuiColorBarHue(Rectangle bounds, float hue) -{ - GuiControlState state = guiState; - Rectangle selector = {(float)bounds.x - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)bounds.y + hue / 360.0f * bounds.height - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (float)bounds.width + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) * 2, (float)GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT)}; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - Vector2 mousePoint = GetMousePosition(); - - if (CheckCollisionPointRec(mousePoint, bounds) || - CheckCollisionPointRec(mousePoint, selector)) - { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) - { - state = GUI_STATE_PRESSED; - selector.y = mousePoint.y - selector.height / 2; - - hue = (mousePoint.y - bounds.y) * 360 / bounds.height; - if (hue <= 0.0f) - hue = 0.0f; - if (hue >= 359.0f) - hue = 359.0f; - } - else - state = GUI_STATE_FOCUSED; - - /*if (IsKeyDown(KEY_UP)) - { - hue -= 2.0f; - if (hue <= 0.0f) hue = 0.0f; - } - else if (IsKeyDown(KEY_DOWN)) - { - hue += 2.0f; - if (hue >= 360.0f) hue = 360.0f; - }*/ - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - if (state != GUI_STATE_DISABLED) - { - // Draw hue bar:color bars - DrawRectangleGradientV(bounds.x + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.y + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (int)bounds.height / 6, Fade(RAYGUI_CLITERAL(Color){255, 0, 0, 255}, guiAlpha), Fade(RAYGUI_CLITERAL(Color){255, 255, 0, 255}, guiAlpha)); - DrawRectangleGradientV(bounds.x + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.y + (int)bounds.height / 6 + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (int)bounds.height / 6, Fade(RAYGUI_CLITERAL(Color){255, 255, 0, 255}, guiAlpha), Fade(RAYGUI_CLITERAL(Color){0, 255, 0, 255}, guiAlpha)); - DrawRectangleGradientV(bounds.x + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.y + 2 * ((int)bounds.height / 6) + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (int)bounds.height / 6, Fade(RAYGUI_CLITERAL(Color){0, 255, 0, 255}, guiAlpha), Fade(RAYGUI_CLITERAL(Color){0, 255, 255, 255}, guiAlpha)); - DrawRectangleGradientV(bounds.x + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.y + 3 * ((int)bounds.height / 6) + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (int)bounds.height / 6, Fade(RAYGUI_CLITERAL(Color){0, 255, 255, 255}, guiAlpha), Fade(RAYGUI_CLITERAL(Color){0, 0, 255, 255}, guiAlpha)); - DrawRectangleGradientV(bounds.x + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.y + 4 * ((int)bounds.height / 6) + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (int)bounds.height / 6, Fade(RAYGUI_CLITERAL(Color){0, 0, 255, 255}, guiAlpha), Fade(RAYGUI_CLITERAL(Color){255, 0, 255, 255}, guiAlpha)); - DrawRectangleGradientV(bounds.x + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.y + 5 * ((int)bounds.height / 6) + GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW) / 2, bounds.width - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), (int)bounds.height / 6 - GuiGetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW), Fade(RAYGUI_CLITERAL(Color){255, 0, 255, 255}, guiAlpha), Fade(RAYGUI_CLITERAL(Color){255, 0, 0, 255}, guiAlpha)); - } - else - DrawRectangleGradientV(bounds.x, bounds.y, bounds.width, bounds.height, Fade(Fade(GetColor(GuiGetStyle(COLORPICKER, BASE_COLOR_DISABLED)), 0.1f), guiAlpha), Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER_COLOR_DISABLED)), guiAlpha)); - - GuiDrawRectangle(bounds, 1, Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state * 3)), guiAlpha), BLANK); - - // Draw hue bar: selector - GuiDrawRectangle(selector, 0, BLANK, Fade(GetColor(GuiGetStyle(COLORPICKER, BORDER + state * 3)), guiAlpha)); - //-------------------------------------------------------------------- - - return hue; -} - -// TODO: Color GuiColorBarSat() [WHITE->color] -// TODO: Color GuiColorBarValue() [BLACK->color], HSV / HSL -// TODO: float GuiColorBarLuminance() [BLACK->WHITE] - -// Color Picker control -// NOTE: It's divided in multiple controls: -// Color GuiColorPanel(Rectangle bounds, Color color) -// float GuiColorBarAlpha(Rectangle bounds, float alpha) -// float GuiColorBarHue(Rectangle bounds, float value) -// NOTE: bounds define GuiColorPanel() size -Color GuiColorPicker(Rectangle bounds, Color color) -{ - color = GuiColorPanel(bounds, color); - - Rectangle boundsHue = {(float)bounds.x + bounds.width + GuiGetStyle(COLORPICKER, HUEBAR_PADDING), (float)bounds.y, (float)GuiGetStyle(COLORPICKER, HUEBAR_WIDTH), (float)bounds.height}; - //Rectangle boundsAlpha = { bounds.x, bounds.y + bounds.height + GuiGetStyle(COLORPICKER, BARS_PADDING), bounds.width, GuiGetStyle(COLORPICKER, BARS_THICK) }; - - Vector3 hsv = ConvertRGBtoHSV(RAYGUI_CLITERAL(Vector3){color.r / 255.0f, color.g / 255.0f, color.b / 255.0f}); - hsv.x = GuiColorBarHue(boundsHue, hsv.x); - //color.a = (unsigned char)(GuiColorBarAlpha(boundsAlpha, (float)color.a/255.0f)*255.0f); - Vector3 rgb = ConvertHSVtoRGB(hsv); - color = RAYGUI_CLITERAL(Color){(unsigned char)roundf(rgb.x * 255.0f), (unsigned char)roundf(rgb.y * 255.0f), (unsigned char)roundf(rgb.z * 255.0f), color.a}; - - return color; -} - -// Message Box control -int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons) -{ -#define MESSAGEBOX_BUTTON_HEIGHT 24 -#define MESSAGEBOX_BUTTON_PADDING 10 - - int clicked = -1; // Returns clicked button from buttons list, 0 refers to closed window button - - int buttonsCount = 0; - const char **buttonsText = GuiTextSplit(buttons, &buttonsCount, NULL); - Rectangle buttonBounds = {0}; - buttonBounds.x = bounds.x + MESSAGEBOX_BUTTON_PADDING; - buttonBounds.y = bounds.y + bounds.height - MESSAGEBOX_BUTTON_HEIGHT - MESSAGEBOX_BUTTON_PADDING; - buttonBounds.width = (bounds.width - MESSAGEBOX_BUTTON_PADDING * (buttonsCount + 1)) / buttonsCount; - buttonBounds.height = MESSAGEBOX_BUTTON_HEIGHT; - - Vector2 textSize = MeasureTextEx(guiFont, message, GuiGetStyle(DEFAULT, TEXT_SIZE), 1); - - Rectangle textBounds = {0}; - textBounds.x = bounds.x + bounds.width / 2 - textSize.x / 2; - textBounds.y = bounds.y + WINDOW_STATUSBAR_HEIGHT + (bounds.height - WINDOW_STATUSBAR_HEIGHT - MESSAGEBOX_BUTTON_HEIGHT - MESSAGEBOX_BUTTON_PADDING) / 2 - textSize.y / 2; - textBounds.width = textSize.x; - textBounds.height = textSize.y; - - // Draw control - //-------------------------------------------------------------------- - if (GuiWindowBox(bounds, title)) - clicked = 0; - - int prevTextAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT); - GuiSetStyle(LABEL, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); - GuiLabel(textBounds, message); - GuiSetStyle(LABEL, TEXT_ALIGNMENT, prevTextAlignment); - - prevTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); - - for (int i = 0; i < buttonsCount; i++) - { - if (GuiButton(buttonBounds, buttonsText[i])) - clicked = i + 1; - buttonBounds.x += (buttonBounds.width + MESSAGEBOX_BUTTON_PADDING); - } - - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, prevTextAlignment); - //-------------------------------------------------------------------- - - return clicked; -} - -// Text Input Box control, ask for text -int GuiTextInputBox(Rectangle bounds, const char *title, const char *message, const char *buttons, char *text) -{ -#define TEXTINPUTBOX_BUTTON_HEIGHT 24 -#define TEXTINPUTBOX_BUTTON_PADDING 10 -#define TEXTINPUTBOX_HEIGHT 30 - -#define TEXTINPUTBOX_MAX_TEXT_LENGTH 256 - - // Used to enable text edit mode - // WARNING: No more than one GuiTextInputBox() should be open at the same time - static bool textEditMode = false; - - int btnIndex = -1; - - int buttonsCount = 0; - const char **buttonsText = GuiTextSplit(buttons, &buttonsCount, NULL); - Rectangle buttonBounds = {0}; - buttonBounds.x = bounds.x + TEXTINPUTBOX_BUTTON_PADDING; - buttonBounds.y = bounds.y + bounds.height - TEXTINPUTBOX_BUTTON_HEIGHT - TEXTINPUTBOX_BUTTON_PADDING; - buttonBounds.width = (bounds.width - TEXTINPUTBOX_BUTTON_PADDING * (buttonsCount + 1)) / buttonsCount; - buttonBounds.height = TEXTINPUTBOX_BUTTON_HEIGHT; - - int messageInputHeight = bounds.height - WINDOW_STATUSBAR_HEIGHT - GuiGetStyle(STATUSBAR, BORDER_WIDTH) - TEXTINPUTBOX_BUTTON_HEIGHT - 2 * TEXTINPUTBOX_BUTTON_PADDING; - - Rectangle textBounds = {0}; - if (message != NULL) - { - Vector2 textSize = MeasureTextEx(guiFont, message, GuiGetStyle(DEFAULT, TEXT_SIZE), 1); - - textBounds.x = bounds.x + bounds.width / 2 - textSize.x / 2; - textBounds.y = bounds.y + WINDOW_STATUSBAR_HEIGHT + messageInputHeight / 4 - textSize.y / 2; - textBounds.width = textSize.x; - textBounds.height = textSize.y; - } - - Rectangle textBoxBounds = {0}; - textBoxBounds.x = bounds.x + TEXTINPUTBOX_BUTTON_PADDING; - textBoxBounds.y = bounds.y + WINDOW_STATUSBAR_HEIGHT - TEXTINPUTBOX_HEIGHT / 2; - if (message == NULL) - textBoxBounds.y += messageInputHeight / 2; - else - textBoxBounds.y += (messageInputHeight / 2 + messageInputHeight / 4); - textBoxBounds.width = bounds.width - TEXTINPUTBOX_BUTTON_PADDING * 2; - textBoxBounds.height = TEXTINPUTBOX_HEIGHT; - - // Draw control - //-------------------------------------------------------------------- - if (GuiWindowBox(bounds, title)) - btnIndex = 0; - - // Draw message if available - if (message != NULL) - { - int prevTextAlignment = GuiGetStyle(LABEL, TEXT_ALIGNMENT); - GuiSetStyle(LABEL, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); - GuiLabel(textBounds, message); - GuiSetStyle(LABEL, TEXT_ALIGNMENT, prevTextAlignment); - } - - if (GuiTextBox(textBoxBounds, text, TEXTINPUTBOX_MAX_TEXT_LENGTH, textEditMode)) - textEditMode = !textEditMode; - - int prevBtnTextAlignment = GuiGetStyle(BUTTON, TEXT_ALIGNMENT); - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); - - for (int i = 0; i < buttonsCount; i++) - { - if (GuiButton(buttonBounds, buttonsText[i])) - btnIndex = i + 1; - buttonBounds.x += (buttonBounds.width + MESSAGEBOX_BUTTON_PADDING); - } - - GuiSetStyle(BUTTON, TEXT_ALIGNMENT, prevBtnTextAlignment); - //-------------------------------------------------------------------- - - return btnIndex; -} - -// Grid control -// NOTE: Returns grid mouse-hover selected cell -// About drawing lines at subpixel spacing, simple put, not easy solution: -// https://stackoverflow.com/questions/4435450/2d-opengl-drawing-lines-that-dont-exactly-fit-pixel-raster -Vector2 GuiGrid(Rectangle bounds, float spacing, int subdivs) -{ -#if !defined(GRID_COLOR_ALPHA) -#define GRID_COLOR_ALPHA 0.15f // Grid lines alpha amount -#endif - - GuiControlState state = guiState; - Vector2 mousePoint = GetMousePosition(); - Vector2 currentCell = {-1, -1}; - - int linesV = ((int)(bounds.width / spacing)) * subdivs + 1; - int linesH = ((int)(bounds.height / spacing)) * subdivs + 1; - - // Update control - //-------------------------------------------------------------------- - if ((state != GUI_STATE_DISABLED) && !guiLocked) - { - if (CheckCollisionPointRec(mousePoint, bounds)) - { - currentCell.x = (int)((mousePoint.x - bounds.x) / spacing); - currentCell.y = (int)((mousePoint.y - bounds.y) / spacing); - } - } - //-------------------------------------------------------------------- - - // Draw control - //-------------------------------------------------------------------- - switch (state) - { - case GUI_STATE_NORMAL: - { - if (subdivs > 0) - { - // Draw vertical grid lines - for (int i = 0; i < linesV; i++) - { - Rectangle lineV = {bounds.x + spacing * i / subdivs, bounds.y, 1, bounds.height}; - GuiDrawRectangle(lineV, 0, BLANK, ((i % subdivs) == 0) ? Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), GRID_COLOR_ALPHA * 4) : Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), GRID_COLOR_ALPHA)); - } - - // Draw horizontal grid lines - for (int i = 0; i < linesH; i++) - { - Rectangle lineH = {bounds.x, bounds.y + spacing * i / subdivs, bounds.width, 1}; - GuiDrawRectangle(lineH, 0, BLANK, ((i % subdivs) == 0) ? Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), GRID_COLOR_ALPHA * 4) : Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), GRID_COLOR_ALPHA)); - } - } - } - break; - default: - break; - } - - return currentCell; -} - -//---------------------------------------------------------------------------------- -// Styles loading functions -//---------------------------------------------------------------------------------- - -// Load raygui style file (.rgs) -void GuiLoadStyle(const char *fileName) -{ - bool tryBinary = false; - - // Try reading the files as text file first - FILE *rgsFile = fopen(fileName, "rt"); - - if (rgsFile != NULL) - { - char buffer[256] = {0}; - fgets(buffer, 256, rgsFile); - - if (buffer[0] == '#') - { - int controlId = 0; - int propertyId = 0; - unsigned int propertyValue = 0; - - while (!feof(rgsFile)) - { - switch (buffer[0]) - { - case 'p': - { - // Style property: p - - sscanf(buffer, "p %d %d 0x%x", &controlId, &propertyId, &propertyValue); - - GuiSetStyle(controlId, propertyId, (int)propertyValue); - } - break; - case 'f': - { - // Style font: f - - int fontSize = 0; - char charmapFileName[256] = {0}; - char fontFileName[256] = {0}; - sscanf(buffer, "f %d %s %[^\n]s", &fontSize, charmapFileName, fontFileName); - - Font font = {0}; - - if (charmapFileName[0] != '0') - { - // Load characters from charmap file, - // expected '\n' separated list of integer values - char *charValues = LoadText(charmapFileName); - if (charValues != NULL) - { - int charsCount = 0; - const char **chars = TextSplit(charValues, '\n', &charsCount); - - int *values = (int *)RAYGUI_MALLOC(charsCount * sizeof(int)); - for (int i = 0; i < charsCount; i++) - values[i] = TextToInteger(chars[i]); - - font = LoadFontEx(TextFormat("%s/%s", GetDirectoryPath(fileName), fontFileName), fontSize, values, charsCount); - - RAYGUI_FREE(values); - } - } - else - font = LoadFontEx(TextFormat("%s/%s", GetDirectoryPath(fileName), fontFileName), fontSize, NULL, 0); - - if ((font.texture.id > 0) && (font.charsCount > 0)) - GuiSetFont(font); - } - break; - default: - break; - } - - fgets(buffer, 256, rgsFile); - } - } - else - tryBinary = true; - - fclose(rgsFile); - } - - if (tryBinary) - { - rgsFile = fopen(fileName, "rb"); - - if (rgsFile == NULL) - return; - - char signature[5] = ""; - short version = 0; - short reserved = 0; - int propertiesCount = 0; - - fread(signature, 1, 4, rgsFile); - fread(&version, 1, sizeof(short), rgsFile); - fread(&reserved, 1, sizeof(short), rgsFile); - fread(&propertiesCount, 1, sizeof(int), rgsFile); - - if ((signature[0] == 'r') && - (signature[1] == 'G') && - (signature[2] == 'S') && - (signature[3] == ' ')) - { - short controlId = 0; - short propertyId = 0; - int propertyValue = 0; - - for (int i = 0; i < propertiesCount; i++) - { - fread(&controlId, 1, sizeof(short), rgsFile); - fread(&propertyId, 1, sizeof(short), rgsFile); - fread(&propertyValue, 1, sizeof(int), rgsFile); - - if (controlId == 0) // DEFAULT control - { - // If a DEFAULT property is loaded, it is propagated to all controls - // NOTE: All DEFAULT properties should be defined first in the file - GuiSetStyle(0, (int)propertyId, propertyValue); - - if (propertyId < NUM_PROPS_DEFAULT) - for (int i = 1; i < NUM_CONTROLS; i++) - GuiSetStyle(i, (int)propertyId, propertyValue); - } - else - GuiSetStyle((int)controlId, (int)propertyId, propertyValue); - } - - // Font loading is highly dependant on raylib API to load font data and image - // TODO: Find some mechanism to support it in standalone mode -#if !defined(RAYGUI_STANDALONE) - // Load custom font if available - int fontDataSize = 0; - fread(&fontDataSize, 1, sizeof(int), rgsFile); - - if (fontDataSize > 0) - { - Font font = {0}; - int fontType = 0; // 0-Normal, 1-SDF - Rectangle whiteRec = {0}; - - fread(&font.baseSize, 1, sizeof(int), rgsFile); - fread(&font.charsCount, 1, sizeof(int), rgsFile); - fread(&fontType, 1, sizeof(int), rgsFile); - - // Load font white rectangle - fread(&whiteRec, 1, sizeof(Rectangle), rgsFile); - - // Load font image parameters - int fontImageSize = 0; - fread(&fontImageSize, 1, sizeof(int), rgsFile); - - if (fontImageSize > 0) - { - Image imFont = {0}; - imFont.mipmaps = 1; - fread(&imFont.width, 1, sizeof(int), rgsFile); - fread(&imFont.height, 1, sizeof(int), rgsFile); - fread(&imFont.format, 1, sizeof(int), rgsFile); - - imFont.data = (unsigned char *)RAYGUI_MALLOC(fontImageSize); - fread(imFont.data, 1, fontImageSize, rgsFile); - - font.texture = LoadTextureFromImage(imFont); - - UnloadImage(imFont); - } - - // Load font recs data - font.recs = (Rectangle *)RAYGUI_CALLOC(font.charsCount, sizeof(Rectangle)); - for (int i = 0; i < font.charsCount; i++) - fread(&font.recs[i], 1, sizeof(Rectangle), rgsFile); - - // Load font chars info data - font.chars = (CharInfo *)RAYGUI_CALLOC(font.charsCount, sizeof(CharInfo)); - for (int i = 0; i < font.charsCount; i++) - { - fread(&font.chars[i].value, 1, sizeof(int), rgsFile); - fread(&font.chars[i].offsetX, 1, sizeof(int), rgsFile); - fread(&font.chars[i].offsetY, 1, sizeof(int), rgsFile); - fread(&font.chars[i].advanceX, 1, sizeof(int), rgsFile); - } - - GuiSetFont(font); - - // Set font texture source rectangle to be used as white texture to draw shapes - // NOTE: This way, all gui can be draw using a single draw call - if ((whiteRec.width != 0) && (whiteRec.height != 0)) - SetShapesTexture(font.texture, whiteRec); - } -#endif - } - - fclose(rgsFile); - } -} - -// Load style default over global style -void GuiLoadStyleDefault(void) -{ - // We set this variable first to avoid cyclic function calls - // when calling GuiSetStyle() and GuiGetStyle() - guiStyleLoaded = true; - - // Initialize default LIGHT style property values - GuiSetStyle(DEFAULT, BORDER_COLOR_NORMAL, 0x838383ff); - GuiSetStyle(DEFAULT, BASE_COLOR_NORMAL, 0xc9c9c9ff); - GuiSetStyle(DEFAULT, TEXT_COLOR_NORMAL, 0x686868ff); - GuiSetStyle(DEFAULT, BORDER_COLOR_FOCUSED, 0x5bb2d9ff); - GuiSetStyle(DEFAULT, BASE_COLOR_FOCUSED, 0xc9effeff); - GuiSetStyle(DEFAULT, TEXT_COLOR_FOCUSED, 0x6c9bbcff); - GuiSetStyle(DEFAULT, BORDER_COLOR_PRESSED, 0x0492c7ff); - GuiSetStyle(DEFAULT, BASE_COLOR_PRESSED, 0x97e8ffff); - GuiSetStyle(DEFAULT, TEXT_COLOR_PRESSED, 0x368bafff); - GuiSetStyle(DEFAULT, BORDER_COLOR_DISABLED, 0xb5c1c2ff); - GuiSetStyle(DEFAULT, BASE_COLOR_DISABLED, 0xe6e9e9ff); - GuiSetStyle(DEFAULT, TEXT_COLOR_DISABLED, 0xaeb7b8ff); - GuiSetStyle(DEFAULT, BORDER_WIDTH, 1); // WARNING: Some controls use other values - GuiSetStyle(DEFAULT, TEXT_PADDING, 0); // WARNING: Some controls use other values - GuiSetStyle(DEFAULT, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_CENTER); // WARNING: Some controls use other values - - // Initialize control-specific property values - // NOTE: Those properties are in default list but require specific values by control type - GuiSetStyle(LABEL, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_LEFT); - GuiSetStyle(BUTTON, BORDER_WIDTH, 2); - GuiSetStyle(SLIDER, TEXT_PADDING, 5); - GuiSetStyle(CHECKBOX, TEXT_PADDING, 5); - GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_RIGHT); - GuiSetStyle(TEXTBOX, TEXT_PADDING, 5); - GuiSetStyle(TEXTBOX, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_LEFT); - GuiSetStyle(VALUEBOX, TEXT_PADDING, 4); - GuiSetStyle(VALUEBOX, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_LEFT); - GuiSetStyle(SPINNER, TEXT_PADDING, 4); - GuiSetStyle(SPINNER, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_LEFT); - GuiSetStyle(STATUSBAR, TEXT_PADDING, 6); - GuiSetStyle(STATUSBAR, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_LEFT); - - // Initialize extended property values - // NOTE: By default, extended property values are initialized to 0 - GuiSetStyle(DEFAULT, TEXT_SIZE, 10); // DEFAULT, shared by all controls - GuiSetStyle(DEFAULT, TEXT_SPACING, 1); // DEFAULT, shared by all controls - GuiSetStyle(DEFAULT, LINE_COLOR, 0x90abb5ff); // DEFAULT specific property - GuiSetStyle(DEFAULT, BACKGROUND_COLOR, 0xf5f5f5ff); // DEFAULT specific property - GuiSetStyle(TOGGLE, GROUP_PADDING, 2); - GuiSetStyle(SLIDER, SLIDER_WIDTH, 15); - GuiSetStyle(SLIDER, SLIDER_PADDING, 1); - GuiSetStyle(PROGRESSBAR, PROGRESS_PADDING, 1); - GuiSetStyle(CHECKBOX, CHECK_PADDING, 1); - GuiSetStyle(COMBOBOX, COMBO_BUTTON_WIDTH, 30); - GuiSetStyle(COMBOBOX, COMBO_BUTTON_PADDING, 2); - GuiSetStyle(DROPDOWNBOX, ARROW_PADDING, 16); - GuiSetStyle(DROPDOWNBOX, DROPDOWN_ITEMS_PADDING, 2); - GuiSetStyle(TEXTBOX, TEXT_LINES_PADDING, 5); - GuiSetStyle(TEXTBOX, TEXT_INNER_PADDING, 4); - GuiSetStyle(TEXTBOX, COLOR_SELECTED_FG, 0xf0fffeff); - GuiSetStyle(TEXTBOX, COLOR_SELECTED_BG, 0x839affe0); - GuiSetStyle(SPINNER, SPIN_BUTTON_WIDTH, 20); - GuiSetStyle(SPINNER, SPIN_BUTTON_PADDING, 2); - GuiSetStyle(SCROLLBAR, BORDER_WIDTH, 0); - GuiSetStyle(SCROLLBAR, ARROWS_VISIBLE, 0); - GuiSetStyle(SCROLLBAR, ARROWS_SIZE, 6); - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_PADDING, 0); - GuiSetStyle(SCROLLBAR, SCROLL_SLIDER_SIZE, 16); - GuiSetStyle(SCROLLBAR, SCROLL_PADDING, 0); - GuiSetStyle(SCROLLBAR, SCROLL_SPEED, 10); - GuiSetStyle(LISTVIEW, LIST_ITEMS_HEIGHT, 0x1e); - GuiSetStyle(LISTVIEW, LIST_ITEMS_PADDING, 2); - GuiSetStyle(LISTVIEW, SCROLLBAR_WIDTH, 10); - GuiSetStyle(LISTVIEW, SCROLLBAR_SIDE, SCROLLBAR_RIGHT_SIDE); - GuiSetStyle(COLORPICKER, COLOR_SELECTOR_SIZE, 6); - GuiSetStyle(COLORPICKER, HUEBAR_WIDTH, 0x14); - GuiSetStyle(COLORPICKER, HUEBAR_PADDING, 0xa); - GuiSetStyle(COLORPICKER, HUEBAR_SELECTOR_HEIGHT, 6); - GuiSetStyle(COLORPICKER, HUEBAR_SELECTOR_OVERFLOW, 2); - - guiFont = GetFontDefault(); // Initialize default font -} - -// Get text with icon id prepended -// NOTE: Useful to add icons by name id (enum) instead of -// a number that can change between ricon versions -const char *GuiIconText(int iconId, const char *text) -{ -#if defined(RAYGUI_SUPPORT_ICONS) - static char buffer[1024] = {0}; - memset(buffer, 0, 1024); - - sprintf(buffer, "#%03i#", iconId); - - if (text != NULL) - { - for (int i = 5; i < 1024; i++) - { - buffer[i] = text[i - 5]; - if (text[i - 5] == '\0') - break; - } - } - - return buffer; -#else - return NULL; -#endif -} - -#if defined(RAYGUI_SUPPORT_ICONS) - -// Get full icons data pointer -unsigned int *GuiGetIcons(void) { return guiIcons; } - -// Load raygui icons file (.rgi) -// NOTE: In case nameIds are required, they can be requested with loadIconsName, -// they are returned as a guiIconsName[iconsCount][RICON_MAX_NAME_LENGTH], -// guiIconsName[]][] memory should be manually freed! -char **GuiLoadIcons(const char *fileName, bool loadIconsName) -{ - // Style File Structure (.rgi) - // ------------------------------------------------------ - // Offset | Size | Type | Description - // ------------------------------------------------------ - // 0 | 4 | char | Signature: "rGI " - // 4 | 2 | short | Version: 100 - // 6 | 2 | short | reserved - - // 8 | 2 | short | Num icons (N) - // 10 | 2 | short | Icons size (Options: 16, 32, 64) (S) - - // Icons name id (32 bytes per name id) - // foreach (icon) - // { - // 12+32*i | 32 | char | Icon NameId - // } - - // Icons data: One bit per pixel, stored as unsigned int array (depends on icon size) - // S*S pixels/32bit per unsigned int = K unsigned int per icon - // foreach (icon) - // { - // ... | K | unsigned int | Icon Data - // } - - FILE *rgiFile = fopen(fileName, "rb"); - - char **guiIconsName = NULL; - - if (rgiFile != NULL) - { - char signature[5] = ""; - short version = 0; - short reserved = 0; - short iconsCount = 0; - short iconsSize = 0; - - fread(signature, 1, 4, rgiFile); - fread(&version, 1, sizeof(short), rgiFile); - fread(&reserved, 1, sizeof(short), rgiFile); - fread(&iconsCount, 1, sizeof(short), rgiFile); - fread(&iconsSize, 1, sizeof(short), rgiFile); - - if ((signature[0] == 'r') && - (signature[1] == 'G') && - (signature[2] == 'I') && - (signature[3] == ' ')) - { - if (loadIconsName) - { - guiIconsName = (char **)RAYGUI_MALLOC(iconsCount * sizeof(char **)); - for (int i = 0; i < iconsCount; i++) - { - guiIconsName[i] = (char *)RAYGUI_MALLOC(RICON_MAX_NAME_LENGTH); - fread(guiIconsName[i], 32, 1, rgiFile); - } - } - - // Read icons data directly over guiIcons data array - fread(guiIcons, iconsCount * (iconsSize * iconsSize / 32), sizeof(unsigned int), rgiFile); - } - - fclose(rgiFile); - } - - return guiIconsName; -} - -// Draw selected icon using rectangles pixel-by-pixel -void GuiDrawIcon(int iconId, Vector2 position, int pixelSize, Color color) -{ -#define BIT_CHECK(a, b) ((a) & (1 << (b))) - - for (int i = 0, y = 0; i < RICON_SIZE * RICON_SIZE / 32; i++) - { - for (int k = 0; k < 32; k++) - { - if (BIT_CHECK(guiIcons[iconId * RICON_DATA_ELEMENTS + i], k)) - { -#if !defined(RAYGUI_STANDALONE) - DrawRectangle(position.x + (k % RICON_SIZE) * pixelSize, position.y + y * pixelSize, pixelSize, pixelSize, color); -#endif - } - - if ((k == 15) || (k == 31)) - y++; - } - } -} - -// Get icon bit data -// NOTE: Bit data array grouped as unsigned int (ICON_SIZE*ICON_SIZE/32 elements) -unsigned int *GuiGetIconData(int iconId) -{ - static unsigned int iconData[RICON_DATA_ELEMENTS] = {0}; - memset(iconData, 0, RICON_DATA_ELEMENTS * sizeof(unsigned int)); - - if (iconId < RICON_MAX_ICONS) - memcpy(iconData, &guiIcons[iconId * RICON_DATA_ELEMENTS], RICON_DATA_ELEMENTS * sizeof(unsigned int)); - - return iconData; -} - -// Set icon bit data -// NOTE: Data must be provided as unsigned int array (ICON_SIZE*ICON_SIZE/32 elements) -void GuiSetIconData(int iconId, unsigned int *data) -{ - if (iconId < RICON_MAX_ICONS) - memcpy(&guiIcons[iconId * RICON_DATA_ELEMENTS], data, RICON_DATA_ELEMENTS * sizeof(unsigned int)); -} - -// Set icon pixel value -void GuiSetIconPixel(int iconId, int x, int y) -{ -#define BIT_SET(a, b) ((a) |= (1 << (b))) - - // This logic works for any RICON_SIZE pixels icons, - // For example, in case of 16x16 pixels, every 2 lines fit in one unsigned int data element - BIT_SET(guiIcons[iconId * RICON_DATA_ELEMENTS + y / (sizeof(unsigned int) * 8 / RICON_SIZE)], x + (y % (sizeof(unsigned int) * 8 / RICON_SIZE) * RICON_SIZE)); -} - -// Clear icon pixel value -void GuiClearIconPixel(int iconId, int x, int y) -{ -#define BIT_CLEAR(a, b) ((a) &= ~((1) << (b))) - - // This logic works for any RICON_SIZE pixels icons, - // For example, in case of 16x16 pixels, every 2 lines fit in one unsigned int data element - BIT_CLEAR(guiIcons[iconId * RICON_DATA_ELEMENTS + y / (sizeof(unsigned int) * 8 / RICON_SIZE)], x + (y % (sizeof(unsigned int) * 8 / RICON_SIZE) * RICON_SIZE)); -} - -// Check icon pixel value -bool GuiCheckIconPixel(int iconId, int x, int y) -{ -#define BIT_CHECK(a, b) ((a) & (1 << (b))) - - return (BIT_CHECK(guiIcons[iconId * 8 + y / 2], x + (y % 2 * 16))); -} -#endif // RAYGUI_SUPPORT_ICONS - -//---------------------------------------------------------------------------------- -// Module specific Functions Definition -//---------------------------------------------------------------------------------- -// Gui get text width using default font -static int GetTextWidth(const char *text) -{ - Vector2 size = {0}; - - if ((text != NULL) && (text[0] != '\0')) - size = MeasureTextEx(guiFont, text, GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SPACING)); - - // TODO: Consider text icon width here??? - - return (int)size.x; -} - -// Get text bounds considering control bounds -static Rectangle GetTextBounds(int control, Rectangle bounds) -{ - Rectangle textBounds = bounds; - - textBounds.x = bounds.x + GuiGetStyle(control, BORDER_WIDTH); - textBounds.y = bounds.y + GuiGetStyle(control, BORDER_WIDTH); - textBounds.width = bounds.width - 2 * GuiGetStyle(control, BORDER_WIDTH); - textBounds.height = bounds.height - 2 * GuiGetStyle(control, BORDER_WIDTH); - - // Consider TEXT_PADDING properly, depends on control type and TEXT_ALIGNMENT - switch (control) - { - case COMBOBOX: - bounds.width -= (GuiGetStyle(control, COMBO_BUTTON_WIDTH) + GuiGetStyle(control, COMBO_BUTTON_PADDING)); - break; - case VALUEBOX: - break; // NOTE: ValueBox text value always centered, text padding applies to label - default: - { - if (GuiGetStyle(control, TEXT_ALIGNMENT) == GUI_TEXT_ALIGN_RIGHT) - textBounds.x -= GuiGetStyle(control, TEXT_PADDING); - else - textBounds.x += GuiGetStyle(control, TEXT_PADDING); - } - break; - } - - // TODO: Special cases (no label): COMBOBOX, DROPDOWNBOX, LISTVIEW (scrollbar?) - // More special cases (label side): CHECKBOX, SLIDER, VALUEBOX, SPINNER - - return textBounds; -} - -// Get text icon if provided and move text cursor -// NOTE: We support up to 999 values for iconId -static const char *GetTextIcon(const char *text, int *iconId) -{ -#if defined(RAYGUI_SUPPORT_ICONS) - *iconId = -1; - if (text[0] == '#') // Maybe we have an icon! - { - char iconValue[4] = {0}; // Maximum length for icon value: 3 digits + '\0' - - int pos = 1; - while ((pos < 4) && (text[pos] >= '0') && (text[pos] <= '9')) - { - iconValue[pos - 1] = text[pos]; - pos++; - } - - if (text[pos] == '#') - { - *iconId = TextToInteger(iconValue); - - // Move text pointer after icon - // WARNING: If only icon provided, it could point to EOL character! - if (*iconId >= 0) - text += (pos + 1); - } - } -#endif - - return text; -} - -// Gui draw text using default font -static void GuiDrawText(const char *text, Rectangle bounds, int alignment, Color tint) -{ -#define TEXT_VALIGN_PIXEL_OFFSET(h) ((int)h % 2) // Vertical alignment for pixel perfect - - if ((text != NULL) && (text[0] != '\0')) - { - int iconId = 0; - text = GetTextIcon(text, &iconId); // Check text for icon and move cursor - -// Get text position depending on alignment and iconId -//--------------------------------------------------------------------------------- -#define ICON_TEXT_PADDING 4 - - Vector2 position = {bounds.x, bounds.y}; - - // NOTE: We get text size after icon been processed - int textWidth = GetTextWidth(text); - int textHeight = GuiGetStyle(DEFAULT, TEXT_SIZE); - -#if defined(RAYGUI_SUPPORT_ICONS) - if (iconId >= 0) - { - textWidth += RICON_SIZE; - - // WARNING: If only icon provided, text could be pointing to eof character! - if ((text != NULL) && (text[0] != '\0')) - textWidth += ICON_TEXT_PADDING; - } -#endif - // Check guiTextAlign global variables - switch (alignment) - { - case GUI_TEXT_ALIGN_LEFT: - { - position.x = bounds.x; - position.y = bounds.y + bounds.height / 2 - textHeight / 2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height); - } - break; - case GUI_TEXT_ALIGN_CENTER: - { - position.x = bounds.x + bounds.width / 2 - textWidth / 2; - position.y = bounds.y + bounds.height / 2 - textHeight / 2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height); - } - break; - case GUI_TEXT_ALIGN_RIGHT: - { - position.x = bounds.x + bounds.width - textWidth; - position.y = bounds.y + bounds.height / 2 - textHeight / 2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height); - } - break; - default: - break; - } - - // NOTE: Make sure we get pixel-perfect coordinates, - // In case of decimals we got weird text positioning - position.x = (float)((int)position.x); - position.y = (float)((int)position.y); - //--------------------------------------------------------------------------------- - - // Draw text (with icon if available) - //--------------------------------------------------------------------------------- -#if defined(RAYGUI_SUPPORT_ICONS) - if (iconId >= 0) - { - // NOTE: We consider icon height, probably different than text size - GuiDrawIcon(iconId, RAYGUI_CLITERAL(Vector2){position.x, bounds.y + bounds.height / 2 - RICON_SIZE / 2 + TEXT_VALIGN_PIXEL_OFFSET(bounds.height)}, 1, tint); - position.x += (RICON_SIZE + ICON_TEXT_PADDING); - } -#endif - DrawTextEx(guiFont, text, position, GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SPACING), tint); - //--------------------------------------------------------------------------------- - } -} - -// Gui draw rectangle using default raygui plain style with borders -static void GuiDrawRectangle(Rectangle rec, int borderWidth, Color borderColor, Color color) -{ - if (color.a > 0) - { - // Draw rectangle filled with color - DrawRectangle(rec.x, rec.y, rec.width, rec.height, color); - } - - if (borderWidth > 0) - { - // Draw rectangle border lines with color - DrawRectangle(rec.x, rec.y, rec.width, borderWidth, borderColor); - DrawRectangle(rec.x, rec.y + borderWidth, borderWidth, rec.height - 2 * borderWidth, borderColor); - DrawRectangle(rec.x + rec.width - borderWidth, rec.y + borderWidth, borderWidth, rec.height - 2 * borderWidth, borderColor); - DrawRectangle(rec.x, rec.y + rec.height - borderWidth, rec.width, borderWidth, borderColor); - } - - // TODO: For n-patch-based style we would need: [state] and maybe [control] - // In this case all controls drawing logic should be moved to this function... I don't like it... -} - -// Draw tooltip relatively to bounds -static void GuiDrawTooltip(Rectangle bounds) -{ - //static int tooltipFramesCounter = 0; // Not possible gets reseted at second function call! - - if (guiTooltipEnabled && (guiTooltip != NULL) && CheckCollisionPointRec(GetMousePosition(), bounds)) - { - Vector2 mousePosition = GetMousePosition(); - Vector2 textSize = MeasureTextEx(guiFont, guiTooltip, GuiGetStyle(DEFAULT, TEXT_SIZE), GuiGetStyle(DEFAULT, TEXT_SPACING)); - Rectangle tooltipBounds = {mousePosition.x, mousePosition.y, textSize.x + 20, textSize.y * 2}; - - GuiDrawRectangle(tooltipBounds, 1, Fade(GetColor(GuiGetStyle(DEFAULT, LINE_COLOR)), guiAlpha), Fade(GetColor(GuiGetStyle(DEFAULT, BACKGROUND_COLOR)), guiAlpha)); - - tooltipBounds.x += 10; - GuiLabel(tooltipBounds, guiTooltip); - } -} - -// Split controls text into multiple strings -// Also check for multiple columns (required by GuiToggleGroup()) -static const char **GuiTextSplit(const char *text, int *count, int *textRow) -{ - // NOTE: Current implementation returns a copy of the provided string with '\0' (string end delimiter) - // inserted between strings defined by "delimiter" parameter. No memory is dynamically allocated, - // all used memory is static... it has some limitations: - // 1. Maximum number of possible split strings is set by TEXTSPLIT_MAX_TEXT_ELEMENTS - // 2. Maximum size of text to split is TEXTSPLIT_MAX_TEXT_LENGTH - // NOTE: Those definitions could be externally provided if required - -#if !defined(TEXTSPLIT_MAX_TEXT_LENGTH) -#define TEXTSPLIT_MAX_TEXT_LENGTH 1024 -#endif - -#if !defined(TEXTSPLIT_MAX_TEXT_ELEMENTS) -#define TEXTSPLIT_MAX_TEXT_ELEMENTS 128 -#endif - - static const char *result[TEXTSPLIT_MAX_TEXT_ELEMENTS] = {NULL}; - static char buffer[TEXTSPLIT_MAX_TEXT_LENGTH] = {0}; - memset(buffer, 0, TEXTSPLIT_MAX_TEXT_LENGTH); - - result[0] = buffer; - int counter = 1; - - if (textRow != NULL) - textRow[0] = 0; - - // Count how many substrings we have on text and point to every one - for (int i = 0; i < TEXTSPLIT_MAX_TEXT_LENGTH; i++) - { - buffer[i] = text[i]; - if (buffer[i] == '\0') - break; - else if ((buffer[i] == ';') || (buffer[i] == '\n')) - { - result[counter] = buffer + i + 1; - - if (textRow != NULL) - { - if (buffer[i] == '\n') - textRow[counter] = textRow[counter - 1] + 1; - else - textRow[counter] = textRow[counter - 1]; - } - - buffer[i] = '\0'; // Set an end of string at this point - - counter++; - if (counter == TEXTSPLIT_MAX_TEXT_ELEMENTS) - break; - } - } - - *count = counter; - - return result; -} - -// Convert color data from RGB to HSV -// NOTE: Color data should be passed normalized -static Vector3 ConvertRGBtoHSV(Vector3 rgb) -{ - Vector3 hsv = {0}; - float min = 0.0f; - float max = 0.0f; - float delta = 0.0f; - - min = (rgb.x < rgb.y) ? rgb.x : rgb.y; - min = (min < rgb.z) ? min : rgb.z; - - max = (rgb.x > rgb.y) ? rgb.x : rgb.y; - max = (max > rgb.z) ? max : rgb.z; - - hsv.z = max; // Value - delta = max - min; - - if (delta < 0.00001f) - { - hsv.y = 0.0f; - hsv.x = 0.0f; // Undefined, maybe NAN? - return hsv; - } - - if (max > 0.0f) - { - // NOTE: If max is 0, this divide would cause a crash - hsv.y = (delta / max); // Saturation - } - else - { - // NOTE: If max is 0, then r = g = b = 0, s = 0, h is undefined - hsv.y = 0.0f; - hsv.x = 0.0f; // Undefined, maybe NAN? - return hsv; - } - - // NOTE: Comparing float values could not work properly - if (rgb.x >= max) - hsv.x = (rgb.y - rgb.z) / delta; // Between yellow & magenta - else - { - if (rgb.y >= max) - hsv.x = 2.0f + (rgb.z - rgb.x) / delta; // Between cyan & yellow - else - hsv.x = 4.0f + (rgb.x - rgb.y) / delta; // Between magenta & cyan - } - - hsv.x *= 60.0f; // Convert to degrees - - if (hsv.x < 0.0f) - hsv.x += 360.0f; - - return hsv; -} - -// Convert color data from HSV to RGB -// NOTE: Color data should be passed normalized -static Vector3 ConvertHSVtoRGB(Vector3 hsv) -{ - Vector3 rgb = {0}; - float hh = 0.0f, p = 0.0f, q = 0.0f, t = 0.0f, ff = 0.0f; - long i = 0; - - // NOTE: Comparing float values could not work properly - if (hsv.y <= 0.0f) - { - rgb.x = hsv.z; - rgb.y = hsv.z; - rgb.z = hsv.z; - return rgb; - } - - hh = hsv.x; - if (hh >= 360.0f) - hh = 0.0f; - hh /= 60.0f; - - i = (long)hh; - ff = hh - i; - p = hsv.z * (1.0f - hsv.y); - q = hsv.z * (1.0f - (hsv.y * ff)); - t = hsv.z * (1.0f - (hsv.y * (1.0f - ff))); - - switch (i) - { - case 0: - { - rgb.x = hsv.z; - rgb.y = t; - rgb.z = p; - } - break; - case 1: - { - rgb.x = q; - rgb.y = hsv.z; - rgb.z = p; - } - break; - case 2: - { - rgb.x = p; - rgb.y = hsv.z; - rgb.z = t; - } - break; - case 3: - { - rgb.x = p; - rgb.y = q; - rgb.z = hsv.z; - } - break; - case 4: - { - rgb.x = t; - rgb.y = p; - rgb.z = hsv.z; - } - break; - case 5: - default: - { - rgb.x = hsv.z; - rgb.y = p; - rgb.z = q; - } - break; - } - - return rgb; -} - -#if defined(RAYGUI_STANDALONE) -// Returns a Color struct from hexadecimal value -static Color GetColor(int hexValue) -{ - Color color; - - color.r = (unsigned char)(hexValue >> 24) & 0xFF; - color.g = (unsigned char)(hexValue >> 16) & 0xFF; - color.b = (unsigned char)(hexValue >> 8) & 0xFF; - color.a = (unsigned char)hexValue & 0xFF; - - return color; -} - -// Returns hexadecimal value for a Color -static int ColorToInt(Color color) -{ - return (((int)color.r << 24) | ((int)color.g << 16) | ((int)color.b << 8) | (int)color.a); -} - -// Check if point is inside rectangle -static bool CheckCollisionPointRec(Vector2 point, Rectangle rec) -{ - bool collision = false; - - if ((point.x >= rec.x) && (point.x <= (rec.x + rec.width)) && - (point.y >= rec.y) && (point.y <= (rec.y + rec.height))) - collision = true; - - return collision; -} - -// Color fade-in or fade-out, alpha goes from 0.0f to 1.0f -static Color Fade(Color color, float alpha) -{ - if (alpha < 0.0f) - alpha = 0.0f; - else if (alpha > 1.0f) - alpha = 1.0f; - - Color result = {color.r, color.g, color.b, (unsigned char)(255.0f * alpha)}; - - return result; -} - -// Formatting of text with variables to 'embed' -static const char *TextFormat(const char *text, ...) -{ -#define MAX_FORMATTEXT_LENGTH 64 - - static char buffer[MAX_FORMATTEXT_LENGTH]; - - va_list args; - va_start(args, text); - vsprintf(buffer, text, args); - va_end(args); - - return buffer; -} - -// Draw rectangle with vertical gradient fill color -// NOTE: This function is only used by GuiColorPicker() -static void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2) -{ - Rectangle bounds = {(float)posX, (float)posY, (float)width, (float)height}; - DrawRectangleGradientEx(bounds, color1, color2, color2, color1); -} - -#define TEXTSPLIT_MAX_TEXT_BUFFER_LENGTH 1024 // Size of static buffer: TextSplit() -#define TEXTSPLIT_MAX_SUBSTRINGS_COUNT 128 // Size of static pointers array: TextSplit() - -// Split string into multiple strings -const char **TextSplit(const char *text, char delimiter, int *count) -{ - // NOTE: Current implementation returns a copy of the provided string with '\0' (string end delimiter) - // inserted between strings defined by "delimiter" parameter. No memory is dynamically allocated, - // all used memory is static... it has some limitations: - // 1. Maximum number of possible split strings is set by TEXTSPLIT_MAX_SUBSTRINGS_COUNT - // 2. Maximum size of text to split is TEXTSPLIT_MAX_TEXT_BUFFER_LENGTH - - static const char *result[TEXTSPLIT_MAX_SUBSTRINGS_COUNT] = {NULL}; - static char buffer[TEXTSPLIT_MAX_TEXT_BUFFER_LENGTH] = {0}; - memset(buffer, 0, TEXTSPLIT_MAX_TEXT_BUFFER_LENGTH); - - result[0] = buffer; - int counter = 0; - - if (text != NULL) - { - counter = 1; - - // Count how many substrings we have on text and point to every one - for (int i = 0; i < TEXTSPLIT_MAX_TEXT_BUFFER_LENGTH; i++) - { - buffer[i] = text[i]; - if (buffer[i] == '\0') - break; - else if (buffer[i] == delimiter) - { - buffer[i] = '\0'; // Set an end of string at this point - result[counter] = buffer + i + 1; - counter++; - - if (counter == TEXTSPLIT_MAX_SUBSTRINGS_COUNT) - break; - } - } - } - - *count = counter; - return result; -} - -// Get integer value from text -// NOTE: This function replaces atoi() [stdlib.h] -static int TextToInteger(const char *text) -{ - int value = 0; - int sign = 1; - - if ((text[0] == '+') || (text[0] == '-')) - { - if (text[0] == '-') - sign = -1; - text++; - } - - for (int i = 0; ((text[i] >= '0') && (text[i] <= '9')); ++i) - value = value * 10 + (int)(text[i] - '0'); - - return value * sign; -} - -// Encode codepoint into utf8 text (char array length returned as parameter) -static const char *CodepointToUtf8(int codepoint, int *byteLength) -{ - static char utf8[6] = {0}; - int length = 0; - - if (codepoint <= 0x7f) - { - utf8[0] = (char)codepoint; - length = 1; - } - else if (codepoint <= 0x7ff) - { - utf8[0] = (char)(((codepoint >> 6) & 0x1f) | 0xc0); - utf8[1] = (char)((codepoint & 0x3f) | 0x80); - length = 2; - } - else if (codepoint <= 0xffff) - { - utf8[0] = (char)(((codepoint >> 12) & 0x0f) | 0xe0); - utf8[1] = (char)(((codepoint >> 6) & 0x3f) | 0x80); - utf8[2] = (char)((codepoint & 0x3f) | 0x80); - length = 3; - } - else if (codepoint <= 0x10ffff) - { - utf8[0] = (char)(((codepoint >> 18) & 0x07) | 0xf0); - utf8[1] = (char)(((codepoint >> 12) & 0x3f) | 0x80); - utf8[2] = (char)(((codepoint >> 6) & 0x3f) | 0x80); - utf8[3] = (char)((codepoint & 0x3f) | 0x80); - length = 4; - } - - *byteLength = length; - - return utf8; -} -#endif // RAYGUI_STANDALONE - -#endif // RAYGUI_IMPLEMENTATION diff --git a/raylib-sys/raylib b/raylib-sys/raylib index b6c8d343..fec96137 160000 --- a/raylib-sys/raylib +++ b/raylib-sys/raylib @@ -1 +1 @@ -Subproject commit b6c8d343dca2ef19c23c50975328a028124cf3cb +Subproject commit fec96137e8d10ee6c88914fbe5e5429c13ee1dac diff --git a/raylib-sys/raymath.h b/raylib-sys/raymath.h deleted file mode 100644 index 7f05ea4e..00000000 --- a/raylib-sys/raymath.h +++ /dev/null @@ -1,1516 +0,0 @@ -/********************************************************************************************** -* -* raymath v1.2 - Math functions to work with Vector3, Matrix and Quaternions -* -* CONFIGURATION: -* -* #define RAYMATH_IMPLEMENTATION -* Generates the implementation of the library into the included file. -* If not defined, the library is in header only mode and can be included in other headers -* or source files without problems. But only ONE file should hold the implementation. -* -* #define RAYMATH_HEADER_ONLY -* Define static inline functions code, so #include header suffices for use. -* This may use up lots of memory. -* -* #define RAYMATH_STANDALONE -* Avoid raylib.h header inclusion in this file. -* Vector3 and Matrix data types are defined internally in raymath module. -* -* -* LICENSE: zlib/libpng -* -* Copyright (c) 2015-2020 Ramon Santamaria (@raysan5) -* -* This software is provided "as-is", without any express or implied warranty. In no event -* will the authors be held liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, including commercial -* applications, and to alter it and redistribute it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not claim that you -* wrote the original software. If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be misrepresented -* as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -**********************************************************************************************/ - -#ifndef RAYMATH_H -#define RAYMATH_H - -//#define RAYMATH_STANDALONE // NOTE: To use raymath as standalone lib, just uncomment this line -//#define RAYMATH_HEADER_ONLY // NOTE: To compile functions as static inline, uncomment this line - -#ifndef RAYMATH_STANDALONE - #include "raylib.h" // Required for structs: Vector3, Matrix -#endif - -#if defined(RAYMATH_IMPLEMENTATION) && defined(RAYMATH_HEADER_ONLY) - #error "Specifying both RAYMATH_IMPLEMENTATION and RAYMATH_HEADER_ONLY is contradictory" -#endif - -#if defined(RAYMATH_IMPLEMENTATION) - #if defined(_WIN32) && defined(BUILD_LIBTYPE_SHARED) - #define RMDEF __declspec(dllexport) extern inline // We are building raylib as a Win32 shared library (.dll). - #elif defined(_WIN32) && defined(USE_LIBTYPE_SHARED) - #define RMDEF __declspec(dllimport) // We are using raylib as a Win32 shared library (.dll) - #else - #define RMDEF extern inline // Provide external definition - #endif -#elif defined(RAYMATH_HEADER_ONLY) - #define RMDEF static inline // Functions may be inlined, no external out-of-line definition -#else - #if defined(__TINYC__) - #define RMDEF static inline // plain inline not supported by tinycc (See issue #435) - #else - #define RMDEF inline // Functions may be inlined or external definition used - #endif -#endif - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -#ifndef PI - #define PI 3.14159265358979323846 -#endif - -#ifndef DEG2RAD - #define DEG2RAD (PI/180.0f) -#endif - -#ifndef RAD2DEG - #define RAD2DEG (180.0f/PI) -#endif - -// Return float vector for Matrix -#ifndef MatrixToFloat - #define MatrixToFloat(mat) (MatrixToFloatV(mat).v) -#endif - -// Return float vector for Vector3 -#ifndef Vector3ToFloat - #define Vector3ToFloat(vec) (Vector3ToFloatV(vec).v) -#endif - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -//---------------------------------------------------------------------------------- - -#if defined(RAYMATH_STANDALONE) - // Vector2 type - typedef struct Vector2 { - float x; - float y; - } Vector2; - - // Vector3 type - typedef struct Vector3 { - float x; - float y; - float z; - } Vector3; - - // Vector4 type - typedef struct Vector4 { - float x; - float y; - float z; - float w; - } Vector4; - - // Quaternion type - typedef Vector4 Quaternion; - - // Matrix type (OpenGL style 4x4 - right handed, column major) - typedef struct Matrix { - float m0, m4, m8, m12; - float m1, m5, m9, m13; - float m2, m6, m10, m14; - float m3, m7, m11, m15; - } Matrix; -#endif - -// NOTE: Helper types to be used instead of array return types for *ToFloat functions -typedef struct float3 { float v[3]; } float3; -typedef struct float16 { float v[16]; } float16; - -#include // Required for: sinf(), cosf(), sqrtf(), tan(), fabs() - -//---------------------------------------------------------------------------------- -// Module Functions Definition - Utils math -//---------------------------------------------------------------------------------- - -// Clamp float value -RMDEF float Clamp(float value, float min, float max) -{ - const float res = value < min ? min : value; - return res > max ? max : res; -} - -// Calculate linear interpolation between two floats -RMDEF float Lerp(float start, float end, float amount) -{ - return start + amount*(end - start); -} - -// Normalize input value within input range -RMDEF float Normalize(float value, float start, float end) -{ - return (value - start) / (end - start); -} - -// Remap input value within input range to output range -RMDEF float Remap(float value, float inputStart, float inputEnd, float outputStart, float outputEnd) -{ - return (value - inputStart) / (inputEnd - inputStart) * (outputEnd - outputStart) + outputStart; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition - Vector2 math -//---------------------------------------------------------------------------------- - -// Vector with components value 0.0f -RMDEF Vector2 Vector2Zero(void) -{ - Vector2 result = { 0.0f, 0.0f }; - return result; -} - -// Vector with components value 1.0f -RMDEF Vector2 Vector2One(void) -{ - Vector2 result = { 1.0f, 1.0f }; - return result; -} - -// Add two vectors (v1 + v2) -RMDEF Vector2 Vector2Add(Vector2 v1, Vector2 v2) -{ - Vector2 result = { v1.x + v2.x, v1.y + v2.y }; - return result; -} - -// Add vector and float value -RMDEF Vector2 Vector2AddValue(Vector2 v, float add) -{ - Vector2 result = { v.x + add, v.y + add }; - return result; -} - -// Subtract two vectors (v1 - v2) -RMDEF Vector2 Vector2Subtract(Vector2 v1, Vector2 v2) -{ - Vector2 result = { v1.x - v2.x, v1.y - v2.y }; - return result; -} - -// Subtract vector by float value -RMDEF Vector2 Vector2SubtractValue(Vector2 v, float sub) -{ - Vector2 result = { v.x - sub, v.y - sub }; - return result; -} - -// Calculate vector length -RMDEF float Vector2Length(Vector2 v) -{ - float result = sqrtf((v.x*v.x) + (v.y*v.y)); - return result; -} - -// Calculate vector square length -RMDEF float Vector2LengthSqr(Vector2 v) -{ - float result = (v.x*v.x) + (v.y*v.y); - return result; -} - -// Calculate two vectors dot product -RMDEF float Vector2DotProduct(Vector2 v1, Vector2 v2) -{ - float result = (v1.x*v2.x + v1.y*v2.y); - return result; -} - -// Calculate distance between two vectors -RMDEF float Vector2Distance(Vector2 v1, Vector2 v2) -{ - float result = sqrtf((v1.x - v2.x)*(v1.x - v2.x) + (v1.y - v2.y)*(v1.y - v2.y)); - return result; -} - -// Calculate angle from two vectors in X-axis -RMDEF float Vector2Angle(Vector2 v1, Vector2 v2) -{ - float result = atan2f(v2.y - v1.y, v2.x - v1.x)*(180.0f/PI); - if (result < 0) result += 360.0f; - return result; -} - -// Scale vector (multiply by value) -RMDEF Vector2 Vector2Scale(Vector2 v, float scale) -{ - Vector2 result = { v.x*scale, v.y*scale }; - return result; -} - -// Multiply vector by vector -RMDEF Vector2 Vector2Multiply(Vector2 v1, Vector2 v2) -{ - Vector2 result = { v1.x*v2.x, v1.y*v2.y }; - return result; -} - -// Negate vector -RMDEF Vector2 Vector2Negate(Vector2 v) -{ - Vector2 result = { -v.x, -v.y }; - return result; -} - -// Divide vector by vector -RMDEF Vector2 Vector2Divide(Vector2 v1, Vector2 v2) -{ - Vector2 result = { v1.x/v2.x, v1.y/v2.y }; - return result; -} - -// Normalize provided vector -RMDEF Vector2 Vector2Normalize(Vector2 v) -{ - Vector2 result = Vector2Scale(v, 1/Vector2Length(v)); - return result; -} - -// Calculate linear interpolation between two vectors -RMDEF Vector2 Vector2Lerp(Vector2 v1, Vector2 v2, float amount) -{ - Vector2 result = { 0 }; - - result.x = v1.x + amount*(v2.x - v1.x); - result.y = v1.y + amount*(v2.y - v1.y); - - return result; -} - -// Calculate reflected vector to normal -RMDEF Vector2 Vector2Reflect(Vector2 v, Vector2 normal) -{ - Vector2 result = { 0 }; - - float dotProduct = Vector2DotProduct(v, normal); - - result.x = v.x - (2.0f*normal.x)*dotProduct; - result.y = v.y - (2.0f*normal.y)*dotProduct; - - return result; -} - -// Rotate Vector by float in Degrees. -RMDEF Vector2 Vector2Rotate(Vector2 v, float degs) -{ - float rads = degs*DEG2RAD; - Vector2 result = {v.x * cosf(rads) - v.y * sinf(rads) , v.x * sinf(rads) + v.y * cosf(rads) }; - return result; -} - -// Move Vector towards target -RMDEF Vector2 Vector2MoveTowards(Vector2 v, Vector2 target, float maxDistance) -{ - Vector2 result = { 0 }; - float dx = target.x - v.x; - float dy = target.y - v.y; - float value = (dx*dx) + (dy*dy); - - if ((value == 0) || ((maxDistance >= 0) && (value <= maxDistance*maxDistance))) result = target; - - float dist = sqrtf(value); - - result.x = v.x + dx/dist*maxDistance; - result.y = v.y + dy/dist*maxDistance; - - return result; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition - Vector3 math -//---------------------------------------------------------------------------------- - -// Vector with components value 0.0f -RMDEF Vector3 Vector3Zero(void) -{ - Vector3 result = { 0.0f, 0.0f, 0.0f }; - return result; -} - -// Vector with components value 1.0f -RMDEF Vector3 Vector3One(void) -{ - Vector3 result = { 1.0f, 1.0f, 1.0f }; - return result; -} - -// Add two vectors -RMDEF Vector3 Vector3Add(Vector3 v1, Vector3 v2) -{ - Vector3 result = { v1.x + v2.x, v1.y + v2.y, v1.z + v2.z }; - return result; -} - -// Add vector and float value -RMDEF Vector3 Vector3AddValue(Vector3 v, float add) -{ - Vector3 result = { v.x + add, v.y + add, v.z + add }; - return result; -} - -// Subtract two vectors -RMDEF Vector3 Vector3Subtract(Vector3 v1, Vector3 v2) -{ - Vector3 result = { v1.x - v2.x, v1.y - v2.y, v1.z - v2.z }; - return result; -} - -// Subtract vector by float value -RMDEF Vector3 Vector3SubtractValue(Vector3 v, float sub) -{ - Vector3 result = { v.x - sub, v.y - sub, v.z - sub }; - return result; -} - -// Multiply vector by scalar -RMDEF Vector3 Vector3Scale(Vector3 v, float scalar) -{ - Vector3 result = { v.x*scalar, v.y*scalar, v.z*scalar }; - return result; -} - -// Multiply vector by vector -RMDEF Vector3 Vector3Multiply(Vector3 v1, Vector3 v2) -{ - Vector3 result = { v1.x*v2.x, v1.y*v2.y, v1.z*v2.z }; - return result; -} - -// Calculate two vectors cross product -RMDEF Vector3 Vector3CrossProduct(Vector3 v1, Vector3 v2) -{ - Vector3 result = { v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x }; - return result; -} - -// Calculate one vector perpendicular vector -RMDEF Vector3 Vector3Perpendicular(Vector3 v) -{ - Vector3 result = { 0 }; - - float min = (float) fabs(v.x); - Vector3 cardinalAxis = {1.0f, 0.0f, 0.0f}; - - if (fabs(v.y) < min) - { - min = (float) fabs(v.y); - Vector3 tmp = {0.0f, 1.0f, 0.0f}; - cardinalAxis = tmp; - } - - if (fabs(v.z) < min) - { - Vector3 tmp = {0.0f, 0.0f, 1.0f}; - cardinalAxis = tmp; - } - - result = Vector3CrossProduct(v, cardinalAxis); - - return result; -} - -// Calculate vector length -RMDEF float Vector3Length(const Vector3 v) -{ - float result = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); - return result; -} - -// Calculate vector square length -RMDEF float Vector3LengthSqr(const Vector3 v) -{ - float result = v.x*v.x + v.y*v.y + v.z*v.z; - return result; -} - -// Calculate two vectors dot product -RMDEF float Vector3DotProduct(Vector3 v1, Vector3 v2) -{ - float result = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z); - return result; -} - -// Calculate distance between two vectors -RMDEF float Vector3Distance(Vector3 v1, Vector3 v2) -{ - float dx = v2.x - v1.x; - float dy = v2.y - v1.y; - float dz = v2.z - v1.z; - float result = sqrtf(dx*dx + dy*dy + dz*dz); - return result; -} - -// Negate provided vector (invert direction) -RMDEF Vector3 Vector3Negate(Vector3 v) -{ - Vector3 result = { -v.x, -v.y, -v.z }; - return result; -} - -// Divide vector by vector -RMDEF Vector3 Vector3Divide(Vector3 v1, Vector3 v2) -{ - Vector3 result = { v1.x/v2.x, v1.y/v2.y, v1.z/v2.z }; - return result; -} - -// Normalize provided vector -RMDEF Vector3 Vector3Normalize(Vector3 v) -{ - Vector3 result = v; - - float length, ilength; - length = Vector3Length(v); - if (length == 0.0f) length = 1.0f; - ilength = 1.0f/length; - - result.x *= ilength; - result.y *= ilength; - result.z *= ilength; - - return result; -} - -// Orthonormalize provided vectors -// Makes vectors normalized and orthogonal to each other -// Gram-Schmidt function implementation -RMDEF void Vector3OrthoNormalize(Vector3 *v1, Vector3 *v2) -{ - *v1 = Vector3Normalize(*v1); - Vector3 vn = Vector3CrossProduct(*v1, *v2); - vn = Vector3Normalize(vn); - *v2 = Vector3CrossProduct(vn, *v1); -} - -// Transforms a Vector3 by a given Matrix -RMDEF Vector3 Vector3Transform(Vector3 v, Matrix mat) -{ - Vector3 result = { 0 }; - float x = v.x; - float y = v.y; - float z = v.z; - - result.x = mat.m0*x + mat.m4*y + mat.m8*z + mat.m12; - result.y = mat.m1*x + mat.m5*y + mat.m9*z + mat.m13; - result.z = mat.m2*x + mat.m6*y + mat.m10*z + mat.m14; - - return result; -} - -// Transform a vector by quaternion rotation -RMDEF Vector3 Vector3RotateByQuaternion(Vector3 v, Quaternion q) -{ - Vector3 result = { 0 }; - - result.x = v.x*(q.x*q.x + q.w*q.w - q.y*q.y - q.z*q.z) + v.y*(2*q.x*q.y - 2*q.w*q.z) + v.z*(2*q.x*q.z + 2*q.w*q.y); - result.y = v.x*(2*q.w*q.z + 2*q.x*q.y) + v.y*(q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z) + v.z*(-2*q.w*q.x + 2*q.y*q.z); - result.z = v.x*(-2*q.w*q.y + 2*q.x*q.z) + v.y*(2*q.w*q.x + 2*q.y*q.z)+ v.z*(q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z); - - return result; -} - -// Calculate linear interpolation between two vectors -RMDEF Vector3 Vector3Lerp(Vector3 v1, Vector3 v2, float amount) -{ - Vector3 result = { 0 }; - - result.x = v1.x + amount*(v2.x - v1.x); - result.y = v1.y + amount*(v2.y - v1.y); - result.z = v1.z + amount*(v2.z - v1.z); - - return result; -} - -// Calculate reflected vector to normal -RMDEF Vector3 Vector3Reflect(Vector3 v, Vector3 normal) -{ - // I is the original vector - // N is the normal of the incident plane - // R = I - (2*N*( DotProduct[ I,N] )) - - Vector3 result = { 0 }; - - float dotProduct = Vector3DotProduct(v, normal); - - result.x = v.x - (2.0f*normal.x)*dotProduct; - result.y = v.y - (2.0f*normal.y)*dotProduct; - result.z = v.z - (2.0f*normal.z)*dotProduct; - - return result; -} - -// Return min value for each pair of components -RMDEF Vector3 Vector3Min(Vector3 v1, Vector3 v2) -{ - Vector3 result = { 0 }; - - result.x = fminf(v1.x, v2.x); - result.y = fminf(v1.y, v2.y); - result.z = fminf(v1.z, v2.z); - - return result; -} - -// Return max value for each pair of components -RMDEF Vector3 Vector3Max(Vector3 v1, Vector3 v2) -{ - Vector3 result = { 0 }; - - result.x = fmaxf(v1.x, v2.x); - result.y = fmaxf(v1.y, v2.y); - result.z = fmaxf(v1.z, v2.z); - - return result; -} - -// Compute barycenter coordinates (u, v, w) for point p with respect to triangle (a, b, c) -// NOTE: Assumes P is on the plane of the triangle -RMDEF Vector3 Vector3Barycenter(Vector3 p, Vector3 a, Vector3 b, Vector3 c) -{ - //Vector v0 = b - a, v1 = c - a, v2 = p - a; - - Vector3 v0 = Vector3Subtract(b, a); - Vector3 v1 = Vector3Subtract(c, a); - Vector3 v2 = Vector3Subtract(p, a); - float d00 = Vector3DotProduct(v0, v0); - float d01 = Vector3DotProduct(v0, v1); - float d11 = Vector3DotProduct(v1, v1); - float d20 = Vector3DotProduct(v2, v0); - float d21 = Vector3DotProduct(v2, v1); - - float denom = d00*d11 - d01*d01; - - Vector3 result = { 0 }; - - result.y = (d11*d20 - d01*d21)/denom; - result.z = (d00*d21 - d01*d20)/denom; - result.x = 1.0f - (result.z + result.y); - - return result; -} - -// Returns Vector3 as float array -RMDEF float3 Vector3ToFloatV(Vector3 v) -{ - float3 buffer = { 0 }; - - buffer.v[0] = v.x; - buffer.v[1] = v.y; - buffer.v[2] = v.z; - - return buffer; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition - Matrix math -//---------------------------------------------------------------------------------- - -// Compute matrix determinant -RMDEF float MatrixDeterminant(Matrix mat) -{ - // Cache the matrix values (speed optimization) - float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3; - float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7; - float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11; - float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15; - - float result = a30*a21*a12*a03 - a20*a31*a12*a03 - a30*a11*a22*a03 + a10*a31*a22*a03 + - a20*a11*a32*a03 - a10*a21*a32*a03 - a30*a21*a02*a13 + a20*a31*a02*a13 + - a30*a01*a22*a13 - a00*a31*a22*a13 - a20*a01*a32*a13 + a00*a21*a32*a13 + - a30*a11*a02*a23 - a10*a31*a02*a23 - a30*a01*a12*a23 + a00*a31*a12*a23 + - a10*a01*a32*a23 - a00*a11*a32*a23 - a20*a11*a02*a33 + a10*a21*a02*a33 + - a20*a01*a12*a33 - a00*a21*a12*a33 - a10*a01*a22*a33 + a00*a11*a22*a33; - - return result; -} - -// Returns the trace of the matrix (sum of the values along the diagonal) -RMDEF float MatrixTrace(Matrix mat) -{ - float result = (mat.m0 + mat.m5 + mat.m10 + mat.m15); - return result; -} - -// Transposes provided matrix -RMDEF Matrix MatrixTranspose(Matrix mat) -{ - Matrix result = { 0 }; - - result.m0 = mat.m0; - result.m1 = mat.m4; - result.m2 = mat.m8; - result.m3 = mat.m12; - result.m4 = mat.m1; - result.m5 = mat.m5; - result.m6 = mat.m9; - result.m7 = mat.m13; - result.m8 = mat.m2; - result.m9 = mat.m6; - result.m10 = mat.m10; - result.m11 = mat.m14; - result.m12 = mat.m3; - result.m13 = mat.m7; - result.m14 = mat.m11; - result.m15 = mat.m15; - - return result; -} - -// Invert provided matrix -RMDEF Matrix MatrixInvert(Matrix mat) -{ - Matrix result = { 0 }; - - // Cache the matrix values (speed optimization) - float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3; - float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7; - float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11; - float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15; - - float b00 = a00*a11 - a01*a10; - float b01 = a00*a12 - a02*a10; - float b02 = a00*a13 - a03*a10; - float b03 = a01*a12 - a02*a11; - float b04 = a01*a13 - a03*a11; - float b05 = a02*a13 - a03*a12; - float b06 = a20*a31 - a21*a30; - float b07 = a20*a32 - a22*a30; - float b08 = a20*a33 - a23*a30; - float b09 = a21*a32 - a22*a31; - float b10 = a21*a33 - a23*a31; - float b11 = a22*a33 - a23*a32; - - // Calculate the invert determinant (inlined to avoid double-caching) - float invDet = 1.0f/(b00*b11 - b01*b10 + b02*b09 + b03*b08 - b04*b07 + b05*b06); - - result.m0 = (a11*b11 - a12*b10 + a13*b09)*invDet; - result.m1 = (-a01*b11 + a02*b10 - a03*b09)*invDet; - result.m2 = (a31*b05 - a32*b04 + a33*b03)*invDet; - result.m3 = (-a21*b05 + a22*b04 - a23*b03)*invDet; - result.m4 = (-a10*b11 + a12*b08 - a13*b07)*invDet; - result.m5 = (a00*b11 - a02*b08 + a03*b07)*invDet; - result.m6 = (-a30*b05 + a32*b02 - a33*b01)*invDet; - result.m7 = (a20*b05 - a22*b02 + a23*b01)*invDet; - result.m8 = (a10*b10 - a11*b08 + a13*b06)*invDet; - result.m9 = (-a00*b10 + a01*b08 - a03*b06)*invDet; - result.m10 = (a30*b04 - a31*b02 + a33*b00)*invDet; - result.m11 = (-a20*b04 + a21*b02 - a23*b00)*invDet; - result.m12 = (-a10*b09 + a11*b07 - a12*b06)*invDet; - result.m13 = (a00*b09 - a01*b07 + a02*b06)*invDet; - result.m14 = (-a30*b03 + a31*b01 - a32*b00)*invDet; - result.m15 = (a20*b03 - a21*b01 + a22*b00)*invDet; - - return result; -} - -// Normalize provided matrix -RMDEF Matrix MatrixNormalize(Matrix mat) -{ - Matrix result = { 0 }; - - float det = MatrixDeterminant(mat); - - result.m0 = mat.m0/det; - result.m1 = mat.m1/det; - result.m2 = mat.m2/det; - result.m3 = mat.m3/det; - result.m4 = mat.m4/det; - result.m5 = mat.m5/det; - result.m6 = mat.m6/det; - result.m7 = mat.m7/det; - result.m8 = mat.m8/det; - result.m9 = mat.m9/det; - result.m10 = mat.m10/det; - result.m11 = mat.m11/det; - result.m12 = mat.m12/det; - result.m13 = mat.m13/det; - result.m14 = mat.m14/det; - result.m15 = mat.m15/det; - - return result; -} - -// Returns identity matrix -RMDEF Matrix MatrixIdentity(void) -{ - Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f }; - - return result; -} - -// Add two matrices -RMDEF Matrix MatrixAdd(Matrix left, Matrix right) -{ - Matrix result = MatrixIdentity(); - - result.m0 = left.m0 + right.m0; - result.m1 = left.m1 + right.m1; - result.m2 = left.m2 + right.m2; - result.m3 = left.m3 + right.m3; - result.m4 = left.m4 + right.m4; - result.m5 = left.m5 + right.m5; - result.m6 = left.m6 + right.m6; - result.m7 = left.m7 + right.m7; - result.m8 = left.m8 + right.m8; - result.m9 = left.m9 + right.m9; - result.m10 = left.m10 + right.m10; - result.m11 = left.m11 + right.m11; - result.m12 = left.m12 + right.m12; - result.m13 = left.m13 + right.m13; - result.m14 = left.m14 + right.m14; - result.m15 = left.m15 + right.m15; - - return result; -} - -// Subtract two matrices (left - right) -RMDEF Matrix MatrixSubtract(Matrix left, Matrix right) -{ - Matrix result = MatrixIdentity(); - - result.m0 = left.m0 - right.m0; - result.m1 = left.m1 - right.m1; - result.m2 = left.m2 - right.m2; - result.m3 = left.m3 - right.m3; - result.m4 = left.m4 - right.m4; - result.m5 = left.m5 - right.m5; - result.m6 = left.m6 - right.m6; - result.m7 = left.m7 - right.m7; - result.m8 = left.m8 - right.m8; - result.m9 = left.m9 - right.m9; - result.m10 = left.m10 - right.m10; - result.m11 = left.m11 - right.m11; - result.m12 = left.m12 - right.m12; - result.m13 = left.m13 - right.m13; - result.m14 = left.m14 - right.m14; - result.m15 = left.m15 - right.m15; - - return result; -} - -// Returns two matrix multiplication -// NOTE: When multiplying matrices... the order matters! -RMDEF Matrix MatrixMultiply(Matrix left, Matrix right) -{ - Matrix result = { 0 }; - - result.m0 = left.m0*right.m0 + left.m1*right.m4 + left.m2*right.m8 + left.m3*right.m12; - result.m1 = left.m0*right.m1 + left.m1*right.m5 + left.m2*right.m9 + left.m3*right.m13; - result.m2 = left.m0*right.m2 + left.m1*right.m6 + left.m2*right.m10 + left.m3*right.m14; - result.m3 = left.m0*right.m3 + left.m1*right.m7 + left.m2*right.m11 + left.m3*right.m15; - result.m4 = left.m4*right.m0 + left.m5*right.m4 + left.m6*right.m8 + left.m7*right.m12; - result.m5 = left.m4*right.m1 + left.m5*right.m5 + left.m6*right.m9 + left.m7*right.m13; - result.m6 = left.m4*right.m2 + left.m5*right.m6 + left.m6*right.m10 + left.m7*right.m14; - result.m7 = left.m4*right.m3 + left.m5*right.m7 + left.m6*right.m11 + left.m7*right.m15; - result.m8 = left.m8*right.m0 + left.m9*right.m4 + left.m10*right.m8 + left.m11*right.m12; - result.m9 = left.m8*right.m1 + left.m9*right.m5 + left.m10*right.m9 + left.m11*right.m13; - result.m10 = left.m8*right.m2 + left.m9*right.m6 + left.m10*right.m10 + left.m11*right.m14; - result.m11 = left.m8*right.m3 + left.m9*right.m7 + left.m10*right.m11 + left.m11*right.m15; - result.m12 = left.m12*right.m0 + left.m13*right.m4 + left.m14*right.m8 + left.m15*right.m12; - result.m13 = left.m12*right.m1 + left.m13*right.m5 + left.m14*right.m9 + left.m15*right.m13; - result.m14 = left.m12*right.m2 + left.m13*right.m6 + left.m14*right.m10 + left.m15*right.m14; - result.m15 = left.m12*right.m3 + left.m13*right.m7 + left.m14*right.m11 + left.m15*right.m15; - - return result; -} - -// Returns translation matrix -RMDEF Matrix MatrixTranslate(float x, float y, float z) -{ - Matrix result = { 1.0f, 0.0f, 0.0f, x, - 0.0f, 1.0f, 0.0f, y, - 0.0f, 0.0f, 1.0f, z, - 0.0f, 0.0f, 0.0f, 1.0f }; - - return result; -} - -// Create rotation matrix from axis and angle -// NOTE: Angle should be provided in radians -RMDEF Matrix MatrixRotate(Vector3 axis, float angle) -{ - Matrix result = { 0 }; - - float x = axis.x, y = axis.y, z = axis.z; - - float length = sqrtf(x*x + y*y + z*z); - - if ((length != 1.0f) && (length != 0.0f)) - { - length = 1.0f/length; - x *= length; - y *= length; - z *= length; - } - - float sinres = sinf(angle); - float cosres = cosf(angle); - float t = 1.0f - cosres; - - result.m0 = x*x*t + cosres; - result.m1 = y*x*t + z*sinres; - result.m2 = z*x*t - y*sinres; - result.m3 = 0.0f; - - result.m4 = x*y*t - z*sinres; - result.m5 = y*y*t + cosres; - result.m6 = z*y*t + x*sinres; - result.m7 = 0.0f; - - result.m8 = x*z*t + y*sinres; - result.m9 = y*z*t - x*sinres; - result.m10 = z*z*t + cosres; - result.m11 = 0.0f; - - result.m12 = 0.0f; - result.m13 = 0.0f; - result.m14 = 0.0f; - result.m15 = 1.0f; - - return result; -} - -// Returns x-rotation matrix (angle in radians) -RMDEF Matrix MatrixRotateX(float angle) -{ - Matrix result = MatrixIdentity(); - - float cosres = cosf(angle); - float sinres = sinf(angle); - - result.m5 = cosres; - result.m6 = -sinres; - result.m9 = sinres; - result.m10 = cosres; - - return result; -} - -// Returns y-rotation matrix (angle in radians) -RMDEF Matrix MatrixRotateY(float angle) -{ - Matrix result = MatrixIdentity(); - - float cosres = cosf(angle); - float sinres = sinf(angle); - - result.m0 = cosres; - result.m2 = sinres; - result.m8 = -sinres; - result.m10 = cosres; - - return result; -} - -// Returns z-rotation matrix (angle in radians) -RMDEF Matrix MatrixRotateZ(float angle) -{ - Matrix result = MatrixIdentity(); - - float cosres = cosf(angle); - float sinres = sinf(angle); - - result.m0 = cosres; - result.m1 = -sinres; - result.m4 = sinres; - result.m5 = cosres; - - return result; -} - - -// Returns xyz-rotation matrix (angles in radians) -RMDEF Matrix MatrixRotateXYZ(Vector3 ang) -{ - Matrix result = MatrixIdentity(); - - float cosz = cosf(-ang.z); - float sinz = sinf(-ang.z); - float cosy = cosf(-ang.y); - float siny = sinf(-ang.y); - float cosx = cosf(-ang.x); - float sinx = sinf(-ang.x); - - result.m0 = cosz * cosy; - result.m4 = (cosz * siny * sinx) - (sinz * cosx); - result.m8 = (cosz * siny * cosx) + (sinz * sinx); - - result.m1 = sinz * cosy; - result.m5 = (sinz * siny * sinx) + (cosz * cosx); - result.m9 = (sinz * siny * cosx) - (cosz * sinx); - - result.m2 = -siny; - result.m6 = cosy * sinx; - result.m10= cosy * cosx; - - return result; -} - -// Returns zyx-rotation matrix (angles in radians) -// TODO: This solution is suboptimal, it should be possible to create this matrix in one go -// instead of using a 3 matrix multiplication -RMDEF Matrix MatrixRotateZYX(Vector3 ang) -{ - Matrix result = MatrixRotateZ(ang.z); - result = MatrixMultiply(result, MatrixRotateY(ang.y)); - result = MatrixMultiply(result, MatrixRotateX(ang.x)); - - return result; -} - -// Returns scaling matrix -RMDEF Matrix MatrixScale(float x, float y, float z) -{ - Matrix result = { x, 0.0f, 0.0f, 0.0f, - 0.0f, y, 0.0f, 0.0f, - 0.0f, 0.0f, z, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f }; - - return result; -} - -// Returns perspective projection matrix -RMDEF Matrix MatrixFrustum(double left, double right, double bottom, double top, double near, double far) -{ - Matrix result = { 0 }; - - float rl = (float)(right - left); - float tb = (float)(top - bottom); - float fn = (float)(far - near); - - result.m0 = ((float) near*2.0f)/rl; - result.m1 = 0.0f; - result.m2 = 0.0f; - result.m3 = 0.0f; - - result.m4 = 0.0f; - result.m5 = ((float) near*2.0f)/tb; - result.m6 = 0.0f; - result.m7 = 0.0f; - - result.m8 = ((float)right + (float)left)/rl; - result.m9 = ((float)top + (float)bottom)/tb; - result.m10 = -((float)far + (float)near)/fn; - result.m11 = -1.0f; - - result.m12 = 0.0f; - result.m13 = 0.0f; - result.m14 = -((float)far*(float)near*2.0f)/fn; - result.m15 = 0.0f; - - return result; -} - -// Returns perspective projection matrix -// NOTE: Angle should be provided in radians -RMDEF Matrix MatrixPerspective(double fovy, double aspect, double near, double far) -{ - double top = near*tan(fovy*0.5); - double right = top*aspect; - Matrix result = MatrixFrustum(-right, right, -top, top, near, far); - - return result; -} - -// Returns orthographic projection matrix -RMDEF Matrix MatrixOrtho(double left, double right, double bottom, double top, double near, double far) -{ - Matrix result = { 0 }; - - float rl = (float)(right - left); - float tb = (float)(top - bottom); - float fn = (float)(far - near); - - result.m0 = 2.0f/rl; - result.m1 = 0.0f; - result.m2 = 0.0f; - result.m3 = 0.0f; - result.m4 = 0.0f; - result.m5 = 2.0f/tb; - result.m6 = 0.0f; - result.m7 = 0.0f; - result.m8 = 0.0f; - result.m9 = 0.0f; - result.m10 = -2.0f/fn; - result.m11 = 0.0f; - result.m12 = -((float)left + (float)right)/rl; - result.m13 = -((float)top + (float)bottom)/tb; - result.m14 = -((float)far + (float)near)/fn; - result.m15 = 1.0f; - - return result; -} - -// Returns camera look-at matrix (view matrix) -RMDEF Matrix MatrixLookAt(Vector3 eye, Vector3 target, Vector3 up) -{ - Matrix result = { 0 }; - - Vector3 z = Vector3Subtract(eye, target); - z = Vector3Normalize(z); - Vector3 x = Vector3CrossProduct(up, z); - x = Vector3Normalize(x); - Vector3 y = Vector3CrossProduct(z, x); - - result.m0 = x.x; - result.m1 = y.x; - result.m2 = z.x; - result.m3 = 0.0f; - result.m4 = x.y; - result.m5 = y.y; - result.m6 = z.y; - result.m7 = 0.0f; - result.m8 = x.z; - result.m9 = y.z; - result.m10 = z.z; - result.m11 = 0.0f; - result.m12 = -Vector3DotProduct(x, eye); - result.m13 = -Vector3DotProduct(y, eye); - result.m14 = -Vector3DotProduct(z, eye); - result.m15 = 1.0f; - - return result; -} - -// Returns float array of matrix data -RMDEF float16 MatrixToFloatV(Matrix mat) -{ - float16 buffer = { 0 }; - - buffer.v[0] = mat.m0; - buffer.v[1] = mat.m1; - buffer.v[2] = mat.m2; - buffer.v[3] = mat.m3; - buffer.v[4] = mat.m4; - buffer.v[5] = mat.m5; - buffer.v[6] = mat.m6; - buffer.v[7] = mat.m7; - buffer.v[8] = mat.m8; - buffer.v[9] = mat.m9; - buffer.v[10] = mat.m10; - buffer.v[11] = mat.m11; - buffer.v[12] = mat.m12; - buffer.v[13] = mat.m13; - buffer.v[14] = mat.m14; - buffer.v[15] = mat.m15; - - return buffer; -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition - Quaternion math -//---------------------------------------------------------------------------------- - -// Add two quaternions -RMDEF Quaternion QuaternionAdd(Quaternion q1, Quaternion q2) -{ - Quaternion result = {q1.x + q2.x, q1.y + q2.y, q1.z + q2.z, q1.w + q2.w}; - return result; -} - -// Add quaternion and float value -RMDEF Quaternion QuaternionAddValue(Quaternion q, float add) -{ - Quaternion result = {q.x + add, q.y + add, q.z + add, q.w + add}; - return result; -} - -// Subtract two quaternions -RMDEF Quaternion QuaternionSubtract(Quaternion q1, Quaternion q2) -{ - Quaternion result = {q1.x - q2.x, q1.y - q2.y, q1.z - q2.z, q1.w - q2.w}; - return result; -} - -// Subtract quaternion and float value -RMDEF Quaternion QuaternionSubtractValue(Quaternion q, float sub) -{ - Quaternion result = {q.x - sub, q.y - sub, q.z - sub, q.w - sub}; - return result; -} - -// Returns identity quaternion -RMDEF Quaternion QuaternionIdentity(void) -{ - Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f }; - return result; -} - -// Computes the length of a quaternion -RMDEF float QuaternionLength(Quaternion q) -{ - float result = (float)sqrt(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); - return result; -} - -// Normalize provided quaternion -RMDEF Quaternion QuaternionNormalize(Quaternion q) -{ - Quaternion result = { 0 }; - - float length, ilength; - length = QuaternionLength(q); - if (length == 0.0f) length = 1.0f; - ilength = 1.0f/length; - - result.x = q.x*ilength; - result.y = q.y*ilength; - result.z = q.z*ilength; - result.w = q.w*ilength; - - return result; -} - -// Invert provided quaternion -RMDEF Quaternion QuaternionInvert(Quaternion q) -{ - Quaternion result = q; - float length = QuaternionLength(q); - float lengthSq = length*length; - - if (lengthSq != 0.0) - { - float i = 1.0f/lengthSq; - - result.x *= -i; - result.y *= -i; - result.z *= -i; - result.w *= i; - } - - return result; -} - -// Calculate two quaternion multiplication -RMDEF Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2) -{ - Quaternion result = { 0 }; - - float qax = q1.x, qay = q1.y, qaz = q1.z, qaw = q1.w; - float qbx = q2.x, qby = q2.y, qbz = q2.z, qbw = q2.w; - - result.x = qax*qbw + qaw*qbx + qay*qbz - qaz*qby; - result.y = qay*qbw + qaw*qby + qaz*qbx - qax*qbz; - result.z = qaz*qbw + qaw*qbz + qax*qby - qay*qbx; - result.w = qaw*qbw - qax*qbx - qay*qby - qaz*qbz; - - return result; -} - -// Scale quaternion by float value -RMDEF Quaternion QuaternionScale(Quaternion q, float mul) -{ - Quaternion result = { 0 }; - - float qax = q.x, qay = q.y, qaz = q.z, qaw = q.w; - - result.x = qax * mul + qaw * mul + qay * mul - qaz * mul; - result.y = qay * mul + qaw * mul + qaz * mul - qax * mul; - result.z = qaz * mul + qaw * mul + qax * mul - qay * mul; - result.w = qaw * mul - qax * mul - qay * mul - qaz * mul; - - return result; -} - -// Divide two quaternions -RMDEF Quaternion QuaternionDivide(Quaternion q1, Quaternion q2) -{ - Quaternion result = {q1.x / q2.x, q1.y / q2.y, q1.z / q2.z, q1.w / q2.w}; - return result; -} - -// Calculate linear interpolation between two quaternions -RMDEF Quaternion QuaternionLerp(Quaternion q1, Quaternion q2, float amount) -{ - Quaternion result = { 0 }; - - result.x = q1.x + amount*(q2.x - q1.x); - result.y = q1.y + amount*(q2.y - q1.y); - result.z = q1.z + amount*(q2.z - q1.z); - result.w = q1.w + amount*(q2.w - q1.w); - - return result; -} - -// Calculate slerp-optimized interpolation between two quaternions -RMDEF Quaternion QuaternionNlerp(Quaternion q1, Quaternion q2, float amount) -{ - Quaternion result = QuaternionLerp(q1, q2, amount); - result = QuaternionNormalize(result); - - return result; -} - -// Calculates spherical linear interpolation between two quaternions -RMDEF Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount) -{ - Quaternion result = { 0 }; - - float cosHalfTheta = q1.x*q2.x + q1.y*q2.y + q1.z*q2.z + q1.w*q2.w; - - if (fabs(cosHalfTheta) >= 1.0f) result = q1; - else if (cosHalfTheta > 0.95f) result = QuaternionNlerp(q1, q2, amount); - else - { - float halfTheta = acosf(cosHalfTheta); - float sinHalfTheta = sqrtf(1.0f - cosHalfTheta*cosHalfTheta); - - if (fabs(sinHalfTheta) < 0.001f) - { - result.x = (q1.x*0.5f + q2.x*0.5f); - result.y = (q1.y*0.5f + q2.y*0.5f); - result.z = (q1.z*0.5f + q2.z*0.5f); - result.w = (q1.w*0.5f + q2.w*0.5f); - } - else - { - float ratioA = sinf((1 - amount)*halfTheta)/sinHalfTheta; - float ratioB = sinf(amount*halfTheta)/sinHalfTheta; - - result.x = (q1.x*ratioA + q2.x*ratioB); - result.y = (q1.y*ratioA + q2.y*ratioB); - result.z = (q1.z*ratioA + q2.z*ratioB); - result.w = (q1.w*ratioA + q2.w*ratioB); - } - } - - return result; -} - -// Calculate quaternion based on the rotation from one vector to another -RMDEF Quaternion QuaternionFromVector3ToVector3(Vector3 from, Vector3 to) -{ - Quaternion result = { 0 }; - - float cos2Theta = Vector3DotProduct(from, to); - Vector3 cross = Vector3CrossProduct(from, to); - - result.x = cross.x; - result.y = cross.y; - result.z = cross.z; - result.w = 1.0f + cos2Theta; // NOTE: Added QuaternioIdentity() - - // Normalize to essentially nlerp the original and identity to 0.5 - result = QuaternionNormalize(result); - - // Above lines are equivalent to: - //Quaternion result = QuaternionNlerp(q, QuaternionIdentity(), 0.5f); - - return result; -} - -// Returns a quaternion for a given rotation matrix -RMDEF Quaternion QuaternionFromMatrix(Matrix mat) -{ - Quaternion result = { 0 }; - - if ((mat.m0 > mat.m5) && (mat.m0 > mat.m10)) - { - float s = sqrtf(1.0f + mat.m0 - mat.m5 - mat.m10)*2; - - result.x = 0.25f*s; - result.y = (mat.m4 + mat.m1)/s; - result.z = (mat.m2 + mat.m8)/s; - result.w = (mat.m9 - mat.m6)/s; - } - else if (mat.m5 > mat.m10) - { - float s = sqrtf(1.0f + mat.m5 - mat.m0 - mat.m10)*2; - result.x = (mat.m4 + mat.m1)/s; - result.y = 0.25f*s; - result.z = (mat.m9 + mat.m6)/s; - result.w = (mat.m2 - mat.m8)/s; - } - else - { - float s = sqrtf(1.0f + mat.m10 - mat.m0 - mat.m5)*2; - result.x = (mat.m2 + mat.m8)/s; - result.y = (mat.m9 + mat.m6)/s; - result.z = 0.25f*s; - result.w = (mat.m4 - mat.m1)/s; - } - - return result; -} - -// Returns a matrix for a given quaternion -RMDEF Matrix QuaternionToMatrix(Quaternion q) -{ - Matrix result = MatrixIdentity(); - - float a2 = 2*(q.x*q.x), b2=2*(q.y*q.y), c2=2*(q.z*q.z); //, d2=2*(q.w*q.w); - - float ab = 2*(q.x*q.y), ac=2*(q.x*q.z), bc=2*(q.y*q.z); - float ad = 2*(q.x*q.w), bd=2*(q.y*q.w), cd=2*(q.z*q.w); - - result.m0 = 1 - b2 - c2; - result.m1 = ab - cd; - result.m2 = ac + bd; - - result.m4 = ab + cd; - result.m5 = 1 - a2 - c2; - result.m6 = bc - ad; - - result.m8 = ac - bd; - result.m9 = bc + ad; - result.m10 = 1 - a2 - b2; - - return result; -} - -// Returns rotation quaternion for an angle and axis -// NOTE: angle must be provided in radians -RMDEF Quaternion QuaternionFromAxisAngle(Vector3 axis, float angle) -{ - Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f }; - - if (Vector3Length(axis) != 0.0f) - - angle *= 0.5f; - - axis = Vector3Normalize(axis); - - float sinres = sinf(angle); - float cosres = cosf(angle); - - result.x = axis.x*sinres; - result.y = axis.y*sinres; - result.z = axis.z*sinres; - result.w = cosres; - - result = QuaternionNormalize(result); - - return result; -} - -// Returns the rotation angle and axis for a given quaternion -RMDEF void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle) -{ - if (fabs(q.w) > 1.0f) q = QuaternionNormalize(q); - - Vector3 resAxis = { 0.0f, 0.0f, 0.0f }; - float resAngle = 2.0f*acosf(q.w); - float den = sqrtf(1.0f - q.w*q.w); - - if (den > 0.0001f) - { - resAxis.x = q.x/den; - resAxis.y = q.y/den; - resAxis.z = q.z/den; - } - else - { - // This occurs when the angle is zero. - // Not a problem: just set an arbitrary normalized axis. - resAxis.x = 1.0f; - } - - *outAxis = resAxis; - *outAngle = resAngle; -} - -// Returns he quaternion equivalent to Euler angles -RMDEF Quaternion QuaternionFromEuler(float roll, float pitch, float yaw) -{ - Quaternion q = { 0 }; - - float x0 = cosf(roll*0.5f); - float x1 = sinf(roll*0.5f); - float y0 = cosf(pitch*0.5f); - float y1 = sinf(pitch*0.5f); - float z0 = cosf(yaw*0.5f); - float z1 = sinf(yaw*0.5f); - - q.x = x1*y0*z0 - x0*y1*z1; - q.y = x0*y1*z0 + x1*y0*z1; - q.z = x0*y0*z1 - x1*y1*z0; - q.w = x0*y0*z0 + x1*y1*z1; - - return q; -} - -// Return the Euler angles equivalent to quaternion (roll, pitch, yaw) -// NOTE: Angles are returned in a Vector3 struct in degrees -RMDEF Vector3 QuaternionToEuler(Quaternion q) -{ - Vector3 result = { 0 }; - - // roll (x-axis rotation) - float x0 = 2.0f*(q.w*q.x + q.y*q.z); - float x1 = 1.0f - 2.0f*(q.x*q.x + q.y*q.y); - result.x = atan2f(x0, x1)*RAD2DEG; - - // pitch (y-axis rotation) - float y0 = 2.0f*(q.w*q.y - q.z*q.x); - y0 = y0 > 1.0f ? 1.0f : y0; - y0 = y0 < -1.0f ? -1.0f : y0; - result.y = asinf(y0)*RAD2DEG; - - // yaw (z-axis rotation) - float z0 = 2.0f*(q.w*q.z + q.x*q.y); - float z1 = 1.0f - 2.0f*(q.y*q.y + q.z*q.z); - result.z = atan2f(z0, z1)*RAD2DEG; - - return result; -} - -// Transform a quaternion given a transformation matrix -RMDEF Quaternion QuaternionTransform(Quaternion q, Matrix mat) -{ - Quaternion result = { 0 }; - - result.x = mat.m0*q.x + mat.m4*q.y + mat.m8*q.z + mat.m12*q.w; - result.y = mat.m1*q.x + mat.m5*q.y + mat.m9*q.z + mat.m13*q.w; - result.z = mat.m2*q.x + mat.m6*q.y + mat.m10*q.z + mat.m14*q.w; - result.w = mat.m3*q.x + mat.m7*q.y + mat.m11*q.z + mat.m15*q.w; - - return result; -} - -// Projects a Vector3 from screen space into object space -RMDEF Vector3 Vector3Unproject(Vector3 source, Matrix projection, Matrix view) -{ - Vector3 result = { 0.0f, 0.0f, 0.0f }; - - // Calculate unproject matrix (multiply view patrix by projection matrix) and invert it - Matrix matViewProj = MatrixMultiply(view, projection); - matViewProj = MatrixInvert(matViewProj); - - // Create quaternion from source point - Quaternion quat = { source.x, source.y, source.z, 1.0f }; - - // Multiply quat point by unproject matrix - quat = QuaternionTransform(quat, matViewProj); - - // Normalized world points in vectors - result.x = quat.x/quat.w; - result.y = quat.y/quat.w; - result.z = quat.z/quat.w; - - return result; -} - -#endif // RAYMATH_H diff --git a/raylib-sys/rgui_wrapper.c b/raylib-sys/rgui_wrapper.c deleted file mode 100644 index 5cb3597a..00000000 --- a/raylib-sys/rgui_wrapper.c +++ /dev/null @@ -1,8 +0,0 @@ -#include "raylib.h" -#define RICONS_IMPLEMENTATION -#define RAYGUI_IMPLEMENTATION -#define RAYGUI_SUPPORT_ICONS -#define RLGL_IMPLEMENTATION -#define RLGL_SUPPORT_TRACELOG -// #include "rlgl.h" // Don't include rlgl since it's in raylib -#include "raygui.h" \ No newline at end of file diff --git a/raylib-sys/rgui_wrapper.cpp b/raylib-sys/rgui_wrapper.cpp deleted file mode 100644 index fa21f0fe..00000000 --- a/raylib-sys/rgui_wrapper.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "raylib.h" -#define RICONS_IMPLEMENTATION -#define RAYGUI_IMPLEMENTATION -#define RAYGUI_SUPPORT_ICONS -#define RLGL_IMPLEMENTATION -#define RLGL_SUPPORT_TRACELOG -// // Support TRACELOG macros -// #if !defined(TRACELOG) -// #define TRACELOG(level, ...) (void)0 -// #define TRACELOGD(...) (void)0 -// #endif -// #include "rlgl.h" // Don't include rlgl since it's in raylib -#include "raygui.h" -#undef RAYGUI_IMPLEMENTATION \ No newline at end of file diff --git a/raylib-sys/rgui_wrapper.h b/raylib-sys/rgui_wrapper.h deleted file mode 100644 index b07ed3ed..00000000 --- a/raylib-sys/rgui_wrapper.h +++ /dev/null @@ -1,9 +0,0 @@ -#define RICONS_IMPLEMENTATION -#define RAYGUI_IMPLEMENTATION -#define RAYGUI_SUPPORT_ICONS -#define RLGL_IMPLEMENTATION -#define RLGL_SUPPORT_TRACELOG -#if defined(_WIN32) - #include "rlgl.h" -#endif -#include "raygui.h" \ No newline at end of file diff --git a/raylib-sys/ricons.h b/raylib-sys/ricons.h deleted file mode 100755 index 62445828..00000000 --- a/raylib-sys/ricons.h +++ /dev/null @@ -1,557 +0,0 @@ -/********************************************************************************************** -* -* rIcons - Icons pack intended for tools development with raygui -* -* LICENSE: zlib/libpng -* -* Copyright (c) 2019-2020 Ramon Santamaria (@raysan5) -* -**********************************************************************************************/ - -#ifndef RICONS_H -#define RICONS_H - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -#define RICON_MAX_ICONS 256 // Maximum number of icons -#define RICON_SIZE 16 // Size of icons (squared) - -#define RICON_MAX_NAME_LENGTH 32 // Maximum length of icon name id - -// Icons data is defined by bit array (every bit represents one pixel) -// Those arrays are stored as unsigned int data arrays, so every array -// element defines 32 pixels (bits) of information -// Number of elemens depend on RICON_SIZE (by default 16x16 pixels) -#define RICON_DATA_ELEMENTS (RICON_SIZE * RICON_SIZE / 32) - -//---------------------------------------------------------------------------------- -// Icons enumeration -//---------------------------------------------------------------------------------- -typedef enum -{ - RICON_NONE = 0, - RICON_FOLDER_FILE_OPEN = 1, - RICON_FILE_SAVE_CLASSIC = 2, - RICON_FOLDER_OPEN = 3, - RICON_FOLDER_SAVE = 4, - RICON_FILE_OPEN = 5, - RICON_FILE_SAVE = 6, - RICON_FILE_EXPORT = 7, - RICON_FILE_NEW = 8, - RICON_FILE_DELETE = 9, - RICON_FILETYPE_TEXT = 10, - RICON_FILETYPE_AUDIO = 11, - RICON_FILETYPE_IMAGE = 12, - RICON_FILETYPE_PLAY = 13, - RICON_FILETYPE_VIDEO = 14, - RICON_FILETYPE_INFO = 15, - RICON_FILE_COPY = 16, - RICON_FILE_CUT = 17, - RICON_FILE_PASTE = 18, - RICON_CURSOR_HAND = 19, - RICON_CURSOR_POINTER = 20, - RICON_CURSOR_CLASSIC = 21, - RICON_PENCIL = 22, - RICON_PENCIL_BIG = 23, - RICON_BRUSH_CLASSIC = 24, - RICON_BRUSH_PAINTER = 25, - RICON_WATER_DROP = 26, - RICON_COLOR_PICKER = 27, - RICON_RUBBER = 28, - RICON_COLOR_BUCKET = 29, - RICON_TEXT_T = 30, - RICON_TEXT_A = 31, - RICON_SCALE = 32, - RICON_RESIZE = 33, - RICON_FILTER_POINT = 34, - RICON_FILTER_BILINEAR = 35, - RICON_CROP = 36, - RICON_CROP_ALPHA = 37, - RICON_SQUARE_TOGGLE = 38, - RICON_SYMMETRY = 39, - RICON_SYMMETRY_HORIZONTAL = 40, - RICON_SYMMETRY_VERTICAL = 41, - RICON_LENS = 42, - RICON_LENS_BIG = 43, - RICON_EYE_ON = 44, - RICON_EYE_OFF = 45, - RICON_FILTER_TOP = 46, - RICON_FILTER = 47, - RICON_TARGET_POINT = 48, - RICON_TARGET_SMALL = 49, - RICON_TARGET_BIG = 50, - RICON_TARGET_MOVE = 51, - RICON_CURSOR_MOVE = 52, - RICON_CURSOR_SCALE = 53, - RICON_CURSOR_SCALE_RIGHT = 54, - RICON_CURSOR_SCALE_LEFT = 55, - RICON_UNDO = 56, - RICON_REDO = 57, - RICON_REREDO = 58, - RICON_MUTATE = 59, - RICON_ROTATE = 60, - RICON_REPEAT = 61, - RICON_SHUFFLE = 62, - RICON_EMPTYBOX = 63, - RICON_TARGET = 64, - RICON_TARGET_SMALL_FILL = 65, - RICON_TARGET_BIG_FILL = 66, - RICON_TARGET_MOVE_FILL = 67, - RICON_CURSOR_MOVE_FILL = 68, - RICON_CURSOR_SCALE_FILL = 69, - RICON_CURSOR_SCALE_RIGHT_FILL = 70, - RICON_CURSOR_SCALE_LEFT_FILL = 71, - RICON_UNDO_FILL = 72, - RICON_REDO_FILL = 73, - RICON_REREDO_FILL = 74, - RICON_MUTATE_FILL = 75, - RICON_ROTATE_FILL = 76, - RICON_REPEAT_FILL = 77, - RICON_SHUFFLE_FILL = 78, - RICON_EMPTYBOX_SMALL = 79, - RICON_BOX = 80, - RICON_BOX_TOP = 81, - RICON_BOX_TOP_RIGHT = 82, - RICON_BOX_RIGHT = 83, - RICON_BOX_BOTTOM_RIGHT = 84, - RICON_BOX_BOTTOM = 85, - RICON_BOX_BOTTOM_LEFT = 86, - RICON_BOX_LEFT = 87, - RICON_BOX_TOP_LEFT = 88, - RICON_BOX_CENTER = 89, - RICON_BOX_CIRCLE_MASK = 90, - RICON_POT = 91, - RICON_ALPHA_MULTIPLY = 92, - RICON_ALPHA_CLEAR = 93, - RICON_DITHERING = 94, - RICON_MIPMAPS = 95, - RICON_BOX_GRID = 96, - RICON_GRID = 97, - RICON_BOX_CORNERS_SMALL = 98, - RICON_BOX_CORNERS_BIG = 99, - RICON_FOUR_BOXES = 100, - RICON_GRID_FILL = 101, - RICON_BOX_MULTISIZE = 102, - RICON_ZOOM_SMALL = 103, - RICON_ZOOM_MEDIUM = 104, - RICON_ZOOM_BIG = 105, - RICON_ZOOM_ALL = 106, - RICON_ZOOM_CENTER = 107, - RICON_BOX_DOTS_SMALL = 108, - RICON_BOX_DOTS_BIG = 109, - RICON_BOX_CONCENTRIC = 110, - RICON_BOX_GRID_BIG = 111, - RICON_OK_TICK = 112, - RICON_CROSS = 113, - RICON_ARROW_LEFT = 114, - RICON_ARROW_RIGHT = 115, - RICON_ARROW_BOTTOM = 116, - RICON_ARROW_TOP = 117, - RICON_ARROW_LEFT_FILL = 118, - RICON_ARROW_RIGHT_FILL = 119, - RICON_ARROW_BOTTOM_FILL = 120, - RICON_ARROW_TOP_FILL = 121, - RICON_AUDIO = 122, - RICON_FX = 123, - RICON_WAVE = 124, - RICON_WAVE_SINUS = 125, - RICON_WAVE_SQUARE = 126, - RICON_WAVE_TRIANGULAR = 127, - RICON_CROSS_SMALL = 128, - RICON_PLAYER_PREVIOUS = 129, - RICON_PLAYER_PLAY_BACK = 130, - RICON_PLAYER_PLAY = 131, - RICON_PLAYER_PAUSE = 132, - RICON_PLAYER_STOP = 133, - RICON_PLAYER_NEXT = 134, - RICON_PLAYER_RECORD = 135, - RICON_MAGNET = 136, - RICON_LOCK_CLOSE = 137, - RICON_LOCK_OPEN = 138, - RICON_CLOCK = 139, - RICON_TOOLS = 140, - RICON_GEAR = 141, - RICON_GEAR_BIG = 142, - RICON_BIN = 143, - RICON_HAND_POINTER = 144, - RICON_LASER = 145, - RICON_COIN = 146, - RICON_EXPLOSION = 147, - RICON_1UP = 148, - RICON_PLAYER = 149, - RICON_PLAYER_JUMP = 150, - RICON_KEY = 151, - RICON_DEMON = 152, - RICON_TEXT_POPUP = 153, - RICON_GEAR_EX = 154, - RICON_CRACK = 155, - RICON_CRACK_POINTS = 156, - RICON_STAR = 157, - RICON_DOOR = 158, - RICON_EXIT = 159, - RICON_MODE_2D = 160, - RICON_MODE_3D = 161, - RICON_CUBE = 162, - RICON_CUBE_FACE_TOP = 163, - RICON_CUBE_FACE_LEFT = 164, - RICON_CUBE_FACE_FRONT = 165, - RICON_CUBE_FACE_BOTTOM = 166, - RICON_CUBE_FACE_RIGHT = 167, - RICON_CUBE_FACE_BACK = 168, - RICON_CAMERA = 169, - RICON_SPECIAL = 170, - RICON_LINK_NET = 171, - RICON_LINK_BOXES = 172, - RICON_LINK_MULTI = 173, - RICON_LINK = 174, - RICON_LINK_BROKE = 175, - RICON_TEXT_NOTES = 176, - RICON_NOTEBOOK = 177, - RICON_SUITCASE = 178, - RICON_SUITCASE_ZIP = 179, - RICON_MAILBOX = 180, - RICON_MONITOR = 181, - RICON_PRINTER = 182, - RICON_PHOTO_CAMERA = 183, - RICON_PHOTO_CAMERA_FLASH = 184, - RICON_HOUSE = 185, - RICON_HEART = 186, - RICON_CORNER = 187, - RICON_VERTICAL_BARS = 188, - RICON_VERTICAL_BARS_FILL = 189, - RICON_LIFE_BARS = 190, - RICON_INFO = 191, - RICON_CROSSLINE = 192, - RICON_HELP = 193, - RICON_FILETYPE_ALPHA = 194, - RICON_FILETYPE_HOME = 195, - RICON_LAYERS_VISIBLE = 196, - RICON_LAYERS = 197, - RICON_WINDOW = 198, - RICON_HIDPI = 199, - RICON_200 = 200, - RICON_201 = 201, - RICON_202 = 202, - RICON_203 = 203, - RICON_204 = 204, - RICON_205 = 205, - RICON_206 = 206, - RICON_207 = 207, - RICON_208 = 208, - RICON_209 = 209, - RICON_210 = 210, - RICON_211 = 211, - RICON_212 = 212, - RICON_213 = 213, - RICON_214 = 214, - RICON_215 = 215, - RICON_216 = 216, - RICON_217 = 217, - RICON_218 = 218, - RICON_219 = 219, - RICON_220 = 220, - RICON_221 = 221, - RICON_222 = 222, - RICON_223 = 223, - RICON_224 = 224, - RICON_225 = 225, - RICON_226 = 226, - RICON_227 = 227, - RICON_228 = 228, - RICON_229 = 229, - RICON_230 = 230, - RICON_231 = 231, - RICON_232 = 232, - RICON_233 = 233, - RICON_234 = 234, - RICON_235 = 235, - RICON_236 = 236, - RICON_237 = 237, - RICON_238 = 238, - RICON_239 = 239, - RICON_240 = 240, - RICON_241 = 241, - RICON_242 = 242, - RICON_243 = 243, - RICON_244 = 244, - RICON_245 = 245, - RICON_246 = 246, - RICON_247 = 247, - RICON_248 = 248, - RICON_249 = 249, - RICON_250 = 250, - RICON_251 = 251, - RICON_252 = 252, - RICON_253 = 253, - RICON_254 = 254, - RICON_255 = 255, -} guiIconName; - -#endif // RICONS_H - -#if defined(RICONS_IMPLEMENTATION) -//---------------------------------------------------------------------------------- -// Icons data (allocated on memory data section by default) -// NOTE: A new icon set could be loaded over this array using GuiLoadIcons(), -// just note that loaded icons set must be same RICON_SIZE -//---------------------------------------------------------------------------------- -static unsigned int guiIcons[RICON_MAX_ICONS * RICON_DATA_ELEMENTS] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_NONE - 0x3ff80000, 0x2f082008, 0x2042207e, 0x40027fc2, 0x40024002, 0x40024002, 0x40024002, 0x00007ffe, // RICON_FOLDER_FILE_OPEN - 0x3ffe0000, 0x44226422, 0x400247e2, 0x5ffa4002, 0x57ea500a, 0x500a500a, 0x40025ffa, 0x00007ffe, // RICON_FILE_SAVE_CLASSIC - 0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024002, 0x44424282, 0x793e4102, 0x00000100, // RICON_FOLDER_OPEN - 0x00000000, 0x0042007e, 0x40027fc2, 0x40024002, 0x41024102, 0x44424102, 0x793e4282, 0x00000000, // RICON_FOLDER_SAVE - 0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x24442284, 0x21042104, 0x20042104, 0x00003ffc, // RICON_FILE_OPEN - 0x3ff00000, 0x201c2010, 0x20042004, 0x21042004, 0x21042104, 0x22842444, 0x20042104, 0x00003ffc, // RICON_FILE_SAVE - 0x3ff00000, 0x201c2010, 0x00042004, 0x20041004, 0x20844784, 0x00841384, 0x20042784, 0x00003ffc, // RICON_FILE_EXPORT - 0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x22042204, 0x22042f84, 0x20042204, 0x00003ffc, // RICON_FILE_NEW - 0x3ff00000, 0x201c2010, 0x20042004, 0x20042004, 0x25042884, 0x25042204, 0x20042884, 0x00003ffc, // RICON_FILE_DELETE - 0x3ff00000, 0x201c2010, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // RICON_FILETYPE_TEXT - 0x3ff00000, 0x201c2010, 0x27042004, 0x244424c4, 0x26442444, 0x20642664, 0x20042004, 0x00003ffc, // RICON_FILETYPE_AUDIO - 0x3ff00000, 0x201c2010, 0x26042604, 0x20042004, 0x35442884, 0x2414222c, 0x20042004, 0x00003ffc, // RICON_FILETYPE_IMAGE - 0x3ff00000, 0x201c2010, 0x20c42004, 0x22442144, 0x22442444, 0x20c42144, 0x20042004, 0x00003ffc, // RICON_FILETYPE_PLAY - 0x3ff00000, 0x3ffc2ff0, 0x3f3c2ff4, 0x3dbc2eb4, 0x3dbc2bb4, 0x3f3c2eb4, 0x3ffc2ff4, 0x00002ff4, // RICON_FILETYPE_VIDEO - 0x3ff00000, 0x201c2010, 0x21842184, 0x21842004, 0x21842184, 0x21842184, 0x20042184, 0x00003ffc, // RICON_FILETYPE_INFO - 0x0ff00000, 0x381c0810, 0x28042804, 0x28042804, 0x28042804, 0x28042804, 0x20102ffc, 0x00003ff0, // RICON_FILE_COPY - 0x00000000, 0x701c0000, 0x079c1e14, 0x55a000f0, 0x079c00f0, 0x701c1e14, 0x00000000, 0x00000000, // RICON_FILE_CUT - 0x01c00000, 0x13e41bec, 0x3f841004, 0x204420c4, 0x20442044, 0x20442044, 0x207c2044, 0x00003fc0, // RICON_FILE_PASTE - 0x00000000, 0x3aa00fe0, 0x2abc2aa0, 0x2aa42aa4, 0x20042aa4, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_CURSOR_HAND - 0x00000000, 0x003c000c, 0x030800c8, 0x30100c10, 0x10202020, 0x04400840, 0x01800280, 0x00000000, // RICON_CURSOR_POINTER - 0x00000000, 0x00180000, 0x01f00078, 0x03e007f0, 0x07c003e0, 0x04000e40, 0x00000000, 0x00000000, // RICON_CURSOR_CLASSIC - 0x00000000, 0x04000000, 0x11000a00, 0x04400a80, 0x01100220, 0x00580088, 0x00000038, 0x00000000, // RICON_PENCIL - 0x04000000, 0x15000a00, 0x50402880, 0x14102820, 0x05040a08, 0x015c028c, 0x007c00bc, 0x00000000, // RICON_PENCIL_BIG - 0x01c00000, 0x01400140, 0x01400140, 0x0ff80140, 0x0ff80808, 0x0aa80808, 0x0aa80aa8, 0x00000ff8, // RICON_BRUSH_CLASSIC - 0x1ffc0000, 0x5ffc7ffe, 0x40004000, 0x00807f80, 0x01c001c0, 0x01c001c0, 0x01c001c0, 0x00000080, // RICON_BRUSH_PAINTER - 0x00000000, 0x00800000, 0x01c00080, 0x03e001c0, 0x07f003e0, 0x036006f0, 0x000001c0, 0x00000000, // RICON_WATER_DROP - 0x00000000, 0x3e003800, 0x1f803f80, 0x0c201e40, 0x02080c10, 0x00840104, 0x00380044, 0x00000000, // RICON_COLOR_PICKER - 0x00000000, 0x07800300, 0x1fe00fc0, 0x3f883fd0, 0x0e021f04, 0x02040402, 0x00f00108, 0x00000000, // RICON_RUBBER - 0x00c00000, 0x02800140, 0x08200440, 0x20081010, 0x2ffe3004, 0x03f807fc, 0x00e001f0, 0x00000040, // RICON_COLOR_BUCKET - 0x00000000, 0x21843ffc, 0x01800180, 0x01800180, 0x01800180, 0x01800180, 0x03c00180, 0x00000000, // RICON_TEXT_T - 0x00800000, 0x01400180, 0x06200340, 0x0c100620, 0x1ff80c10, 0x380c1808, 0x70067004, 0x0000f80f, // RICON_TEXT_A - 0x78000000, 0x50004000, 0x00004800, 0x03c003c0, 0x03c003c0, 0x00100000, 0x0002000a, 0x0000000e, // RICON_SCALE - 0x75560000, 0x5e004002, 0x54001002, 0x41001202, 0x408200fe, 0x40820082, 0x40820082, 0x00006afe, // RICON_RESIZE - 0x00000000, 0x3f003f00, 0x3f003f00, 0x3f003f00, 0x00400080, 0x001c0020, 0x001c001c, 0x00000000, // RICON_FILTER_POINT - 0x6d800000, 0x00004080, 0x40804080, 0x40800000, 0x00406d80, 0x001c0020, 0x001c001c, 0x00000000, // RICON_FILTER_BILINEAR - 0x40080000, 0x1ffe2008, 0x14081008, 0x11081208, 0x10481088, 0x10081028, 0x10047ff8, 0x00001002, // RICON_CROP - 0x00100000, 0x3ffc0010, 0x2ab03550, 0x22b02550, 0x20b02150, 0x20302050, 0x2000fff0, 0x00002000, // RICON_CROP_ALPHA - 0x40000000, 0x1ff82000, 0x04082808, 0x01082208, 0x00482088, 0x00182028, 0x35542008, 0x00000002, // RICON_SQUARE_TOGGLE - 0x00000000, 0x02800280, 0x06c006c0, 0x0ea00ee0, 0x1e901eb0, 0x3e883e98, 0x7efc7e8c, 0x00000000, // RICON_SIMMETRY - 0x01000000, 0x05600100, 0x1d480d50, 0x7d423d44, 0x3d447d42, 0x0d501d48, 0x01000560, 0x00000100, // RICON_SIMMETRY_HORIZONTAL - 0x01800000, 0x04200240, 0x10080810, 0x00001ff8, 0x00007ffe, 0x0ff01ff8, 0x03c007e0, 0x00000180, // RICON_SIMMETRY_VERTICAL - 0x00000000, 0x010800f0, 0x02040204, 0x02040204, 0x07f00308, 0x1c000e00, 0x30003800, 0x00000000, // RICON_LENS - 0x00000000, 0x061803f0, 0x08240c0c, 0x08040814, 0x0c0c0804, 0x23f01618, 0x18002400, 0x00000000, // RICON_LENS_BIG - 0x00000000, 0x00000000, 0x1c7007c0, 0x638e3398, 0x1c703398, 0x000007c0, 0x00000000, 0x00000000, // RICON_EYE_ON - 0x00000000, 0x10002000, 0x04700fc0, 0x610e3218, 0x1c703098, 0x001007a0, 0x00000008, 0x00000000, // RICON_EYE_OFF - 0x00000000, 0x00007ffc, 0x40047ffc, 0x10102008, 0x04400820, 0x02800280, 0x02800280, 0x00000100, // RICON_FILTER_TOP - 0x00000000, 0x40027ffe, 0x10082004, 0x04200810, 0x02400240, 0x02400240, 0x01400240, 0x000000c0, // RICON_FILTER - 0x00800000, 0x00800080, 0x00000080, 0x3c9e0000, 0x00000000, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_POINT - 0x00800000, 0x00800080, 0x00800080, 0x3f7e01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_SMALL - 0x00800000, 0x00800080, 0x03e00080, 0x3e3e0220, 0x03e00220, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_BIG - 0x01000000, 0x04400280, 0x01000100, 0x43842008, 0x43849ab2, 0x01002008, 0x04400100, 0x01000280, // RICON_TARGET_MOVE - 0x01000000, 0x04400280, 0x01000100, 0x41042108, 0x41049ff2, 0x01002108, 0x04400100, 0x01000280, // RICON_CURSOR_MOVE - 0x781e0000, 0x500a4002, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x4002500a, 0x0000781e, // RICON_CURSOR_SCALE - 0x00000000, 0x20003c00, 0x24002800, 0x01000200, 0x00400080, 0x00140024, 0x003c0004, 0x00000000, // RICON_CURSOR_SCALE_RIGHT - 0x00000000, 0x0004003c, 0x00240014, 0x00800040, 0x02000100, 0x28002400, 0x3c002000, 0x00000000, // RICON_CURSOR_SCALE_LEFT - 0x00000000, 0x00100020, 0x10101fc8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // RICON_UNDO - 0x00000000, 0x08000400, 0x080813f8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // RICON_REDO - 0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3f902020, 0x00400020, 0x00000000, // RICON_REREDO - 0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3fc82010, 0x00200010, 0x00000000, // RICON_MUTATE - 0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18101020, 0x00100fc8, 0x00000020, // RICON_ROTATE - 0x00000000, 0x04000200, 0x240429fc, 0x20042204, 0x20442004, 0x3f942024, 0x00400020, 0x00000000, // RICON_REPEAT - 0x00000000, 0x20001000, 0x22104c0e, 0x00801120, 0x11200040, 0x4c0e2210, 0x10002000, 0x00000000, // RICON_SHUFFLE - 0x7ffe0000, 0x50024002, 0x44024802, 0x41024202, 0x40424082, 0x40124022, 0x4002400a, 0x00007ffe, // RICON_EMPTYBOX - 0x00800000, 0x03e00080, 0x08080490, 0x3c9e0808, 0x08080808, 0x03e00490, 0x00800080, 0x00000000, // RICON_TARGET - 0x00800000, 0x00800080, 0x00800080, 0x3ffe01c0, 0x008001c0, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_SMALL_FILL - 0x00800000, 0x00800080, 0x03e00080, 0x3ffe03e0, 0x03e003e0, 0x00800080, 0x00800080, 0x00000000, // RICON_TARGET_BIG_FILL - 0x01000000, 0x07c00380, 0x01000100, 0x638c2008, 0x638cfbbe, 0x01002008, 0x07c00100, 0x01000380, // RICON_TARGET_MOVE_FILL - 0x01000000, 0x07c00380, 0x01000100, 0x610c2108, 0x610cfffe, 0x01002108, 0x07c00100, 0x01000380, // RICON_CURSOR_MOVE_FILL - 0x781e0000, 0x6006700e, 0x04204812, 0x00000240, 0x02400000, 0x48120420, 0x700e6006, 0x0000781e, // RICON_CURSOR_SCALE_FILL - 0x00000000, 0x38003c00, 0x24003000, 0x01000200, 0x00400080, 0x000c0024, 0x003c001c, 0x00000000, // RICON_CURSOR_SCALE_RIGHT - 0x00000000, 0x001c003c, 0x0024000c, 0x00800040, 0x02000100, 0x30002400, 0x3c003800, 0x00000000, // RICON_CURSOR_SCALE_LEFT - 0x00000000, 0x00300020, 0x10301ff8, 0x10001020, 0x10001000, 0x10001000, 0x00001fc0, 0x00000000, // RICON_UNDO_FILL - 0x00000000, 0x0c000400, 0x0c081ff8, 0x00080408, 0x00080008, 0x00080008, 0x000003f8, 0x00000000, // RICON_REDO_FILL - 0x00000000, 0x3ffc0000, 0x20042004, 0x20002000, 0x20402000, 0x3ff02060, 0x00400060, 0x00000000, // RICON_REREDO_FILL - 0x00000000, 0x3ffc0000, 0x20042004, 0x27fc2004, 0x20202000, 0x3ff82030, 0x00200030, 0x00000000, // RICON_MUTATE_FILL - 0x00000000, 0x0ff00000, 0x10081818, 0x11801008, 0x10001180, 0x18301020, 0x00300ff8, 0x00000020, // RICON_ROTATE_FILL - 0x00000000, 0x06000200, 0x26042ffc, 0x20042204, 0x20442004, 0x3ff42064, 0x00400060, 0x00000000, // RICON_REPEAT_FILL - 0x00000000, 0x30001000, 0x32107c0e, 0x00801120, 0x11200040, 0x7c0e3210, 0x10003000, 0x00000000, // RICON_SHUFFLE_FILL - 0x00000000, 0x30043ffc, 0x24042804, 0x21042204, 0x20442084, 0x20142024, 0x3ffc200c, 0x00000000, // RICON_EMPTYBOX_SMALL - 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX - 0x00000000, 0x23c43ffc, 0x23c423c4, 0x200423c4, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_TOP - 0x00000000, 0x3e043ffc, 0x3e043e04, 0x20043e04, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_TOP_RIGHT - 0x00000000, 0x20043ffc, 0x20042004, 0x3e043e04, 0x3e043e04, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_RIGHT - 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x3e042004, 0x3e043e04, 0x3ffc3e04, 0x00000000, // RICON_BOX_BOTTOM_RIGHT - 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x23c42004, 0x23c423c4, 0x3ffc23c4, 0x00000000, // RICON_BOX_BOTTOM - 0x00000000, 0x20043ffc, 0x20042004, 0x20042004, 0x207c2004, 0x207c207c, 0x3ffc207c, 0x00000000, // RICON_BOX_BOTTOM_LEFT - 0x00000000, 0x20043ffc, 0x20042004, 0x207c207c, 0x207c207c, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_LEFT - 0x00000000, 0x207c3ffc, 0x207c207c, 0x2004207c, 0x20042004, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_TOP_LEFT - 0x00000000, 0x20043ffc, 0x20042004, 0x23c423c4, 0x23c423c4, 0x20042004, 0x3ffc2004, 0x00000000, // RICON_BOX_CIRCLE_MASK - 0x7ffe0000, 0x40024002, 0x47e24182, 0x4ff247e2, 0x47e24ff2, 0x418247e2, 0x40024002, 0x00007ffe, // RICON_BOX_CENTER - 0x7fff0000, 0x40014001, 0x40014001, 0x49555ddd, 0x4945495d, 0x400149c5, 0x40014001, 0x00007fff, // RICON_POT - 0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x404e40ce, 0x48125432, 0x4006540e, 0x00007ffe, // RICON_ALPHA_MULTIPLY - 0x7ffe0000, 0x53327332, 0x44ce4cce, 0x41324332, 0x5c4e40ce, 0x44124432, 0x40065c0e, 0x00007ffe, // RICON_ALPHA_CLEAR - 0x7ffe0000, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x42fe417e, 0x00007ffe, // RICON_DITHERING - 0x07fe0000, 0x1ffa0002, 0x7fea000a, 0x402a402a, 0x5b2a512a, 0x5128552a, 0x40205128, 0x00007fe0, // RICON_MIPMAPS - 0x00000000, 0x1ff80000, 0x12481248, 0x12481ff8, 0x1ff81248, 0x12481248, 0x00001ff8, 0x00000000, // RICON_BOX_GRID - 0x12480000, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x7ffe1248, 0x12481248, 0x12487ffe, 0x00001248, // RICON_GRID - 0x00000000, 0x1c380000, 0x1c3817e8, 0x08100810, 0x08100810, 0x17e81c38, 0x00001c38, 0x00000000, // RICON_BOX_CORNERS_SMALL - 0x700e0000, 0x700e5ffa, 0x20042004, 0x20042004, 0x20042004, 0x20042004, 0x5ffa700e, 0x0000700e, // RICON_BOX_CORNERS_BIG - 0x3f7e0000, 0x21422142, 0x21422142, 0x00003f7e, 0x21423f7e, 0x21422142, 0x3f7e2142, 0x00000000, // RICON_FOUR_BOXES - 0x00000000, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x3bb80000, 0x3bb83bb8, 0x00000000, // RICON_GRID_FILL - 0x7ffe0000, 0x7ffe7ffe, 0x77fe7000, 0x77fe77fe, 0x777e7700, 0x777e777e, 0x777e777e, 0x0000777e, // RICON_BOX_MULTISIZE - 0x781e0000, 0x40024002, 0x00004002, 0x01800000, 0x00000180, 0x40020000, 0x40024002, 0x0000781e, // RICON_ZOOM_SMALL - 0x781e0000, 0x40024002, 0x00004002, 0x03c003c0, 0x03c003c0, 0x40020000, 0x40024002, 0x0000781e, // RICON_ZOOM_MEDIUM - 0x781e0000, 0x40024002, 0x07e04002, 0x07e007e0, 0x07e007e0, 0x400207e0, 0x40024002, 0x0000781e, // RICON_ZOOM_BIG - 0x781e0000, 0x5ffa4002, 0x1ff85ffa, 0x1ff81ff8, 0x1ff81ff8, 0x5ffa1ff8, 0x40025ffa, 0x0000781e, // RICON_ZOOM_ALL - 0x00000000, 0x2004381c, 0x00002004, 0x00000000, 0x00000000, 0x20040000, 0x381c2004, 0x00000000, // RICON_ZOOM_CENTER - 0x00000000, 0x1db80000, 0x10081008, 0x10080000, 0x00001008, 0x10081008, 0x00001db8, 0x00000000, // RICON_BOX_DOTS_SMALL - 0x35560000, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x00002002, 0x35562002, 0x00000000, // RICON_BOX_DOTS_BIG - 0x7ffe0000, 0x40024002, 0x48124ff2, 0x49924812, 0x48124992, 0x4ff24812, 0x40024002, 0x00007ffe, // RICON_BOX_CONCENTRIC - 0x00000000, 0x10841ffc, 0x10841084, 0x1ffc1084, 0x10841084, 0x10841084, 0x00001ffc, 0x00000000, // RICON_BOX_GRID_BIG - 0x00000000, 0x00000000, 0x10000000, 0x04000800, 0x01040200, 0x00500088, 0x00000020, 0x00000000, // RICON_OK_TICK - 0x00000000, 0x10080000, 0x04200810, 0x01800240, 0x02400180, 0x08100420, 0x00001008, 0x00000000, // RICON_CROSS - 0x00000000, 0x02000000, 0x00800100, 0x00200040, 0x00200010, 0x00800040, 0x02000100, 0x00000000, // RICON_ARROW_LEFT - 0x00000000, 0x00400000, 0x01000080, 0x04000200, 0x04000800, 0x01000200, 0x00400080, 0x00000000, // RICON_ARROW_RIGHT - 0x00000000, 0x00000000, 0x00000000, 0x08081004, 0x02200410, 0x00800140, 0x00000000, 0x00000000, // RICON_ARROW_BOTTOM - 0x00000000, 0x00000000, 0x01400080, 0x04100220, 0x10040808, 0x00000000, 0x00000000, 0x00000000, // RICON_ARROW_TOP - 0x00000000, 0x02000000, 0x03800300, 0x03e003c0, 0x03e003f0, 0x038003c0, 0x02000300, 0x00000000, // RICON_ARROW_LEFT_FILL - 0x00000000, 0x00400000, 0x01c000c0, 0x07c003c0, 0x07c00fc0, 0x01c003c0, 0x004000c0, 0x00000000, // RICON_ARROW_RIGHT_FILL - 0x00000000, 0x00000000, 0x00000000, 0x0ff81ffc, 0x03e007f0, 0x008001c0, 0x00000000, 0x00000000, // RICON_ARROW_BOTTOM_FILL - 0x00000000, 0x00000000, 0x01c00080, 0x07f003e0, 0x1ffc0ff8, 0x00000000, 0x00000000, 0x00000000, // RICON_ARROW_TOP_FILL - 0x00000000, 0x18a008c0, 0x32881290, 0x24822686, 0x26862482, 0x12903288, 0x08c018a0, 0x00000000, // RICON_AUDIO - 0x00000000, 0x04800780, 0x004000c0, 0x662000f0, 0x08103c30, 0x130a0e18, 0x0000318e, 0x00000000, // RICON_FX - 0x00000000, 0x00800000, 0x08880888, 0x2aaa0a8a, 0x0a8a2aaa, 0x08880888, 0x00000080, 0x00000000, // RICON_WAVE - 0x00000000, 0x00600000, 0x01080090, 0x02040108, 0x42044204, 0x24022402, 0x00001800, 0x00000000, // RICON_WAVE_SINUS - 0x00000000, 0x07f80000, 0x04080408, 0x04080408, 0x04080408, 0x7c0e0408, 0x00000000, 0x00000000, // RICON_WAVE_SQUARE - 0x00000000, 0x00000000, 0x00a00040, 0x22084110, 0x08021404, 0x00000000, 0x00000000, 0x00000000, // RICON_WAVE_TRIANGULAR - 0x00000000, 0x00000000, 0x04200000, 0x01800240, 0x02400180, 0x00000420, 0x00000000, 0x00000000, // RICON_CROSS_SMALL - 0x00000000, 0x18380000, 0x12281428, 0x10a81128, 0x112810a8, 0x14281228, 0x00001838, 0x00000000, // RICON_PLAYER_PREVIOUS - 0x00000000, 0x18000000, 0x11801600, 0x10181060, 0x10601018, 0x16001180, 0x00001800, 0x00000000, // RICON_PLAYER_PLAY_BACK - 0x00000000, 0x00180000, 0x01880068, 0x18080608, 0x06081808, 0x00680188, 0x00000018, 0x00000000, // RICON_PLAYER_PLAY - 0x00000000, 0x1e780000, 0x12481248, 0x12481248, 0x12481248, 0x12481248, 0x00001e78, 0x00000000, // RICON_PLAYER_PAUSE - 0x00000000, 0x1ff80000, 0x10081008, 0x10081008, 0x10081008, 0x10081008, 0x00001ff8, 0x00000000, // RICON_PLAYER_STOP - 0x00000000, 0x1c180000, 0x14481428, 0x15081488, 0x14881508, 0x14281448, 0x00001c18, 0x00000000, // RICON_PLAYER_NEXT - 0x00000000, 0x03c00000, 0x08100420, 0x10081008, 0x10081008, 0x04200810, 0x000003c0, 0x00000000, // RICON_PLAYER_RECORD - 0x00000000, 0x0c3007e0, 0x13c81818, 0x14281668, 0x14281428, 0x1c381c38, 0x08102244, 0x00000000, // RICON_MAGNET - 0x07c00000, 0x08200820, 0x3ff80820, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // RICON_LOCK_CLOSE - 0x07c00000, 0x08000800, 0x3ff80800, 0x23882008, 0x21082388, 0x20082108, 0x1ff02008, 0x00000000, // RICON_LOCK_OPEN - 0x01c00000, 0x0c180770, 0x3086188c, 0x60832082, 0x60034781, 0x30062002, 0x0c18180c, 0x01c00770, // RICON_CLOCK - 0x0a200000, 0x1b201b20, 0x04200e20, 0x04200420, 0x04700420, 0x0e700e70, 0x0e700e70, 0x04200e70, // RICON_TOOLS - 0x01800000, 0x3bdc318c, 0x0ff01ff8, 0x7c3e1e78, 0x1e787c3e, 0x1ff80ff0, 0x318c3bdc, 0x00000180, // RICON_GEAR - 0x01800000, 0x3ffc318c, 0x1c381ff8, 0x781e1818, 0x1818781e, 0x1ff81c38, 0x318c3ffc, 0x00000180, // RICON_GEAR_BIG - 0x00000000, 0x08080ff8, 0x08081ffc, 0x0aa80aa8, 0x0aa80aa8, 0x0aa80aa8, 0x08080aa8, 0x00000ff8, // RICON_BIN - 0x00000000, 0x00000000, 0x20043ffc, 0x08043f84, 0x04040f84, 0x04040784, 0x000007fc, 0x00000000, // RICON_HAND_POINTER - 0x00000000, 0x24400400, 0x00001480, 0x6efe0e00, 0x00000e00, 0x24401480, 0x00000400, 0x00000000, // RICON_LASER - 0x00000000, 0x03c00000, 0x08300460, 0x11181118, 0x11181118, 0x04600830, 0x000003c0, 0x00000000, // RICON_COIN - 0x00000000, 0x10880080, 0x06c00810, 0x366c07e0, 0x07e00240, 0x00001768, 0x04200240, 0x00000000, // RICON_EXPLOSION - 0x00000000, 0x3d280000, 0x2528252c, 0x3d282528, 0x05280528, 0x05e80528, 0x00000000, 0x00000000, // RICON_1UP - 0x01800000, 0x03c003c0, 0x018003c0, 0x0ff007e0, 0x0bd00bd0, 0x0a500bd0, 0x02400240, 0x02400240, // RICON_PLAYER - 0x01800000, 0x03c003c0, 0x118013c0, 0x03c81ff8, 0x07c003c8, 0x04400440, 0x0c080478, 0x00000000, // RICON_PLAYER_JUMP - 0x3ff80000, 0x30183ff8, 0x30183018, 0x3ff83ff8, 0x03000300, 0x03c003c0, 0x03e00300, 0x000003e0, // RICON_KEY - 0x3ff80000, 0x3ff83ff8, 0x33983ff8, 0x3ff83398, 0x3ff83ff8, 0x00000540, 0x0fe00aa0, 0x00000fe0, // RICON_DEMON - 0x00000000, 0x0ff00000, 0x20041008, 0x25442004, 0x10082004, 0x06000bf0, 0x00000300, 0x00000000, // RICON_TEXT_POPUP - 0x00000000, 0x11440000, 0x07f00be8, 0x1c1c0e38, 0x1c1c0c18, 0x07f00e38, 0x11440be8, 0x00000000, // RICON_GEAR_EX - 0x00000000, 0x20080000, 0x0c601010, 0x07c00fe0, 0x07c007c0, 0x0c600fe0, 0x20081010, 0x00000000, // RICON_CRACK - 0x00000000, 0x20080000, 0x0c601010, 0x04400fe0, 0x04405554, 0x0c600fe0, 0x20081010, 0x00000000, // RICON_CRACK_POINTS - 0x00000000, 0x00800080, 0x01c001c0, 0x1ffc3ffe, 0x03e007f0, 0x07f003e0, 0x0c180770, 0x00000808, // RICON_STAR - 0x0ff00000, 0x08180810, 0x08100818, 0x0a100810, 0x08180810, 0x08100818, 0x08100810, 0x00001ff8, // RICON_DOOR - 0x0ff00000, 0x08100810, 0x08100810, 0x10100010, 0x4f902010, 0x10102010, 0x08100010, 0x00000ff0, // RICON_EXIT - 0x00040000, 0x001f000e, 0x0ef40004, 0x12f41284, 0x0ef41214, 0x10040004, 0x7ffc3004, 0x10003000, // RICON_MODE_2D - 0x78040000, 0x501f600e, 0x0ef44004, 0x12f41284, 0x0ef41284, 0x10140004, 0x7ffc300c, 0x10003000, // RICON_MODE_3D - 0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // RICON_CUBE - 0x7fe00000, 0x5ff87ff0, 0x47fe4ffc, 0x44224402, 0x44224422, 0x241275e2, 0x0c06140a, 0x000007fe, // RICON_CUBE_FACE_TOP - 0x7fe00000, 0x50386030, 0x47fe483c, 0x443e443e, 0x443e443e, 0x241e75fe, 0x0c06140e, 0x000007fe, // RICON_CUBE_FACE_LEFT - 0x7fe00000, 0x50286030, 0x47fe4804, 0x47fe47fe, 0x47fe47fe, 0x27fe77fe, 0x0ffe17fe, 0x000007fe, // RICON_CUBE_FACE_FRONT - 0x7fe00000, 0x50286030, 0x47fe4804, 0x44224402, 0x44224422, 0x3ff27fe2, 0x0ffe1ffa, 0x000007fe, // RICON_CUBE_FACE_BOTTOM - 0x7fe00000, 0x70286030, 0x7ffe7804, 0x7c227c02, 0x7c227c22, 0x3c127de2, 0x0c061c0a, 0x000007fe, // RICON_CUBE_FACE_RIGHT - 0x7fe00000, 0x7fe87ff0, 0x7ffe7fe4, 0x7fe27fe2, 0x7fe27fe2, 0x24127fe2, 0x0c06140a, 0x000007fe, // RICON_CUBE_FACE_BACK - 0x00000000, 0x2a0233fe, 0x22022602, 0x22022202, 0x2a022602, 0x00a033fe, 0x02080110, 0x00000000, // RICON_CAMERA - 0x00000000, 0x200c3ffc, 0x000c000c, 0x3ffc000c, 0x30003000, 0x30003000, 0x3ffc3004, 0x00000000, // RICON_SPECIAL - 0x00000000, 0x0022003e, 0x012201e2, 0x0100013e, 0x01000100, 0x79000100, 0x4f004900, 0x00007800, // RICON_LINK_NET - 0x00000000, 0x44007c00, 0x45004600, 0x00627cbe, 0x00620022, 0x45007cbe, 0x44004600, 0x00007c00, // RICON_LINK_BOXES - 0x00000000, 0x0044007c, 0x0010007c, 0x3f100010, 0x3f1021f0, 0x3f100010, 0x3f0021f0, 0x00000000, // RICON_LINK_MULTI - 0x00000000, 0x0044007c, 0x00440044, 0x0010007c, 0x00100010, 0x44107c10, 0x440047f0, 0x00007c00, // RICON_LINK - 0x00000000, 0x0044007c, 0x00440044, 0x0000007c, 0x00000010, 0x44007c10, 0x44004550, 0x00007c00, // RICON_LINK_BROKE - 0x02a00000, 0x22a43ffc, 0x20042004, 0x20042ff4, 0x20042ff4, 0x20042ff4, 0x20042004, 0x00003ffc, // RICON_TEXT_NOTES - 0x3ffc0000, 0x20042004, 0x245e27c4, 0x27c42444, 0x2004201e, 0x201e2004, 0x20042004, 0x00003ffc, // RICON_NOTEBOOK - 0x00000000, 0x07e00000, 0x04200420, 0x24243ffc, 0x24242424, 0x24242424, 0x3ffc2424, 0x00000000, // RICON_SUITCASE - 0x00000000, 0x0fe00000, 0x08200820, 0x40047ffc, 0x7ffc5554, 0x40045554, 0x7ffc4004, 0x00000000, // RICON_SUITCASE_ZIP - 0x00000000, 0x20043ffc, 0x3ffc2004, 0x13c81008, 0x100813c8, 0x10081008, 0x1ff81008, 0x00000000, // RICON_MAILBOX - 0x00000000, 0x40027ffe, 0x5ffa5ffa, 0x5ffa5ffa, 0x40025ffa, 0x03c07ffe, 0x1ff81ff8, 0x00000000, // RICON_MONITOR - 0x0ff00000, 0x6bfe7ffe, 0x7ffe7ffe, 0x68167ffe, 0x08106816, 0x08100810, 0x0ff00810, 0x00000000, // RICON_PRINTER - 0x3ff80000, 0xfffe2008, 0x870a8002, 0x904a888a, 0x904a904a, 0x870a888a, 0xfffe8002, 0x00000000, // RICON_PHOTO_CAMERA - 0x0fc00000, 0xfcfe0cd8, 0x8002fffe, 0x84428382, 0x84428442, 0x80028382, 0xfffe8002, 0x00000000, // RICON_PHOTO_CAMERA_FLASH - 0x00000000, 0x02400180, 0x08100420, 0x20041008, 0x23c42004, 0x22442244, 0x3ffc2244, 0x00000000, // RICON_HOUSE - 0x00000000, 0x1c700000, 0x3ff83ef8, 0x3ff83ff8, 0x0fe01ff0, 0x038007c0, 0x00000100, 0x00000000, // RICON_HEART - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x80000000, 0xe000c000, // RICON_CORNER - 0x00000000, 0x14001c00, 0x15c01400, 0x15401540, 0x155c1540, 0x15541554, 0x1ddc1554, 0x00000000, // RICON_VERTICAL_BARS - 0x00000000, 0x03000300, 0x1b001b00, 0x1b601b60, 0x1b6c1b60, 0x1b6c1b6c, 0x1b6c1b6c, 0x00000000, // RICON_VERTICAL_BARS_FILL - 0x00000000, 0x00000000, 0x403e7ffe, 0x7ffe403e, 0x7ffe0000, 0x43fe43fe, 0x00007ffe, 0x00000000, // RICON_LIFE_BARS - 0x7ffc0000, 0x43844004, 0x43844284, 0x43844004, 0x42844284, 0x42844284, 0x40044384, 0x00007ffc, // RICON_INFO - 0x40008000, 0x10002000, 0x04000800, 0x01000200, 0x00400080, 0x00100020, 0x00040008, 0x00010002, // RICON_CROSSLINE - 0x00000000, 0x1ff01ff0, 0x18301830, 0x1f001830, 0x03001f00, 0x00000300, 0x03000300, 0x00000000, // RICON_HELP - 0x3ff00000, 0x2abc3550, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x2aac3554, 0x00003ffc, // RICON_FILETYPE_ALPHA - 0x3ff00000, 0x201c2010, 0x22442184, 0x28142424, 0x29942814, 0x2ff42994, 0x20042004, 0x00003ffc, // RICON_FILETYPE_HOME - 0x07fe0000, 0x04020402, 0x7fe20402, 0x44224422, 0x44224422, 0x402047fe, 0x40204020, 0x00007fe0, // RICON_LAYERS_VISIBLE - 0x07fe0000, 0x04020402, 0x7c020402, 0x44024402, 0x44024402, 0x402047fe, 0x40204020, 0x00007fe0, // RICON_LAYERS - 0x00000000, 0x40027ffe, 0x7ffe4002, 0x40024002, 0x40024002, 0x40024002, 0x7ffe4002, 0x00000000, // RICON_WINDOW - 0x09100000, 0x09f00910, 0x09100910, 0x00000910, 0x24a2779e, 0x27a224a2, 0x709e20a2, 0x00000000, // RICON_HIDPI - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_200 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_201 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_202 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_203 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_204 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_205 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_206 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_207 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_208 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_209 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_210 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_211 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_212 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_213 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_214 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_215 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_216 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_217 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_218 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_219 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_220 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_221 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_222 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_223 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_224 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_225 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_226 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_227 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_228 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_229 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_230 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_231 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_232 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_233 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_234 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_235 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_236 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_237 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_238 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_239 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_240 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_241 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_242 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_243 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_244 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_245 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_246 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_247 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_248 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_249 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_250 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_251 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_252 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_253 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_254 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, // RICON_255 -}; -#endif // RICONS_IMPLEMENTATION diff --git a/raylib-sys/rlgl.h b/raylib-sys/rlgl.h deleted file mode 100644 index 917b7921..00000000 --- a/raylib-sys/rlgl.h +++ /dev/null @@ -1,4069 +0,0 @@ -/********************************************************************************************** -* -* rlgl v3.7 - raylib OpenGL abstraction layer -* -* rlgl is a wrapper for multiple OpenGL versions (1.1, 2.1, 3.3 Core, ES 2.0) to -* pseudo-OpenGL 1.1 style functions (rlVertex, rlTranslate, rlRotate...). -* -* When chosing an OpenGL version greater than OpenGL 1.1, rlgl stores vertex data on internal -* VBO buffers (and VAOs if available). It requires calling 3 functions: -* rlglInit() - Initialize internal buffers and auxiliary resources -* rlglClose() - De-initialize internal buffers data and other auxiliar resources -* -* CONFIGURATION: -* -* #define GRAPHICS_API_OPENGL_11 -* #define GRAPHICS_API_OPENGL_21 -* #define GRAPHICS_API_OPENGL_33 -* #define GRAPHICS_API_OPENGL_ES2 -* Use selected OpenGL graphics backend, should be supported by platform -* Those preprocessor defines are only used on rlgl module, if OpenGL version is -* required by any other module, use rlGetVersion() to check it -* -* #define RLGL_IMPLEMENTATION -* Generates the implementation of the library into the included file. -* If not defined, the library is in header only mode and can be included in other headers -* or source files without problems. But only ONE file should hold the implementation. -* -* #define RLGL_STANDALONE -* Use rlgl as standalone library (no raylib dependency) -* -* #define SUPPORT_GL_DETAILS_INFO -* Show OpenGL extensions and capabilities detailed logs on init -* -* DEPENDENCIES: -* raymath - 3D math functionality (Vector3, Matrix, Quaternion) -* GLAD - OpenGL extensions loading (OpenGL 3.3 Core only) -* -* -* LICENSE: zlib/libpng -* -* Copyright (c) 2014-2021 Ramon Santamaria (@raysan5) -* -* This software is provided "as-is", without any express or implied warranty. In no event -* will the authors be held liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, including commercial -* applications, and to alter it and redistribute it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not claim that you -* wrote the original software. If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be misrepresented -* as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -**********************************************************************************************/ - -#ifndef RLGL_H -#define RLGL_H - -#if defined(RLGL_STANDALONE) - #define RAYMATH_STANDALONE - #define RAYMATH_HEADER_ONLY - - #define RLAPI // We are building or using rlgl as a static library (or Linux shared library) - - #if defined(_WIN32) - #if defined(BUILD_LIBTYPE_SHARED) - #define RLAPI __declspec(dllexport) // We are building raylib as a Win32 shared library (.dll) - #elif defined(USE_LIBTYPE_SHARED) - #define RLAPI __declspec(dllimport) // We are using raylib as a Win32 shared library (.dll) - #endif - #endif - - // Support TRACELOG macros - #if !defined(TRACELOG) - #define TRACELOG(level, ...) (void)0 - #define TRACELOGD(...) (void)0 - #endif - - // Allow custom memory allocators - #ifndef RL_MALLOC - #define RL_MALLOC(sz) malloc(sz) - #endif - #ifndef RL_CALLOC - #define RL_CALLOC(n,sz) calloc(n,sz) - #endif - #ifndef RL_REALLOC - #define RL_REALLOC(n,sz) realloc(n,sz) - #endif - #ifndef RL_FREE - #define RL_FREE(p) free(p) - #endif -#else - #include "raylib.h" // Required for: Shader, Texture2D -#endif - -#include "raymath.h" // Required for: Vector3, Matrix - -// Security check in case no GRAPHICS_API_OPENGL_* defined -#if !defined(GRAPHICS_API_OPENGL_11) && \ - !defined(GRAPHICS_API_OPENGL_21) && \ - !defined(GRAPHICS_API_OPENGL_33) && \ - !defined(GRAPHICS_API_OPENGL_ES2) - #define GRAPHICS_API_OPENGL_33 -#endif - -// Security check in case multiple GRAPHICS_API_OPENGL_* defined -#if defined(GRAPHICS_API_OPENGL_11) - #if defined(GRAPHICS_API_OPENGL_21) - #undef GRAPHICS_API_OPENGL_21 - #endif - #if defined(GRAPHICS_API_OPENGL_33) - #undef GRAPHICS_API_OPENGL_33 - #endif - #if defined(GRAPHICS_API_OPENGL_ES2) - #undef GRAPHICS_API_OPENGL_ES2 - #endif -#endif - -// OpenGL 2.1 uses most of OpenGL 3.3 Core functionality -// WARNING: Specific parts are checked with #if defines -#if defined(GRAPHICS_API_OPENGL_21) - #define GRAPHICS_API_OPENGL_33 -#endif - -#define SUPPORT_RENDER_TEXTURES_HINT - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -// Default internal render batch limits -#ifndef DEFAULT_BATCH_BUFFER_ELEMENTS - #if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) - // This is the maximum amount of elements (quads) per batch - // NOTE: Be careful with text, every letter maps to a quad - #define DEFAULT_BATCH_BUFFER_ELEMENTS 8192 - #endif - #if defined(GRAPHICS_API_OPENGL_ES2) - // We reduce memory sizes for embedded systems (RPI and HTML5) - // NOTE: On HTML5 (emscripten) this is allocated on heap, - // by default it's only 16MB!...just take care... - #define DEFAULT_BATCH_BUFFER_ELEMENTS 2048 - #endif -#endif -#ifndef DEFAULT_BATCH_BUFFERS - #define DEFAULT_BATCH_BUFFERS 1 // Default number of batch buffers (multi-buffering) -#endif -#ifndef DEFAULT_BATCH_DRAWCALLS - #define DEFAULT_BATCH_DRAWCALLS 256 // Default number of batch draw calls (by state changes: mode, texture) -#endif -#ifndef MAX_BATCH_ACTIVE_TEXTURES - #define MAX_BATCH_ACTIVE_TEXTURES 4 // Maximum number of additional textures that can be activated on batch drawing (SetShaderValueTexture()) -#endif - -// Internal Matrix stack -#ifndef MAX_MATRIX_STACK_SIZE - #define MAX_MATRIX_STACK_SIZE 32 // Maximum size of Matrix stack -#endif - -// Vertex buffers id limit -#ifndef MAX_MESH_VERTEX_BUFFERS - #define MAX_MESH_VERTEX_BUFFERS 7 // Maximum vertex buffers (VBO) per mesh -#endif - -// Shader and material limits -#ifndef MAX_SHADER_LOCATIONS - #define MAX_SHADER_LOCATIONS 32 // Maximum number of shader locations supported -#endif -#ifndef MAX_MATERIAL_MAPS - #define MAX_MATERIAL_MAPS 12 // Maximum number of shader maps supported -#endif - -// Projection matrix culling -#ifndef RL_CULL_DISTANCE_NEAR - #define RL_CULL_DISTANCE_NEAR 0.01 // Default near cull distance -#endif -#ifndef RL_CULL_DISTANCE_FAR - #define RL_CULL_DISTANCE_FAR 1000.0 // Default far cull distance -#endif - -// Texture parameters (equivalent to OpenGL defines) -#define RL_TEXTURE_WRAP_S 0x2802 // GL_TEXTURE_WRAP_S -#define RL_TEXTURE_WRAP_T 0x2803 // GL_TEXTURE_WRAP_T -#define RL_TEXTURE_MAG_FILTER 0x2800 // GL_TEXTURE_MAG_FILTER -#define RL_TEXTURE_MIN_FILTER 0x2801 // GL_TEXTURE_MIN_FILTER - -#define RL_TEXTURE_FILTER_NEAREST 0x2600 // GL_NEAREST -#define RL_TEXTURE_FILTER_LINEAR 0x2601 // GL_LINEAR -#define RL_TEXTURE_FILTER_MIP_NEAREST 0x2700 // GL_NEAREST_MIPMAP_NEAREST -#define RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR 0x2702 // GL_NEAREST_MIPMAP_LINEAR -#define RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST 0x2701 // GL_LINEAR_MIPMAP_NEAREST -#define RL_TEXTURE_FILTER_MIP_LINEAR 0x2703 // GL_LINEAR_MIPMAP_LINEAR -#define RL_TEXTURE_FILTER_ANISOTROPIC 0x3000 // Anisotropic filter (custom identifier) - -#define RL_TEXTURE_WRAP_REPEAT 0x2901 // GL_REPEAT -#define RL_TEXTURE_WRAP_CLAMP 0x812F // GL_CLAMP_TO_EDGE -#define RL_TEXTURE_WRAP_MIRROR_REPEAT 0x8370 // GL_MIRRORED_REPEAT -#define RL_TEXTURE_WRAP_MIRROR_CLAMP 0x8742 // GL_MIRROR_CLAMP_EXT - -// Matrix modes (equivalent to OpenGL) -#define RL_MODELVIEW 0x1700 // GL_MODELVIEW -#define RL_PROJECTION 0x1701 // GL_PROJECTION -#define RL_TEXTURE 0x1702 // GL_TEXTURE - -// Primitive assembly draw modes -#define RL_LINES 0x0001 // GL_LINES -#define RL_TRIANGLES 0x0004 // GL_TRIANGLES -#define RL_QUADS 0x0007 // GL_QUADS - -// GL equivalent data types -#define RL_UNSIGNED_BYTE 0x1401 // GL_UNSIGNED_BYTE -#define RL_FLOAT 0x1406 // GL_FLOAT - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -//---------------------------------------------------------------------------------- -typedef enum { OPENGL_11 = 1, OPENGL_21, OPENGL_33, OPENGL_ES_20 } GlVersion; - -typedef enum { - RL_ATTACHMENT_COLOR_CHANNEL0 = 0, - RL_ATTACHMENT_COLOR_CHANNEL1, - RL_ATTACHMENT_COLOR_CHANNEL2, - RL_ATTACHMENT_COLOR_CHANNEL3, - RL_ATTACHMENT_COLOR_CHANNEL4, - RL_ATTACHMENT_COLOR_CHANNEL5, - RL_ATTACHMENT_COLOR_CHANNEL6, - RL_ATTACHMENT_COLOR_CHANNEL7, - RL_ATTACHMENT_DEPTH = 100, - RL_ATTACHMENT_STENCIL = 200, -} FramebufferAttachType; - -typedef enum { - RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0, - RL_ATTACHMENT_CUBEMAP_NEGATIVE_X, - RL_ATTACHMENT_CUBEMAP_POSITIVE_Y, - RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y, - RL_ATTACHMENT_CUBEMAP_POSITIVE_Z, - RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z, - RL_ATTACHMENT_TEXTURE2D = 100, - RL_ATTACHMENT_RENDERBUFFER = 200, -} FramebufferAttachTextureType; - -// Dynamic vertex buffers (position + texcoords + colors + indices arrays) -typedef struct VertexBuffer { - int elementsCount; // Number of elements in the buffer (QUADS) - - int vCounter; // Vertex position counter to process (and draw) from full buffer - int tcCounter; // Vertex texcoord counter to process (and draw) from full buffer - int cCounter; // Vertex color counter to process (and draw) from full buffer - - float *vertices; // Vertex position (XYZ - 3 components per vertex) (shader-location = 0) - float *texcoords; // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) - unsigned char *colors; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) -#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) - unsigned int *indices; // Vertex indices (in case vertex data comes indexed) (6 indices per quad) -#endif -#if defined(GRAPHICS_API_OPENGL_ES2) - unsigned short *indices; // Vertex indices (in case vertex data comes indexed) (6 indices per quad) -#endif - unsigned int vaoId; // OpenGL Vertex Array Object id - unsigned int vboId[4]; // OpenGL Vertex Buffer Objects id (4 types of vertex data) -} VertexBuffer; - -// Draw call type -// NOTE: Only texture changes register a new draw, other state-change-related elements are not -// used at this moment (vaoId, shaderId, matrices), raylib just forces a batch draw call if any -// of those state-change happens (this is done in core module) -typedef struct DrawCall { - int mode; // Drawing mode: LINES, TRIANGLES, QUADS - int vertexCount; // Number of vertex of the draw - int vertexAlignment; // Number of vertex required for index alignment (LINES, TRIANGLES) - //unsigned int vaoId; // Vertex array id to be used on the draw -> Using RLGL.currentBatch->vertexBuffer.vaoId - //unsigned int shaderId; // Shader id to be used on the draw -> Using RLGL.currentShader.id - unsigned int textureId; // Texture id to be used on the draw -> Use to create new draw call if changes - - //Matrix projection; // Projection matrix for this draw -> Using RLGL.projection by default - //Matrix modelview; // Modelview matrix for this draw -> Using RLGL.modelview by default -} DrawCall; - -// RenderBatch type -typedef struct RenderBatch { - int buffersCount; // Number of vertex buffers (multi-buffering support) - int currentBuffer; // Current buffer tracking in case of multi-buffering - VertexBuffer *vertexBuffer; // Dynamic buffer(s) for vertex data - - DrawCall *draws; // Draw calls array, depends on textureId - int drawsCounter; // Draw calls counter - float currentDepth; // Current depth value for next draw -} RenderBatch; - -// Shader attribute data types -typedef enum { - SHADER_ATTRIB_FLOAT = 0, - SHADER_ATTRIB_VEC2, - SHADER_ATTRIB_VEC3, - SHADER_ATTRIB_VEC4 -} ShaderAttributeDataType; - -#if defined(RLGL_STANDALONE) - #ifndef __cplusplus - // Boolean type - typedef enum { false, true } bool; - #endif - - // Color type, RGBA (32bit) - typedef struct Color { - unsigned char r; - unsigned char g; - unsigned char b; - unsigned char a; - } Color; - - // Texture type - // NOTE: Data stored in GPU memory - typedef struct Texture2D { - unsigned int id; // OpenGL texture id - int width; // Texture base width - int height; // Texture base height - int mipmaps; // Mipmap levels, 1 by default - int format; // Data format (PixelFormat) - } Texture2D; - - // Shader type (generic) - typedef struct Shader { - unsigned int id; // Shader program id - int *locs; // Shader locations array (MAX_SHADER_LOCATIONS) - } Shader; - - // TraceLog message types - typedef enum { - LOG_ALL, - LOG_TRACE, - LOG_DEBUG, - LOG_INFO, - LOG_WARNING, - LOG_ERROR, - LOG_FATAL, - LOG_NONE - } TraceLogLevel; - - // Texture formats (support depends on OpenGL version) - typedef enum { - PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha) - PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA, - PIXELFORMAT_UNCOMPRESSED_R5G6B5, // 16 bpp - PIXELFORMAT_UNCOMPRESSED_R8G8B8, // 24 bpp - PIXELFORMAT_UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha) - PIXELFORMAT_UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha) - PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, // 32 bpp - PIXELFORMAT_UNCOMPRESSED_R32, // 32 bpp (1 channel - float) - PIXELFORMAT_UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float) - PIXELFORMAT_UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float) - PIXELFORMAT_COMPRESSED_DXT1_RGB, // 4 bpp (no alpha) - PIXELFORMAT_COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha) - PIXELFORMAT_COMPRESSED_DXT3_RGBA, // 8 bpp - PIXELFORMAT_COMPRESSED_DXT5_RGBA, // 8 bpp - PIXELFORMAT_COMPRESSED_ETC1_RGB, // 4 bpp - PIXELFORMAT_COMPRESSED_ETC2_RGB, // 4 bpp - PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA, // 8 bpp - PIXELFORMAT_COMPRESSED_PVRT_RGB, // 4 bpp - PIXELFORMAT_COMPRESSED_PVRT_RGBA, // 4 bpp - PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA, // 8 bpp - PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA // 2 bpp - } PixelFormat; - - // Texture parameters: filter mode - // NOTE 1: Filtering considers mipmaps if available in the texture - // NOTE 2: Filter is accordingly set for minification and magnification - typedef enum { - TEXTURE_FILTER_POINT = 0, // No filter, just pixel aproximation - TEXTURE_FILTER_BILINEAR, // Linear filtering - TEXTURE_FILTER_TRILINEAR, // Trilinear filtering (linear with mipmaps) - TEXTURE_FILTER_ANISOTROPIC_4X, // Anisotropic filtering 4x - TEXTURE_FILTER_ANISOTROPIC_8X, // Anisotropic filtering 8x - TEXTURE_FILTER_ANISOTROPIC_16X, // Anisotropic filtering 16x - } TextureFilter; - - // Texture parameters: wrap mode - typedef enum { - TEXTURE_WRAP_REPEAT = 0, // Repeats texture in tiled mode - TEXTURE_WRAP_CLAMP, // Clamps texture to edge pixel in tiled mode - TEXTURE_WRAP_MIRROR_REPEAT, // Mirrors and repeats the texture in tiled mode - TEXTURE_WRAP_MIRROR_CLAMP // Mirrors and clamps to border the texture in tiled mode - } TextureWrap; - - // Color blending modes (pre-defined) - typedef enum { - BLEND_ALPHA = 0, // Blend textures considering alpha (default) - BLEND_ADDITIVE, // Blend textures adding colors - BLEND_MULTIPLIED, // Blend textures multiplying colors - BLEND_ADD_COLORS, // Blend textures adding colors (alternative) - BLEND_SUBTRACT_COLORS, // Blend textures subtracting colors (alternative) - BLEND_CUSTOM // Belnd textures using custom src/dst factors (use SetBlendModeCustom()) - } BlendMode; - - // Shader location point type - typedef enum { - SHADER_LOC_VERTEX_POSITION = 0, - SHADER_LOC_VERTEX_TEXCOORD01, - SHADER_LOC_VERTEX_TEXCOORD02, - SHADER_LOC_VERTEX_NORMAL, - SHADER_LOC_VERTEX_TANGENT, - SHADER_LOC_VERTEX_COLOR, - SHADER_LOC_MATRIX_MVP, - SHADER_LOC_MATRIX_MODEL, - SHADER_LOC_MATRIX_VIEW, - SHADER_LOC_MATRIX_NORMAL, - SHADER_LOC_MATRIX_PROJECTION, - SHADER_LOC_VECTOR_VIEW, - SHADER_LOC_COLOR_DIFFUSE, - SHADER_LOC_COLOR_SPECULAR, - SHADER_LOC_COLOR_AMBIENT, - SHADER_LOC_MAP_ALBEDO, // SHADER_LOC_MAP_DIFFUSE - SHADER_LOC_MAP_METALNESS, // SHADER_LOC_MAP_SPECULAR - SHADER_LOC_MAP_NORMAL, - SHADER_LOC_MAP_ROUGHNESS, - SHADER_LOC_MAP_OCCLUSION, - SHADER_LOC_MAP_EMISSION, - SHADER_LOC_MAP_HEIGHT, - SHADER_LOC_MAP_CUBEMAP, - SHADER_LOC_MAP_IRRADIANCE, - SHADER_LOC_MAP_PREFILTER, - SHADER_LOC_MAP_BRDF - } ShaderLocationIndex; - - #define SHADER_LOC_MAP_DIFFUSE SHADER_LOC_MAP_ALBEDO - #define SHADER_LOC_MAP_SPECULAR SHADER_LOC_MAP_METALNESS - - // Shader uniform data types - typedef enum { - SHADER_UNIFORM_FLOAT = 0, - SHADER_UNIFORM_VEC2, - SHADER_UNIFORM_VEC3, - SHADER_UNIFORM_VEC4, - SHADER_UNIFORM_INT, - SHADER_UNIFORM_IVEC2, - SHADER_UNIFORM_IVEC3, - SHADER_UNIFORM_IVEC4, - SHADER_UNIFORM_SAMPLER2D - } ShaderUniformDataType; -#endif - -#if defined(__cplusplus) -extern "C" { // Prevents name mangling of functions -#endif - -//------------------------------------------------------------------------------------ -// Functions Declaration - Matrix operations -//------------------------------------------------------------------------------------ -RLAPI void rlMatrixMode(int mode); // Choose the current matrix to be transformed -RLAPI void rlPushMatrix(void); // Push the current matrix to stack -RLAPI void rlPopMatrix(void); // Pop lattest inserted matrix from stack -RLAPI void rlLoadIdentity(void); // Reset current matrix to identity matrix -RLAPI void rlTranslatef(float x, float y, float z); // Multiply the current matrix by a translation matrix -RLAPI void rlRotatef(float angleDeg, float x, float y, float z); // Multiply the current matrix by a rotation matrix -RLAPI void rlScalef(float x, float y, float z); // Multiply the current matrix by a scaling matrix -RLAPI void rlMultMatrixf(float *matf); // Multiply the current matrix by another matrix -RLAPI void rlFrustum(double left, double right, double bottom, double top, double znear, double zfar); -RLAPI void rlOrtho(double left, double right, double bottom, double top, double znear, double zfar); -RLAPI void rlViewport(int x, int y, int width, int height); // Set the viewport area - -//------------------------------------------------------------------------------------ -// Functions Declaration - Vertex level operations -//------------------------------------------------------------------------------------ -RLAPI void rlBegin(int mode); // Initialize drawing mode (how to organize vertex) -RLAPI void rlEnd(void); // Finish vertex providing -RLAPI void rlVertex2i(int x, int y); // Define one vertex (position) - 2 int -RLAPI void rlVertex2f(float x, float y); // Define one vertex (position) - 2 float -RLAPI void rlVertex3f(float x, float y, float z); // Define one vertex (position) - 3 float -RLAPI void rlTexCoord2f(float x, float y); // Define one vertex (texture coordinate) - 2 float -RLAPI void rlNormal3f(float x, float y, float z); // Define one vertex (normal) - 3 float -RLAPI void rlColor4ub(unsigned char r, unsigned char g, unsigned char b, unsigned char a); // Define one vertex (color) - 4 byte -RLAPI void rlColor3f(float x, float y, float z); // Define one vertex (color) - 3 float -RLAPI void rlColor4f(float x, float y, float z, float w); // Define one vertex (color) - 4 float - -//------------------------------------------------------------------------------------ -// Functions Declaration - OpenGL style functions (common to 1.1, 3.3+, ES2) -// NOTE: This functions are used to completely abstract raylib code from OpenGL layer, -// some of them are direct wrappers over OpenGL calls, some others are custom -//------------------------------------------------------------------------------------ - -// Vertex buffers state -RLAPI bool rlEnableVertexArray(unsigned int vaoId); // Enable vertex array (VAO, if supported) -RLAPI void rlDisableVertexArray(void); // Disable vertex array (VAO, if supported) -RLAPI void rlEnableVertexBuffer(unsigned int id); // Enable vertex buffer (VBO) -RLAPI void rlDisableVertexBuffer(void); // Disable vertex buffer (VBO) -RLAPI void rlEnableVertexBufferElement(unsigned int id);// Enable vertex buffer element (VBO element) -RLAPI void rlDisableVertexBufferElement(void); // Disable vertex buffer element (VBO element) -RLAPI void rlEnableVertexAttribute(unsigned int index); // Enable vertex attribute index -RLAPI void rlDisableVertexAttribute(unsigned int index);// Disable vertex attribute index -#if defined(GRAPHICS_API_OPENGL_11) -RLAPI void rlEnableStatePointer(int vertexAttribType, void *buffer); -RLAPI void rlDisableStatePointer(int vertexAttribType); -#endif - -// Textures state -RLAPI void rlActiveTextureSlot(int slot); // Select and active a texture slot -RLAPI void rlEnableTexture(unsigned int id); // Enable texture -RLAPI void rlDisableTexture(void); // Disable texture -RLAPI void rlEnableTextureCubemap(unsigned int id); // Enable texture cubemap -RLAPI void rlDisableTextureCubemap(void); // Disable texture cubemap -RLAPI void rlTextureParameters(unsigned int id, int param, int value); // Set texture parameters (filter, wrap) - -// Shader state -RLAPI void rlEnableShader(unsigned int id); // Enable shader program -RLAPI void rlDisableShader(void); // Disable shader program - -// Framebuffer state -RLAPI void rlEnableFramebuffer(unsigned int id); // Enable render texture (fbo) -RLAPI void rlDisableFramebuffer(void); // Disable render texture (fbo), return to default framebuffer - -// General render state -RLAPI void rlEnableDepthTest(void); // Enable depth test -RLAPI void rlDisableDepthTest(void); // Disable depth test -RLAPI void rlEnableDepthMask(void); // Enable depth write -RLAPI void rlDisableDepthMask(void); // Disable depth write -RLAPI void rlEnableBackfaceCulling(void); // Enable backface culling -RLAPI void rlDisableBackfaceCulling(void); // Disable backface culling -RLAPI void rlEnableScissorTest(void); // Enable scissor test -RLAPI void rlDisableScissorTest(void); // Disable scissor test -RLAPI void rlScissor(int x, int y, int width, int height); // Scissor test -RLAPI void rlEnableWireMode(void); // Enable wire mode -RLAPI void rlDisableWireMode(void); // Disable wire mode -RLAPI void rlSetLineWidth(float width); // Set the line drawing width -RLAPI float rlGetLineWidth(void); // Get the line drawing width -RLAPI void rlEnableSmoothLines(void); // Enable line aliasing -RLAPI void rlDisableSmoothLines(void); // Disable line aliasing -RLAPI void rlEnableStereoRender(void); // Enable stereo rendering -RLAPI void rlDisableStereoRender(void); // Disable stereo rendering -RLAPI bool rlIsStereoRenderEnabled(void); // Check if stereo render is enabled - -RLAPI void rlClearColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a); // Clear color buffer with color -RLAPI void rlClearScreenBuffers(void); // Clear used screen buffers (color and depth) -RLAPI void rlCheckErrors(void); // Check and log OpenGL error codes -RLAPI void rlSetBlendMode(int mode); // Set blending mode -RLAPI void rlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation); // Set blending mode factor and equation (using OpenGL factors) - -//------------------------------------------------------------------------------------ -// Functions Declaration - rlgl functionality -//------------------------------------------------------------------------------------ -// rlgl initialization functions -RLAPI void rlglInit(int width, int height); // Initialize rlgl (buffers, shaders, textures, states) -RLAPI void rlglClose(void); // De-inititialize rlgl (buffers, shaders, textures) -RLAPI void rlLoadExtensions(void* loader); // Load OpenGL extensions (loader function pointer required) -RLAPI int rlGetVersion(void); // Returns current OpenGL version -RLAPI int rlGetFramebufferWidth(void); // Get default framebuffer width -RLAPI int rlGetFramebufferHeight(void); // Get default framebuffer height - -RLAPI Shader rlGetShaderDefault(void); // Get default shader -RLAPI Texture2D rlGetTextureDefault(void); // Get default texture - -// Render batch management -// NOTE: rlgl provides a default render batch to behave like OpenGL 1.1 immediate mode -// but this render batch API is exposed in case of custom batches are required -RLAPI RenderBatch rlLoadRenderBatch(int numBuffers, int bufferElements); // Load a render batch system -RLAPI void rlUnloadRenderBatch(RenderBatch batch); // Unload render batch system -RLAPI void rlDrawRenderBatch(RenderBatch *batch); // Draw render batch data (Update->Draw->Reset) -RLAPI void rlSetRenderBatchActive(RenderBatch *batch); // Set the active render batch for rlgl (NULL for default internal) -RLAPI void rlDrawRenderBatchActive(void); // Update and draw internal render batch -RLAPI bool rlCheckRenderBatchLimit(int vCount); // Check internal buffer overflow for a given number of vertex -RLAPI void rlSetTexture(unsigned int id); // Set current texture for render batch and check buffers limits - -//------------------------------------------------------------------------------------------------------------------------ - -// Vertex buffers management -RLAPI unsigned int rlLoadVertexArray(void); // Load vertex array (vao) if supported -RLAPI unsigned int rlLoadVertexBuffer(void *buffer, int size, bool dynamic); // Load a vertex buffer attribute -RLAPI unsigned int rlLoadVertexBufferElement(void *buffer, int size, bool dynamic); // Load a new attributes element buffer -RLAPI void rlUpdateVertexBuffer(int bufferId, void *data, int dataSize, int offset); // Update GPU buffer with new data -RLAPI void rlUnloadVertexArray(unsigned int vaoId); -RLAPI void rlUnloadVertexBuffer(unsigned int vboId); -RLAPI void rlSetVertexAttribute(unsigned int index, int compSize, int type, bool normalized, int stride, void *pointer); -RLAPI void rlSetVertexAttributeDivisor(unsigned int index, int divisor); -RLAPI void rlSetVertexAttributeDefault(int locIndex, const void *value, int attribType, int count); // Set vertex attribute default value -RLAPI void rlDrawVertexArray(int offset, int count); -RLAPI void rlDrawVertexArrayElements(int offset, int count, void *buffer); -RLAPI void rlDrawVertexArrayInstanced(int offset, int count, int instances); -RLAPI void rlDrawVertexArrayElementsInstanced(int offset, int count, void *buffer, int instances); - -// Textures management -RLAPI unsigned int rlLoadTexture(void *data, int width, int height, int format, int mipmapCount); // Load texture in GPU -RLAPI unsigned int rlLoadTextureDepth(int width, int height, bool useRenderBuffer); // Load depth texture/renderbuffer (to be attached to fbo) -RLAPI unsigned int rlLoadTextureCubemap(void *data, int size, int format); // Load texture cubemap -RLAPI void rlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void *data); // Update GPU texture with new data -RLAPI void rlGetGlTextureFormats(int format, unsigned int *glInternalFormat, unsigned int *glFormat, unsigned int *glType); // Get OpenGL internal formats -RLAPI void rlUnloadTexture(unsigned int id); // Unload texture from GPU memory -RLAPI void rlGenerateMipmaps(Texture2D *texture); // Generate mipmap data for selected texture -RLAPI void *rlReadTexturePixels(Texture2D texture); // Read texture pixel data -RLAPI unsigned char *rlReadScreenPixels(int width, int height); // Read screen pixel data (color buffer) - -// Framebuffer management (fbo) -RLAPI unsigned int rlLoadFramebuffer(int width, int height); // Load an empty framebuffer -RLAPI void rlFramebufferAttach(unsigned int fboId, unsigned int texId, int attachType, int texType, int mipLevel); // Attach texture/renderbuffer to a framebuffer -RLAPI bool rlFramebufferComplete(unsigned int id); // Verify framebuffer is complete -RLAPI void rlUnloadFramebuffer(unsigned int id); // Delete framebuffer from GPU - -// Shaders management -RLAPI unsigned int rlLoadShaderCode(const char *vsCode, const char *fsCode); // Load shader from code strings -RLAPI unsigned int rlCompileShader(const char *shaderCode, int type); // Compile custom shader and return shader id (type: GL_VERTEX_SHADER, GL_FRAGMENT_SHADER) -RLAPI unsigned int rlLoadShaderProgram(unsigned int vShaderId, unsigned int fShaderId); // Load custom shader program -RLAPI void rlUnloadShaderProgram(unsigned int id); // Unload shader program -RLAPI int rlGetLocationUniform(unsigned int shaderId, const char *uniformName); // Get shader location uniform -RLAPI int rlGetLocationAttrib(unsigned int shaderId, const char *attribName); // Get shader location attribute -RLAPI void rlSetUniform(int locIndex, const void *value, int uniformType, int count); // Set shader value uniform -RLAPI void rlSetUniformMatrix(int locIndex, Matrix mat); // Set shader value matrix -RLAPI void rlSetUniformSampler(int locIndex, unsigned int textureId); // Set shader value sampler -RLAPI void rlSetShader(Shader shader); // Set shader currently active - -// Matrix state management -RLAPI Matrix rlGetMatrixModelview(void); // Get internal modelview matrix -RLAPI Matrix rlGetMatrixProjection(void); // Get internal projection matrix -RLAPI Matrix rlGetMatrixTransform(void); // Get internal accumulated transform matrix -RLAPI Matrix rlGetMatrixProjectionStereo(int eye); // Get internal projection matrix for stereo render (selected eye) -RLAPI Matrix rlGetMatrixViewOffsetStereo(int eye); // Get internal view offset matrix for stereo render (selected eye) -RLAPI void rlSetMatrixProjection(Matrix proj); // Set a custom projection matrix (replaces internal projection matrix) -RLAPI void rlSetMatrixModelview(Matrix view); // Set a custom modelview matrix (replaces internal modelview matrix) -RLAPI void rlSetMatrixProjectionStereo(Matrix right, Matrix left); // Set eyes projection matrices for stereo rendering -RLAPI void rlSetMatrixViewOffsetStereo(Matrix right, Matrix left); // Set eyes view offsets matrices for stereo rendering - -// Quick and dirty cube/quad buffers load->draw->unload -RLAPI void rlLoadDrawCube(void); // Load and draw a cube -RLAPI void rlLoadDrawQuad(void); // Load and draw a quad -#if defined(__cplusplus) -} -#endif - -#endif // RLGL_H - -/*********************************************************************************** -* -* RLGL IMPLEMENTATION -* -************************************************************************************/ - -#if defined(RLGL_IMPLEMENTATION) - -#if !defined(RLGL_STANDALONE) - // Check if config flags have been externally provided on compilation line - #if !defined(EXTERNAL_CONFIG_FLAGS) - #include "config.h" // Defines module configuration flags - #endif - #include "raymath.h" // Required for: Vector3 and Matrix functions -#endif - -#include // Required for: malloc(), free() -#include // Required for: strcmp(), strlen() [Used in rlglInit(), on extensions loading] - -#if defined(GRAPHICS_API_OPENGL_11) - #if defined(__APPLE__) - #include // OpenGL 1.1 library for OSX - #include - #else - // APIENTRY for OpenGL function pointer declarations is required - #ifndef APIENTRY - #if defined(_WIN32) - #define APIENTRY __stdcall - #else - #define APIENTRY - #endif - #endif - // WINGDIAPI definition. Some Windows OpenGL headers need it - #if !defined(WINGDIAPI) && defined(_WIN32) - #define WINGDIAPI __declspec(dllimport) - #endif - - #include // OpenGL 1.1 library - #endif -#endif - -#if defined(GRAPHICS_API_OPENGL_33) - #if defined(__APPLE__) - #include // OpenGL 3 library for OSX - #include // OpenGL 3 extensions library for OSX - #else - #define GLAD_REALLOC RL_REALLOC - #define GLAD_FREE RL_FREE - - #define GLAD_IMPLEMENTATION - #if defined(RLGL_STANDALONE) - #include "glad.h" // GLAD extensions loading library, includes OpenGL headers - #else - #include "external/glad.h" // GLAD extensions loading library, includes OpenGL headers - #endif - #endif -#endif - -#if defined(GRAPHICS_API_OPENGL_ES2) - #define GL_GLEXT_PROTOTYPES - #include // EGL library - #include // OpenGL ES 2.0 library - #include // OpenGL ES 2.0 extensions library - - // It seems OpenGL ES 2.0 instancing entry points are not defined on Raspberry Pi - // provided headers (despite being defined in official Khronos GLES2 headers) - #if defined(PLATFORM_RPI) || defined(PLATFORM_DRM) - typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); - typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); - typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor); - #endif -#endif - -//---------------------------------------------------------------------------------- -// Defines and Macros -//---------------------------------------------------------------------------------- -#ifndef GL_SHADING_LANGUAGE_VERSION - #define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#endif - -#ifndef GL_COMPRESSED_RGB_S3TC_DXT1_EXT - #define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 -#endif -#ifndef GL_COMPRESSED_RGBA_S3TC_DXT1_EXT - #define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 -#endif -#ifndef GL_COMPRESSED_RGBA_S3TC_DXT3_EXT - #define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 -#endif -#ifndef GL_COMPRESSED_RGBA_S3TC_DXT5_EXT - #define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 -#endif -#ifndef GL_ETC1_RGB8_OES - #define GL_ETC1_RGB8_OES 0x8D64 -#endif -#ifndef GL_COMPRESSED_RGB8_ETC2 - #define GL_COMPRESSED_RGB8_ETC2 0x9274 -#endif -#ifndef GL_COMPRESSED_RGBA8_ETC2_EAC - #define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 -#endif -#ifndef GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG - #define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 -#endif -#ifndef GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG - #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 -#endif -#ifndef GL_COMPRESSED_RGBA_ASTC_4x4_KHR - #define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93b0 -#endif -#ifndef GL_COMPRESSED_RGBA_ASTC_8x8_KHR - #define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93b7 -#endif - -#ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT - #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF -#endif -#ifndef GL_TEXTURE_MAX_ANISOTROPY_EXT - #define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE -#endif - -#if defined(GRAPHICS_API_OPENGL_11) - #define GL_UNSIGNED_SHORT_5_6_5 0x8363 - #define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 - #define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#endif - -#if defined(GRAPHICS_API_OPENGL_21) - #define GL_LUMINANCE 0x1909 - #define GL_LUMINANCE_ALPHA 0x190A -#endif - -#if defined(GRAPHICS_API_OPENGL_ES2) - #define glClearDepth glClearDepthf - #define GL_READ_FRAMEBUFFER GL_FRAMEBUFFER - #define GL_DRAW_FRAMEBUFFER GL_FRAMEBUFFER -#endif - -// Default shader vertex attribute names to set location points -#ifndef DEFAULT_SHADER_ATTRIB_NAME_POSITION - #define DEFAULT_SHADER_ATTRIB_NAME_POSITION "vertexPosition" // Binded by default to shader location: 0 -#endif -#ifndef DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD - #define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD "vertexTexCoord" // Binded by default to shader location: 1 -#endif -#ifndef DEFAULT_SHADER_ATTRIB_NAME_NORMAL - #define DEFAULT_SHADER_ATTRIB_NAME_NORMAL "vertexNormal" // Binded by default to shader location: 2 -#endif -#ifndef DEFAULT_SHADER_ATTRIB_NAME_COLOR - #define DEFAULT_SHADER_ATTRIB_NAME_COLOR "vertexColor" // Binded by default to shader location: 3 -#endif -#ifndef DEFAULT_SHADER_ATTRIB_NAME_TANGENT - #define DEFAULT_SHADER_ATTRIB_NAME_TANGENT "vertexTangent" // Binded by default to shader location: 4 -#endif -#ifndef DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 - #define DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2 "vertexTexCoord2" // Binded by default to shader location: 5 -#endif - -//---------------------------------------------------------------------------------- -// Types and Structures Definition -//---------------------------------------------------------------------------------- -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) -typedef struct rlglData { - RenderBatch *currentBatch; // Current render batch - RenderBatch defaultBatch; // Default internal render batch - - struct { - int currentMatrixMode; // Current matrix mode - Matrix *currentMatrix; // Current matrix pointer - Matrix modelview; // Default modelview matrix - Matrix projection; // Default projection matrix - Matrix transform; // Transform matrix to be used with rlTranslate, rlRotate, rlScale - bool transformRequired; // Require transform matrix application to current draw-call vertex (if required) - Matrix stack[MAX_MATRIX_STACK_SIZE];// Matrix stack for push/pop - int stackCounter; // Matrix stack counter - - unsigned int defaultTextureId; // Default texture used on shapes/poly drawing (required by shader) - unsigned int activeTextureId[MAX_BATCH_ACTIVE_TEXTURES]; // Active texture ids to be enabled on batch drawing (0 active by default) - unsigned int defaultVShaderId; // Default vertex shader id (used by default shader program) - unsigned int defaultFShaderId; // Default fragment shader Id (used by default shader program) - Shader defaultShader; // Basic shader, support vertex color and diffuse texture - Shader currentShader; // Shader to be used on rendering (by default, defaultShader) - - bool stereoRender; // Stereo rendering flag - Matrix projectionStereo[2]; // VR stereo rendering eyes projection matrices - Matrix viewOffsetStereo[2]; // VR stereo rendering eyes view offset matrices - - int currentBlendMode; // Blending mode active - int glBlendSrcFactor; // Blending source factor - int glBlendDstFactor; // Blending destination factor - int glBlendEquation; // Blending equation - - int framebufferWidth; // Default framebuffer width - int framebufferHeight; // Default framebuffer height - - } State; // Renderer state - struct { - bool vao; // VAO support (OpenGL ES2 could not support VAO extension) (GL_ARB_vertex_array_object) - bool instancing; // Instancing supported (GL_ANGLE_instanced_arrays, GL_EXT_draw_instanced + GL_EXT_instanced_arrays) - bool texNPOT; // NPOT textures full support (GL_ARB_texture_non_power_of_two, GL_OES_texture_npot) - bool texDepth; // Depth textures supported (GL_ARB_depth_texture, GL_WEBGL_depth_texture, GL_OES_depth_texture) - bool texFloat32; // float textures support (32 bit per channel) (GL_OES_texture_float) - bool texCompDXT; // DDS texture compression support (GL_EXT_texture_compression_s3tc, GL_WEBGL_compressed_texture_s3tc, GL_WEBKIT_WEBGL_compressed_texture_s3tc) - bool texCompETC1; // ETC1 texture compression support (GL_OES_compressed_ETC1_RGB8_texture, GL_WEBGL_compressed_texture_etc1) - bool texCompETC2; // ETC2/EAC texture compression support (GL_ARB_ES3_compatibility) - bool texCompPVRT; // PVR texture compression support (GL_IMG_texture_compression_pvrtc) - bool texCompASTC; // ASTC texture compression support (GL_KHR_texture_compression_astc_hdr, GL_KHR_texture_compression_astc_ldr) - bool texMirrorClamp; // Clamp mirror wrap mode supported (GL_EXT_texture_mirror_clamp) - bool texAnisoFilter; // Anisotropic texture filtering support (GL_EXT_texture_filter_anisotropic) - - float maxAnisotropyLevel; // Maximum anisotropy level supported (minimum is 2.0f) - int maxDepthBits; // Maximum bits for depth component - - } ExtSupported; // Extensions supported flags -} rlglData; -#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2 - -//---------------------------------------------------------------------------------- -// Global Variables Definition -//---------------------------------------------------------------------------------- -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) -static rlglData RLGL = { 0 }; -#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2 - -#if defined(GRAPHICS_API_OPENGL_ES2) -// NOTE: VAO functionality is exposed through extensions (OES) -static PFNGLGENVERTEXARRAYSOESPROC glGenVertexArrays = NULL; -static PFNGLBINDVERTEXARRAYOESPROC glBindVertexArray = NULL; -static PFNGLDELETEVERTEXARRAYSOESPROC glDeleteVertexArrays = NULL; - -// NOTE: Instancing functionality could also be available through extension -static PFNGLDRAWARRAYSINSTANCEDEXTPROC glDrawArraysInstanced = NULL; -static PFNGLDRAWELEMENTSINSTANCEDEXTPROC glDrawElementsInstanced = NULL; -static PFNGLVERTEXATTRIBDIVISOREXTPROC glVertexAttribDivisor = NULL; -#endif - -//---------------------------------------------------------------------------------- -// Module specific Functions Declaration -//---------------------------------------------------------------------------------- -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) -static void rlLoadShaderDefault(void); // Load default shader (RLGL.State.defaultShader) -static void rlUnloadShaderDefault(void); // Unload default shader (RLGL.State.defaultShader) -#if defined(SUPPORT_GL_DETAILS_INFO) -static char *rlGetCompressedFormatName(int format); // Get compressed format official GL identifier name -#endif // SUPPORT_GL_DETAILS_INFO -#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2 -#if defined(GRAPHICS_API_OPENGL_11) -static int rlGenerateMipmapsData(unsigned char *data, int baseWidth, int baseHeight); // Generate mipmaps data on CPU side -static Color *rlGenNextMipmapData(Color *srcData, int srcWidth, int srcHeight); // Generate next mipmap level on CPU side -#endif -static int rlGetPixelDataSize(int width, int height, int format); // Get pixel data size in bytes (image or texture) - -//---------------------------------------------------------------------------------- -// Module Functions Definition - Matrix operations -//---------------------------------------------------------------------------------- - -#if defined(GRAPHICS_API_OPENGL_11) -// Fallback to OpenGL 1.1 function calls -//--------------------------------------- -void rlMatrixMode(int mode) -{ - switch (mode) - { - case RL_PROJECTION: glMatrixMode(GL_PROJECTION); break; - case RL_MODELVIEW: glMatrixMode(GL_MODELVIEW); break; - case RL_TEXTURE: glMatrixMode(GL_TEXTURE); break; - default: break; - } -} - -void rlFrustum(double left, double right, double bottom, double top, double znear, double zfar) -{ - glFrustum(left, right, bottom, top, znear, zfar); -} - -void rlOrtho(double left, double right, double bottom, double top, double znear, double zfar) -{ - glOrtho(left, right, bottom, top, znear, zfar); -} - -void rlPushMatrix(void) { glPushMatrix(); } -void rlPopMatrix(void) { glPopMatrix(); } -void rlLoadIdentity(void) { glLoadIdentity(); } -void rlTranslatef(float x, float y, float z) { glTranslatef(x, y, z); } -void rlRotatef(float angleDeg, float x, float y, float z) { glRotatef(angleDeg, x, y, z); } -void rlScalef(float x, float y, float z) { glScalef(x, y, z); } -void rlMultMatrixf(float *matf) { glMultMatrixf(matf); } -#endif -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) -// Choose the current matrix to be transformed -void rlMatrixMode(int mode) -{ - if (mode == RL_PROJECTION) RLGL.State.currentMatrix = &RLGL.State.projection; - else if (mode == RL_MODELVIEW) RLGL.State.currentMatrix = &RLGL.State.modelview; - //else if (mode == RL_TEXTURE) // Not supported - - RLGL.State.currentMatrixMode = mode; -} - -// Push the current matrix into RLGL.State.stack -void rlPushMatrix(void) -{ - if (RLGL.State.stackCounter >= MAX_MATRIX_STACK_SIZE) TRACELOG(LOG_ERROR, "RLGL: Matrix stack overflow (MAX_MATRIX_STACK_SIZE)"); - - if (RLGL.State.currentMatrixMode == RL_MODELVIEW) - { - RLGL.State.transformRequired = true; - RLGL.State.currentMatrix = &RLGL.State.transform; - } - - RLGL.State.stack[RLGL.State.stackCounter] = *RLGL.State.currentMatrix; - RLGL.State.stackCounter++; -} - -// Pop lattest inserted matrix from RLGL.State.stack -void rlPopMatrix(void) -{ - if (RLGL.State.stackCounter > 0) - { - Matrix mat = RLGL.State.stack[RLGL.State.stackCounter - 1]; - *RLGL.State.currentMatrix = mat; - RLGL.State.stackCounter--; - } - - if ((RLGL.State.stackCounter == 0) && (RLGL.State.currentMatrixMode == RL_MODELVIEW)) - { - RLGL.State.currentMatrix = &RLGL.State.modelview; - RLGL.State.transformRequired = false; - } -} - -// Reset current matrix to identity matrix -void rlLoadIdentity(void) -{ - *RLGL.State.currentMatrix = MatrixIdentity(); -} - -// Multiply the current matrix by a translation matrix -void rlTranslatef(float x, float y, float z) -{ - Matrix matTranslation = MatrixTranslate(x, y, z); - - // NOTE: We transpose matrix with multiplication order - *RLGL.State.currentMatrix = MatrixMultiply(matTranslation, *RLGL.State.currentMatrix); -} - -// Multiply the current matrix by a rotation matrix -void rlRotatef(float angleDeg, float x, float y, float z) -{ - Matrix matRotation = MatrixIdentity(); - - Vector3 axis = Vector3{ x, y, z }; - matRotation = MatrixRotate(Vector3Normalize(axis), angleDeg*DEG2RAD); - - // NOTE: We transpose matrix with multiplication order - *RLGL.State.currentMatrix = MatrixMultiply(matRotation, *RLGL.State.currentMatrix); -} - -// Multiply the current matrix by a scaling matrix -void rlScalef(float x, float y, float z) -{ - Matrix matScale = MatrixScale(x, y, z); - - // NOTE: We transpose matrix with multiplication order - *RLGL.State.currentMatrix = MatrixMultiply(matScale, *RLGL.State.currentMatrix); -} - -// Multiply the current matrix by another matrix -void rlMultMatrixf(float *matf) -{ - // Matrix creation from array - Matrix mat = { matf[0], matf[4], matf[8], matf[12], - matf[1], matf[5], matf[9], matf[13], - matf[2], matf[6], matf[10], matf[14], - matf[3], matf[7], matf[11], matf[15] }; - - *RLGL.State.currentMatrix = MatrixMultiply(*RLGL.State.currentMatrix, mat); -} - -// Multiply the current matrix by a perspective matrix generated by parameters -void rlFrustum(double left, double right, double bottom, double top, double znear, double zfar) -{ - Matrix matPerps = MatrixFrustum(left, right, bottom, top, znear, zfar); - - *RLGL.State.currentMatrix = MatrixMultiply(*RLGL.State.currentMatrix, matPerps); -} - -// Multiply the current matrix by an orthographic matrix generated by parameters -void rlOrtho(double left, double right, double bottom, double top, double znear, double zfar) -{ - // NOTE: If left-right and top-botton values are equal it could create - // a division by zero on MatrixOrtho(), response to it is platform/compiler dependant - Matrix matOrtho = MatrixOrtho(left, right, bottom, top, znear, zfar); - - *RLGL.State.currentMatrix = MatrixMultiply(*RLGL.State.currentMatrix, matOrtho); -} -#endif - -// Set the viewport area (transformation from normalized device coordinates to window coordinates) -void rlViewport(int x, int y, int width, int height) -{ - glViewport(x, y, width, height); -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition - Vertex level operations -//---------------------------------------------------------------------------------- -#if defined(GRAPHICS_API_OPENGL_11) -// Fallback to OpenGL 1.1 function calls -//--------------------------------------- -void rlBegin(int mode) -{ - switch (mode) - { - case RL_LINES: glBegin(GL_LINES); break; - case RL_TRIANGLES: glBegin(GL_TRIANGLES); break; - case RL_QUADS: glBegin(GL_QUADS); break; - default: break; - } -} - -void rlEnd() { glEnd(); } -void rlVertex2i(int x, int y) { glVertex2i(x, y); } -void rlVertex2f(float x, float y) { glVertex2f(x, y); } -void rlVertex3f(float x, float y, float z) { glVertex3f(x, y, z); } -void rlTexCoord2f(float x, float y) { glTexCoord2f(x, y); } -void rlNormal3f(float x, float y, float z) { glNormal3f(x, y, z); } -void rlColor4ub(unsigned char r, unsigned char g, unsigned char b, unsigned char a) { glColor4ub(r, g, b, a); } -void rlColor3f(float x, float y, float z) { glColor3f(x, y, z); } -void rlColor4f(float x, float y, float z, float w) { glColor4f(x, y, z, w); } -#endif -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) -// Initialize drawing mode (how to organize vertex) -void rlBegin(int mode) -{ - // Draw mode can be RL_LINES, RL_TRIANGLES and RL_QUADS - // NOTE: In all three cases, vertex are accumulated over default internal vertex buffer - if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode != mode) - { - if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount > 0) - { - // Make sure current RLGL.currentBatch->draws[i].vertexCount is aligned a multiple of 4, - // that way, following QUADS drawing will keep aligned with index processing - // It implies adding some extra alignment vertex at the end of the draw, - // those vertex are not processed but they are considered as an additional offset - // for the next set of vertex to be drawn - if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode == RL_LINES) RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount < 4)? RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount : RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount%4); - else if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode == RL_TRIANGLES) RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount < 4)? 1 : (4 - (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount%4))); - else RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = 0; - - if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment)) - { - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; - - RLGL.currentBatch->drawsCounter++; - } - } - - if (RLGL.currentBatch->drawsCounter >= DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); - - RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode = mode; - RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount = 0; - RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].textureId = RLGL.State.defaultTextureId; - } -} - -// Finish vertex providing -void rlEnd(void) -{ - // Make sure vertexCount is the same for vertices, texcoords, colors and normals - // NOTE: In OpenGL 1.1, one glColor call can be made for all the subsequent glVertex calls - - // Make sure colors count match vertex count - if (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter != RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter) - { - int addColors = RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter; - - for (int i = 0; i < addColors; i++) - { - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter] = RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter - 4]; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter + 1] = RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter - 3]; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter + 2] = RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter - 2]; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter + 3] = RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter - 1]; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter++; - } - } - - // Make sure texcoords count match vertex count - if (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter != RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter) - { - int addTexCoords = RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter; - - for (int i = 0; i < addTexCoords; i++) - { - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter] = 0.0f; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter + 1] = 0.0f; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter++; - } - } - - // TODO: Make sure normals count match vertex count... if normals support is added in a future... :P - - // NOTE: Depth increment is dependant on rlOrtho(): z-near and z-far values, - // as well as depth buffer bit-depth (16bit or 24bit or 32bit) - // Correct increment formula would be: depthInc = (zfar - znear)/pow(2, bits) - RLGL.currentBatch->currentDepth += (1.0f/20000.0f); - - // Verify internal buffers limits - // NOTE: This check is combined with usage of rlCheckRenderBatchLimit() - if ((RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter) >= - (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementsCount*4 - 4)) - { - // WARNING: If we are between rlPushMatrix() and rlPopMatrix() and we need to force a rlDrawRenderBatch(), - // we need to call rlPopMatrix() before to recover *RLGL.State.currentMatrix (RLGL.State.modelview) for the next forced draw call! - // If we have multiple matrix pushed, it will require "RLGL.State.stackCounter" pops before launching the draw - for (int i = RLGL.State.stackCounter; i >= 0; i--) rlPopMatrix(); - rlDrawRenderBatch(RLGL.currentBatch); - } -} - -// Define one vertex (position) -// NOTE: Vertex position data is the basic information required for drawing -void rlVertex3f(float x, float y, float z) -{ - Vector3 vec = { x, y, z }; - - // Transform provided vector if required - if (RLGL.State.transformRequired) vec = Vector3Transform(vec, RLGL.State.transform); - - // Verify that current vertex buffer elements limit has not been reached - if (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter < (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementsCount*4)) - { - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter] = vec.x; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter + 1] = vec.y; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vertices[3*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter + 2] = vec.z; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter++; - - RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount++; - } - else TRACELOG(LOG_ERROR, "RLGL: Batch elements overflow"); -} - -// Define one vertex (position) -void rlVertex2f(float x, float y) -{ - rlVertex3f(x, y, RLGL.currentBatch->currentDepth); -} - -// Define one vertex (position) -void rlVertex2i(int x, int y) -{ - rlVertex3f((float)x, (float)y, RLGL.currentBatch->currentDepth); -} - -// Define one vertex (texture coordinate) -// NOTE: Texture coordinates are limited to QUADS only -void rlTexCoord2f(float x, float y) -{ - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter] = x; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].texcoords[2*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter + 1] = y; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter++; -} - -// Define one vertex (normal) -// NOTE: Normals limited to TRIANGLES only? -void rlNormal3f(float x, float y, float z) -{ - // TODO: Normals usage... -} - -// Define one vertex (color) -void rlColor4ub(unsigned char x, unsigned char y, unsigned char z, unsigned char w) -{ - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter] = x; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter + 1] = y; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter + 2] = z; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].colors[4*RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter + 3] = w; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter++; -} - -// Define one vertex (color) -void rlColor4f(float r, float g, float b, float a) -{ - rlColor4ub((unsigned char)(r*255), (unsigned char)(g*255), (unsigned char)(b*255), (unsigned char)(a*255)); -} - -// Define one vertex (color) -void rlColor3f(float x, float y, float z) -{ - rlColor4ub((unsigned char)(x*255), (unsigned char)(y*255), (unsigned char)(z*255), 255); -} - -#endif - -//-------------------------------------------------------------------------------------- -// Module Functions Definition - OpenGL style functions (common to 1.1, 3.3+, ES2) -//-------------------------------------------------------------------------------------- - -// Set current texture to use -void rlSetTexture(unsigned int id) -{ - if (id == 0) - { -#if defined(GRAPHICS_API_OPENGL_11) - rlDisableTexture(); -#else - // NOTE: If quads batch limit is reached, we force a draw call and next batch starts - if (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter >= - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementsCount*4) - { - rlDrawRenderBatch(RLGL.currentBatch); - } -#endif - } - else - { -#if defined(GRAPHICS_API_OPENGL_11) - rlEnableTexture(id); -#else - if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].textureId != id) - { - if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount > 0) - { - // Make sure current RLGL.currentBatch->draws[i].vertexCount is aligned a multiple of 4, - // that way, following QUADS drawing will keep aligned with index processing - // It implies adding some extra alignment vertex at the end of the draw, - // those vertex are not processed but they are considered as an additional offset - // for the next set of vertex to be drawn - if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode == RL_LINES) RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount < 4)? RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount : RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount%4); - else if (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].mode == RL_TRIANGLES) RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = ((RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount < 4)? 1 : (4 - (RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount%4))); - else RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment = 0; - - if (!rlCheckRenderBatchLimit(RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment)) - { - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].cCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; - RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].tcCounter += RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexAlignment; - - RLGL.currentBatch->drawsCounter++; - } - } - - if (RLGL.currentBatch->drawsCounter >= DEFAULT_BATCH_DRAWCALLS) rlDrawRenderBatch(RLGL.currentBatch); - - RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].textureId = id; - RLGL.currentBatch->draws[RLGL.currentBatch->drawsCounter - 1].vertexCount = 0; - } -#endif - } -} - -// Select and active a texture slot -void rlActiveTextureSlot(int slot) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glActiveTexture(GL_TEXTURE0 + slot); -#endif -} - -// Enable texture -void rlEnableTexture(unsigned int id) -{ -#if defined(GRAPHICS_API_OPENGL_11) - glEnable(GL_TEXTURE_2D); -#endif - glBindTexture(GL_TEXTURE_2D, id); -} - -// Disable texture -void rlDisableTexture(void) -{ -#if defined(GRAPHICS_API_OPENGL_11) - glDisable(GL_TEXTURE_2D); -#endif - glBindTexture(GL_TEXTURE_2D, 0); -} - -// Enable texture cubemap -void rlEnableTextureCubemap(unsigned int id) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glEnable(GL_TEXTURE_CUBE_MAP); // Core in OpenGL 1.4 - glBindTexture(GL_TEXTURE_CUBE_MAP, id); -#endif -} - -// Disable texture cubemap -void rlDisableTextureCubemap(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glDisable(GL_TEXTURE_CUBE_MAP); - glBindTexture(GL_TEXTURE_CUBE_MAP, 0); -#endif -} - -// Set texture parameters (wrap mode/filter mode) -void rlTextureParameters(unsigned int id, int param, int value) -{ - glBindTexture(GL_TEXTURE_2D, id); - - switch (param) - { - case RL_TEXTURE_WRAP_S: - case RL_TEXTURE_WRAP_T: - { - if (value == RL_TEXTURE_WRAP_MIRROR_CLAMP) - { -#if !defined(GRAPHICS_API_OPENGL_11) - if (RLGL.ExtSupported.texMirrorClamp) glTexParameteri(GL_TEXTURE_2D, param, value); - else TRACELOG(LOG_WARNING, "GL: Clamp mirror wrap mode not supported (GL_MIRROR_CLAMP_EXT)"); -#endif - } - else glTexParameteri(GL_TEXTURE_2D, param, value); - - } break; - case RL_TEXTURE_MAG_FILTER: - case RL_TEXTURE_MIN_FILTER: glTexParameteri(GL_TEXTURE_2D, param, value); break; - case RL_TEXTURE_FILTER_ANISOTROPIC: - { -#if !defined(GRAPHICS_API_OPENGL_11) - if (value <= RLGL.ExtSupported.maxAnisotropyLevel) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, (float)value); - else if (RLGL.ExtSupported.maxAnisotropyLevel > 0.0f) - { - TRACELOG(LOG_WARNING, "GL: Maximum anisotropic filter level supported is %iX", id, RLGL.ExtSupported.maxAnisotropyLevel); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, (float)value); - } - else TRACELOG(LOG_WARNING, "GL: Anisotropic filtering not supported"); -#endif - } break; - default: break; - } - - glBindTexture(GL_TEXTURE_2D, 0); -} - -// Enable shader program -void rlEnableShader(unsigned int id) -{ -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) - glUseProgram(id); -#endif -} - -// Disable shader program -void rlDisableShader(void) -{ -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) - glUseProgram(0); -#endif -} - -// Enable rendering to texture (fbo) -void rlEnableFramebuffer(unsigned int id) -{ -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(SUPPORT_RENDER_TEXTURES_HINT) - glBindFramebuffer(GL_FRAMEBUFFER, id); -#endif -} - -// Disable rendering to texture -void rlDisableFramebuffer(void) -{ -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(SUPPORT_RENDER_TEXTURES_HINT) - glBindFramebuffer(GL_FRAMEBUFFER, 0); -#endif -} - -// Enable depth test -void rlEnableDepthTest(void) { glEnable(GL_DEPTH_TEST); } - -// Disable depth test -void rlDisableDepthTest(void) { glDisable(GL_DEPTH_TEST); } - -// Enable depth write -void rlEnableDepthMask(void) { glDepthMask(GL_TRUE); } - -// Disable depth write -void rlDisableDepthMask(void) { glDepthMask(GL_FALSE); } - -// Enable backface culling -void rlEnableBackfaceCulling(void) { glEnable(GL_CULL_FACE); } - -// Disable backface culling -void rlDisableBackfaceCulling(void) { glDisable(GL_CULL_FACE); } - -// Enable scissor test -void rlEnableScissorTest(void) { glEnable(GL_SCISSOR_TEST); } - -// Disable scissor test -void rlDisableScissorTest(void) { glDisable(GL_SCISSOR_TEST); } - -// Scissor test -void rlScissor(int x, int y, int width, int height) { glScissor(x, y, width, height); } - -// Enable wire mode -void rlEnableWireMode(void) -{ -#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) - // NOTE: glPolygonMode() not available on OpenGL ES - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -#endif -} - -// Disable wire mode -void rlDisableWireMode(void) -{ -#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) - // NOTE: glPolygonMode() not available on OpenGL ES - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -#endif -} -// Set the line drawing width -void rlSetLineWidth(float width) -{ - glLineWidth(width); -} - -// Get the line drawing width -float rlGetLineWidth(void) -{ - float width = 0; - glGetFloatv(GL_LINE_WIDTH, &width); - return width; -} - -// Enable line aliasing -void rlEnableSmoothLines(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_11) - glEnable(GL_LINE_SMOOTH); -#endif -} - -// Disable line aliasing -void rlDisableSmoothLines(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_11) - glDisable(GL_LINE_SMOOTH); -#endif -} - -// Enable stereo rendering -void rlEnableStereoRender(void) -{ -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) - RLGL.State.stereoRender = true; -#endif -} - -// Disable stereo rendering -void rlDisableStereoRender(void) -{ -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) - RLGL.State.stereoRender = false; -#endif -} - -// Check if stereo render is enabled -bool rlIsStereoRenderEnabled(void) -{ -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) - return RLGL.State.stereoRender; -#else - return false; -#endif -} - -// Clear color buffer with color -void rlClearColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a) -{ - // Color values clamp to 0.0f(0) and 1.0f(255) - float cr = (float)r/255; - float cg = (float)g/255; - float cb = (float)b/255; - float ca = (float)a/255; - - glClearColor(cr, cg, cb, ca); -} - -// Clear used screen buffers (color and depth) -void rlClearScreenBuffers(void) -{ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear used buffers: Color and Depth (Depth is used for 3D) - //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // Stencil buffer not used... -} - -// Check and log OpenGL error codes -void rlCheckErrors() -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - int check = 1; - while (check) - { - const GLenum err = glGetError(); - switch (err) - { - case GL_NO_ERROR: check = 0; break; - case 0x0500: TRACELOG(LOG_WARNING, "GL: Error detected: GL_INVALID_ENUM"); break; - case 0x0501: TRACELOG(LOG_WARNING, "GL: Error detected: GL_INVALID_VALUE"); break; - case 0x0502: TRACELOG(LOG_WARNING, "GL: Error detected: GL_INVALID_OPERATION"); break; - case 0x0503: TRACELOG(LOG_WARNING, "GL: Error detected: GL_STACK_OVERFLOW"); break; - case 0x0504: TRACELOG(LOG_WARNING, "GL: Error detected: GL_STACK_UNDERFLOW"); break; - case 0x0505: TRACELOG(LOG_WARNING, "GL: Error detected: GL_OUT_OF_MEMORY"); break; - case 0x0506: TRACELOG(LOG_WARNING, "GL: Error detected: GL_INVALID_FRAMEBUFFER_OPERATION"); break; - default: TRACELOG(LOG_WARNING, "GL: Error detected: Unknown error code: %x", err); break; - } - } -#endif -} - -// Set blend mode -void rlSetBlendMode(int mode) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - if (RLGL.State.currentBlendMode != mode) - { - rlDrawRenderBatch(RLGL.currentBatch); - - switch (mode) - { - case BLEND_ALPHA: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendEquation(GL_FUNC_ADD); break; - case BLEND_ADDITIVE: glBlendFunc(GL_SRC_ALPHA, GL_ONE); glBlendEquation(GL_FUNC_ADD); break; - case BLEND_MULTIPLIED: glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA); glBlendEquation(GL_FUNC_ADD); break; - case BLEND_ADD_COLORS: glBlendFunc(GL_ONE, GL_ONE); glBlendEquation(GL_FUNC_ADD); break; - case BLEND_SUBTRACT_COLORS: glBlendFunc(GL_ONE, GL_ONE); glBlendEquation(GL_FUNC_SUBTRACT); break; - case BLEND_CUSTOM: glBlendFunc(RLGL.State.glBlendSrcFactor, RLGL.State.glBlendDstFactor); glBlendEquation(RLGL.State.glBlendEquation); break; - default: break; - } - - RLGL.State.currentBlendMode = mode; - } -#endif -} - -// Set blending mode factor and equation -void rlSetBlendFactors(int glSrcFactor, int glDstFactor, int glEquation) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - RLGL.State.glBlendSrcFactor = glSrcFactor; - RLGL.State.glBlendDstFactor = glDstFactor; - RLGL.State.glBlendEquation = glEquation; -#endif -} - -//---------------------------------------------------------------------------------- -// Module Functions Definition - rlgl functionality -//---------------------------------------------------------------------------------- - -// Initialize rlgl: OpenGL extensions, default buffers/shaders/textures, OpenGL states -void rlglInit(int width, int height) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - // Init default white texture - unsigned char pixels[4] = { 255, 255, 255, 255 }; // 1 pixel RGBA (4 bytes) - RLGL.State.defaultTextureId = rlLoadTexture(pixels, 1, 1, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8, 1); - - if (RLGL.State.defaultTextureId != 0) TRACELOG(LOG_INFO, "TEXTURE: [ID %i] Default texture loaded successfully", RLGL.State.defaultTextureId); - else TRACELOG(LOG_WARNING, "TEXTURE: Failed to load default texture"); - - // Init default Shader (customized for GL 3.3 and ES2) - rlLoadShaderDefault(); // RLGL.State.defaultShader - RLGL.State.currentShader = RLGL.State.defaultShader; - - // Init default vertex arrays buffers - RLGL.defaultBatch = rlLoadRenderBatch(DEFAULT_BATCH_BUFFERS, DEFAULT_BATCH_BUFFER_ELEMENTS); - RLGL.currentBatch = &RLGL.defaultBatch; - - // Init stack matrices (emulating OpenGL 1.1) - for (int i = 0; i < MAX_MATRIX_STACK_SIZE; i++) RLGL.State.stack[i] = MatrixIdentity(); - - // Init internal matrices - RLGL.State.transform = MatrixIdentity(); - RLGL.State.projection = MatrixIdentity(); - RLGL.State.modelview = MatrixIdentity(); - RLGL.State.currentMatrix = &RLGL.State.modelview; -#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2 - - // Initialize OpenGL default states - //---------------------------------------------------------- - // Init state: Depth test - glDepthFunc(GL_LEQUAL); // Type of depth testing to apply - glDisable(GL_DEPTH_TEST); // Disable depth testing for 2D (only used for 3D) - - // Init state: Blending mode - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // Color blending function (how colors are mixed) - glEnable(GL_BLEND); // Enable color blending (required to work with transparencies) - - // Init state: Culling - // NOTE: All shapes/models triangles are drawn CCW - glCullFace(GL_BACK); // Cull the back face (default) - glFrontFace(GL_CCW); // Front face are defined counter clockwise (default) - glEnable(GL_CULL_FACE); // Enable backface culling - - // Init state: Cubemap seamless -#if defined(GRAPHICS_API_OPENGL_33) - glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); // Seamless cubemaps (not supported on OpenGL ES 2.0) -#endif - -#if defined(GRAPHICS_API_OPENGL_11) - // Init state: Color hints (deprecated in OpenGL 3.0+) - glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Improve quality of color and texture coordinate interpolation - glShadeModel(GL_SMOOTH); // Smooth shading between vertex (vertex colors interpolation) -#endif - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - // Store screen size into global variables - RLGL.State.framebufferWidth = width; - RLGL.State.framebufferHeight = height; - - TRACELOG(LOG_INFO, "RLGL: Default OpenGL state initialized successfully"); - //---------------------------------------------------------- -#endif - - // Init state: Color/Depth buffers clear - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set clear color (black) - glClearDepth(1.0f); // Set clear depth value (default) - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear color and depth buffers (depth buffer required for 3D) -} - -// Vertex Buffer Object deinitialization (memory free) -void rlglClose(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - rlUnloadRenderBatch(RLGL.defaultBatch); - - rlUnloadShaderDefault(); // Unload default shader - - glDeleteTextures(1, &RLGL.State.defaultTextureId); // Unload default texture - TRACELOG(LOG_INFO, "TEXTURE: [ID %i] Default texture unloaded successfully", RLGL.State.defaultTextureId); -#endif -} - -// Load OpenGL extensions -// NOTE: External loader function could be passed as a pointer -void rlLoadExtensions(void *loader) -{ -#if defined(GRAPHICS_API_OPENGL_33) // Also defined for GRAPHICS_API_OPENGL_21 - // NOTE: glad is generated and contains only required OpenGL 3.3 Core extensions (and lower versions) - #if !defined(__APPLE__) - if (!gladLoadGLLoader((GLADloadproc)loader)) TRACELOG(LOG_WARNING, "GLAD: Cannot load OpenGL extensions"); - else TRACELOG(LOG_INFO, "GLAD: OpenGL extensions loaded successfully"); - #endif - - // Get number of supported extensions - GLint numExt = 0; - glGetIntegerv(GL_NUM_EXTENSIONS, &numExt); - TRACELOG(LOG_INFO, "GL: Supported extensions count: %i", numExt); - -#if defined(SUPPORT_GL_DETAILS_INFO) - // Get supported extensions list - // WARNING: glGetStringi() not available on OpenGL 2.1 - char **extList = RL_MALLOC(sizeof(char *)*numExt); - TRACELOG(LOG_INFO, "GL: OpenGL extensions:"); - for (int i = 0; i < numExt; i++) - { - extList[i] = (char *)glGetStringi(GL_EXTENSIONS, i); - TRACELOG(LOG_INFO, " %s", extList[i]); - } - RL_FREE(extList); // Free extensions pointers -#endif - - // Register supported extensions flags - // OpenGL 3.3 extensions supported by default (core) - RLGL.ExtSupported.vao = true; - RLGL.ExtSupported.instancing = true; - RLGL.ExtSupported.texNPOT = true; - RLGL.ExtSupported.texFloat32 = true; - RLGL.ExtSupported.texDepth = true; - RLGL.ExtSupported.maxDepthBits = 32; - RLGL.ExtSupported.texAnisoFilter = true; - RLGL.ExtSupported.texMirrorClamp = true; - #if !defined(__APPLE__) - // NOTE: With GLAD, we can check if an extension is supported using the GLAD_GL_xxx booleans - if (GLAD_GL_EXT_texture_compression_s3tc) RLGL.ExtSupported.texCompDXT = true; // Texture compression: DXT - if (GLAD_GL_ARB_ES3_compatibility) RLGL.ExtSupported.texCompETC2 = true; // Texture compression: ETC2/EAC - #endif -#endif // GRAPHICS_API_OPENGL_33 - -#if defined(GRAPHICS_API_OPENGL_ES2) - // Get supported extensions list - GLint numExt = 0; - const char **extList = RL_MALLOC(512*sizeof(const char *)); // Allocate 512 strings pointers (2 KB) - const char *extensions = (const char *)glGetString(GL_EXTENSIONS); // One big const string - - // NOTE: We have to duplicate string because glGetString() returns a const string - int len = strlen(extensions) + 1; - char *extensionsDup = (char *)RL_CALLOC(len, sizeof(char)); - strcpy(extensionsDup, extensions); - extList[numExt] = extensionsDup; - - for (int i = 0; i < len; i++) - { - if (extensionsDup[i] == ' ') - { - extensionsDup[i] = '\0'; - numExt++; - extList[numExt] = &extensionsDup[i + 1]; - } - } - - TRACELOG(LOG_INFO, "GL: Supported extensions count: %i", numExt); - -#if defined(SUPPORT_GL_DETAILS_INFO) - TRACELOG(LOG_INFO, "GL: OpenGL extensions:"); - for (int i = 0; i < numExt; i++) TRACELOG(LOG_INFO, " %s", extList[i]); -#endif - - // Check required extensions - for (int i = 0; i < numExt; i++) - { - // Check VAO support - // NOTE: Only check on OpenGL ES, OpenGL 3.3 has VAO support as core feature - if (strcmp(extList[i], (const char *)"GL_OES_vertex_array_object") == 0) - { - // The extension is supported by our hardware and driver, try to get related functions pointers - // NOTE: emscripten does not support VAOs natively, it uses emulation and it reduces overall performance... - glGenVertexArrays = (PFNGLGENVERTEXARRAYSOESPROC)eglGetProcAddress("glGenVertexArraysOES"); - glBindVertexArray = (PFNGLBINDVERTEXARRAYOESPROC)eglGetProcAddress("glBindVertexArrayOES"); - glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSOESPROC)eglGetProcAddress("glDeleteVertexArraysOES"); - //glIsVertexArray = (PFNGLISVERTEXARRAYOESPROC)eglGetProcAddress("glIsVertexArrayOES"); // NOTE: Fails in WebGL, omitted - - if ((glGenVertexArrays != NULL) && (glBindVertexArray != NULL) && (glDeleteVertexArrays != NULL)) RLGL.ExtSupported.vao = true; - } - - // Check instanced rendering support - if (strcmp(extList[i], (const char *)"GL_ANGLE_instanced_arrays") == 0) // Web ANGLE - { - glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)eglGetProcAddress("glDrawArraysInstancedANGLE"); - glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)eglGetProcAddress("glDrawElementsInstancedANGLE"); - glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)eglGetProcAddress("glVertexAttribDivisorANGLE"); - - if ((glDrawArraysInstanced != NULL) && (glDrawElementsInstanced != NULL) && (glVertexAttribDivisor != NULL)) RLGL.ExtSupported.instancing = true; - } - else - { - if ((strcmp(extList[i], (const char *)"GL_EXT_draw_instanced") == 0) && // Standard EXT - (strcmp(extList[i], (const char *)"GL_EXT_instanced_arrays") == 0)) - { - glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDEXTPROC)eglGetProcAddress("glDrawArraysInstancedEXT"); - glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDEXTPROC)eglGetProcAddress("glDrawElementsInstancedEXT"); - glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISOREXTPROC)eglGetProcAddress("glVertexAttribDivisorEXT"); - - if ((glDrawArraysInstanced != NULL) && (glDrawElementsInstanced != NULL) && (glVertexAttribDivisor != NULL)) RLGL.ExtSupported.instancing = true; - } - } - - // Check NPOT textures support - // NOTE: Only check on OpenGL ES, OpenGL 3.3 has NPOT textures full support as core feature - if (strcmp(extList[i], (const char *)"GL_OES_texture_npot") == 0) RLGL.ExtSupported.texNPOT = true; - - // Check texture float support - if (strcmp(extList[i], (const char *)"GL_OES_texture_float") == 0) RLGL.ExtSupported.texFloat32 = true; - - // Check depth texture support - if ((strcmp(extList[i], (const char *)"GL_OES_depth_texture") == 0) || - (strcmp(extList[i], (const char *)"GL_WEBGL_depth_texture") == 0)) RLGL.ExtSupported.texDepth = true; - - if (strcmp(extList[i], (const char *)"GL_OES_depth24") == 0) RLGL.ExtSupported.maxDepthBits = 24; - if (strcmp(extList[i], (const char *)"GL_OES_depth32") == 0) RLGL.ExtSupported.maxDepthBits = 32; - - // Check texture compression support: DXT - if ((strcmp(extList[i], (const char *)"GL_EXT_texture_compression_s3tc") == 0) || - (strcmp(extList[i], (const char *)"GL_WEBGL_compressed_texture_s3tc") == 0) || - (strcmp(extList[i], (const char *)"GL_WEBKIT_WEBGL_compressed_texture_s3tc") == 0)) RLGL.ExtSupported.texCompDXT = true; - - // Check texture compression support: ETC1 - if ((strcmp(extList[i], (const char *)"GL_OES_compressed_ETC1_RGB8_texture") == 0) || - (strcmp(extList[i], (const char *)"GL_WEBGL_compressed_texture_etc1") == 0)) RLGL.ExtSupported.texCompETC1 = true; - - // Check texture compression support: ETC2/EAC - if (strcmp(extList[i], (const char *)"GL_ARB_ES3_compatibility") == 0) RLGL.ExtSupported.texCompETC2 = true; - - // Check texture compression support: PVR - if (strcmp(extList[i], (const char *)"GL_IMG_texture_compression_pvrtc") == 0) RLGL.ExtSupported.texCompPVRT = true; - - // Check texture compression support: ASTC - if (strcmp(extList[i], (const char *)"GL_KHR_texture_compression_astc_hdr") == 0) RLGL.ExtSupported.texCompASTC = true; - - // Check anisotropic texture filter support - if (strcmp(extList[i], (const char *)"GL_EXT_texture_filter_anisotropic") == 0) RLGL.ExtSupported.texAnisoFilter = true; - - // Check clamp mirror wrap mode support - if (strcmp(extList[i], (const char *)"GL_EXT_texture_mirror_clamp") == 0) RLGL.ExtSupported.texMirrorClamp = true; - } - - // Free extensions pointers - RL_FREE(extList); - RL_FREE(extensionsDup); // Duplicated string must be deallocated -#endif // GRAPHICS_API_OPENGL_ES2 - - // Check OpenGL information and capabilities - //------------------------------------------------------------------------------ - // Show current OpenGL and GLSL version - TRACELOG(LOG_INFO, "GL: OpenGL device information:"); - TRACELOG(LOG_INFO, " > Vendor: %s", glGetString(GL_VENDOR)); - TRACELOG(LOG_INFO, " > Renderer: %s", glGetString(GL_RENDERER)); - TRACELOG(LOG_INFO, " > Version: %s", glGetString(GL_VERSION)); - TRACELOG(LOG_INFO, " > GLSL: %s", glGetString(GL_SHADING_LANGUAGE_VERSION)); - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - // NOTE: Anisotropy levels capability is an extension - #ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT - #define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF - #endif - glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &RLGL.ExtSupported.maxAnisotropyLevel); - -#if defined(SUPPORT_GL_DETAILS_INFO) - // Show some OpenGL GPU capabilities - TRACELOG(LOG_INFO, "GL: OpenGL capabilities:"); - GLint capability = 0; - glGetIntegerv(GL_MAX_TEXTURE_SIZE, &capability); - TRACELOG(LOG_INFO, " GL_MAX_TEXTURE_SIZE: %i", capability); - glGetIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &capability); - TRACELOG(LOG_INFO, " GL_MAX_CUBE_MAP_TEXTURE_SIZE: %i", capability); - glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &capability); - TRACELOG(LOG_INFO, " GL_MAX_TEXTURE_IMAGE_UNITS: %i", capability); - glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &capability); - TRACELOG(LOG_INFO, " GL_MAX_VERTEX_ATTRIBS: %i", capability); - #if !defined(GRAPHICS_API_OPENGL_ES2) - glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &capability); - TRACELOG(LOG_INFO, " GL_MAX_UNIFORM_BLOCK_SIZE: %i", capability); - glGetIntegerv(GL_MAX_DRAW_BUFFERS, &capability); - TRACELOG(LOG_INFO, " GL_MAX_DRAW_BUFFERS: %i", capability); - if (RLGL.ExtSupported.texAnisoFilter) TRACELOG(LOG_INFO, " GL_MAX_TEXTURE_MAX_ANISOTROPY: %.0f", RLGL.ExtSupported.maxAnisotropyLevel); - #endif - glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &capability); - TRACELOG(LOG_INFO, " GL_NUM_COMPRESSED_TEXTURE_FORMATS: %i", capability); - GLint format[32] = { 0 }; - glGetIntegerv(GL_COMPRESSED_TEXTURE_FORMATS, format); - for (int i = 0; i < capability; i++) TRACELOG(LOG_INFO, " %s", rlGetCompressedFormatName(format[i])); - - /* - // Following capabilities are only supported by OpenGL 4.3 or greater - glGetIntegerv(GL_MAX_VERTEX_ATTRIB_BINDINGS, &capability); - TRACELOG(LOG_INFO, " GL_MAX_VERTEX_ATTRIB_BINDINGS: %i", capability); - glGetIntegerv(GL_MAX_UNIFORM_LOCATIONS, &capability); - TRACELOG(LOG_INFO, " GL_MAX_UNIFORM_LOCATIONS: %i", capability); - */ -#else // SUPPORT_GL_DETAILS_INFO - - // Show some basic info about GL supported features - #if defined(GRAPHICS_API_OPENGL_ES2) - if (RLGL.ExtSupported.vao) TRACELOG(LOG_INFO, "GL: VAO extension detected, VAO functions loaded successfully"); - else TRACELOG(LOG_WARNING, "GL: VAO extension not found, VAO not supported"); - if (RLGL.ExtSupported.texNPOT) TRACELOG(LOG_INFO, "GL: NPOT textures extension detected, full NPOT textures supported"); - else TRACELOG(LOG_WARNING, "GL: NPOT textures extension not found, limited NPOT support (no-mipmaps, no-repeat)"); - #endif - if (RLGL.ExtSupported.texCompDXT) TRACELOG(LOG_INFO, "GL: DXT compressed textures supported"); - if (RLGL.ExtSupported.texCompETC1) TRACELOG(LOG_INFO, "GL: ETC1 compressed textures supported"); - if (RLGL.ExtSupported.texCompETC2) TRACELOG(LOG_INFO, "GL: ETC2/EAC compressed textures supported"); - if (RLGL.ExtSupported.texCompPVRT) TRACELOG(LOG_INFO, "GL: PVRT compressed textures supported"); - if (RLGL.ExtSupported.texCompASTC) TRACELOG(LOG_INFO, "GL: ASTC compressed textures supported"); -#endif // SUPPORT_GL_DETAILS_INFO - -#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2 -} - -// Returns current OpenGL version -int rlGetVersion(void) -{ -#if defined(GRAPHICS_API_OPENGL_11) - return OPENGL_11; -#endif -#if defined(GRAPHICS_API_OPENGL_21) - #if defined(__APPLE__) - return OPENGL_33; // NOTE: Force OpenGL 3.3 on OSX - #else - return OPENGL_21; - #endif -#elif defined(GRAPHICS_API_OPENGL_33) - return OPENGL_33; -#endif -#if defined(GRAPHICS_API_OPENGL_ES2) - return OPENGL_ES_20; -#endif -} - -// Get default framebuffer width -int rlGetFramebufferWidth(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - return RLGL.State.framebufferWidth; -#else - return 0; -#endif -} - -// Get default framebuffer height -int rlGetFramebufferHeight(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - return RLGL.State.framebufferHeight; -#else - return 0; -#endif -} - -// Get default internal shader (simple texture + tint color) -Shader rlGetShaderDefault(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - return RLGL.State.defaultShader; -#else - Shader shader = { 0 }; - return shader; -#endif -} - -// Get default internal texture (white texture) -Texture2D rlGetTextureDefault(void) -{ - Texture2D texture = { 0 }; -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - texture.id = RLGL.State.defaultTextureId; - texture.width = 1; - texture.height = 1; - texture.mipmaps = 1; - texture.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8; -#endif - return texture; -} - -// Render batch management -//------------------------------------------------------------------------------------------------ -// Load render batch -RenderBatch rlLoadRenderBatch(int numBuffers, int bufferElements) -{ - RenderBatch batch = { 0 }; - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - // Initialize CPU (RAM) vertex buffers (position, texcoord, color data and indexes) - //-------------------------------------------------------------------------------------------- - batch.vertexBuffer = (VertexBuffer *)RL_MALLOC(sizeof(VertexBuffer)*numBuffers); - - for (int i = 0; i < numBuffers; i++) - { - batch.vertexBuffer[i].elementsCount = bufferElements; - - batch.vertexBuffer[i].vertices = (float *)RL_MALLOC(bufferElements*3*4*sizeof(float)); // 3 float by vertex, 4 vertex by quad - batch.vertexBuffer[i].texcoords = (float *)RL_MALLOC(bufferElements*2*4*sizeof(float)); // 2 float by texcoord, 4 texcoord by quad - batch.vertexBuffer[i].colors = (unsigned char *)RL_MALLOC(bufferElements*4*4*sizeof(unsigned char)); // 4 float by color, 4 colors by quad -#if defined(GRAPHICS_API_OPENGL_33) - batch.vertexBuffer[i].indices = (unsigned int *)RL_MALLOC(bufferElements*6*sizeof(unsigned int)); // 6 int by quad (indices) -#endif -#if defined(GRAPHICS_API_OPENGL_ES2) - batch.vertexBuffer[i].indices = (unsigned short *)RL_MALLOC(bufferElements*6*sizeof(unsigned short)); // 6 int by quad (indices) -#endif - - for (int j = 0; j < (3*4*bufferElements); j++) batch.vertexBuffer[i].vertices[j] = 0.0f; - for (int j = 0; j < (2*4*bufferElements); j++) batch.vertexBuffer[i].texcoords[j] = 0.0f; - for (int j = 0; j < (4*4*bufferElements); j++) batch.vertexBuffer[i].colors[j] = 0; - - int k = 0; - - // Indices can be initialized right now - for (int j = 0; j < (6*bufferElements); j += 6) - { - batch.vertexBuffer[i].indices[j] = 4*k; - batch.vertexBuffer[i].indices[j + 1] = 4*k + 1; - batch.vertexBuffer[i].indices[j + 2] = 4*k + 2; - batch.vertexBuffer[i].indices[j + 3] = 4*k; - batch.vertexBuffer[i].indices[j + 4] = 4*k + 2; - batch.vertexBuffer[i].indices[j + 5] = 4*k + 3; - - k++; - } - - batch.vertexBuffer[i].vCounter = 0; - batch.vertexBuffer[i].tcCounter = 0; - batch.vertexBuffer[i].cCounter = 0; - } - - TRACELOG(LOG_INFO, "RLGL: Render batch vertex buffers loaded successfully in RAM (CPU)"); - //-------------------------------------------------------------------------------------------- - - // Upload to GPU (VRAM) vertex data and initialize VAOs/VBOs - //-------------------------------------------------------------------------------------------- - for (int i = 0; i < numBuffers; i++) - { - if (RLGL.ExtSupported.vao) - { - // Initialize Quads VAO - glGenVertexArrays(1, &batch.vertexBuffer[i].vaoId); - glBindVertexArray(batch.vertexBuffer[i].vaoId); - } - - // Quads - Vertex buffers binding and attributes enable - // Vertex position buffer (shader-location = 0) - glGenBuffers(1, &batch.vertexBuffer[i].vboId[0]); - glBindBuffer(GL_ARRAY_BUFFER, batch.vertexBuffer[i].vboId[0]); - glBufferData(GL_ARRAY_BUFFER, bufferElements*3*4*sizeof(float), batch.vertexBuffer[i].vertices, GL_DYNAMIC_DRAW); - glEnableVertexAttribArray(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_POSITION]); - glVertexAttribPointer(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_POSITION], 3, GL_FLOAT, 0, 0, 0); - - // Vertex texcoord buffer (shader-location = 1) - glGenBuffers(1, &batch.vertexBuffer[i].vboId[1]); - glBindBuffer(GL_ARRAY_BUFFER, batch.vertexBuffer[i].vboId[1]); - glBufferData(GL_ARRAY_BUFFER, bufferElements*2*4*sizeof(float), batch.vertexBuffer[i].texcoords, GL_DYNAMIC_DRAW); - glEnableVertexAttribArray(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_TEXCOORD01]); - glVertexAttribPointer(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_TEXCOORD01], 2, GL_FLOAT, 0, 0, 0); - - // Vertex color buffer (shader-location = 3) - glGenBuffers(1, &batch.vertexBuffer[i].vboId[2]); - glBindBuffer(GL_ARRAY_BUFFER, batch.vertexBuffer[i].vboId[2]); - glBufferData(GL_ARRAY_BUFFER, bufferElements*4*4*sizeof(unsigned char), batch.vertexBuffer[i].colors, GL_DYNAMIC_DRAW); - glEnableVertexAttribArray(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_COLOR]); - glVertexAttribPointer(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_COLOR], 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, 0); - - // Fill index buffer - glGenBuffers(1, &batch.vertexBuffer[i].vboId[3]); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, batch.vertexBuffer[i].vboId[3]); -#if defined(GRAPHICS_API_OPENGL_33) - glBufferData(GL_ELEMENT_ARRAY_BUFFER, bufferElements*6*sizeof(int), batch.vertexBuffer[i].indices, GL_STATIC_DRAW); -#endif -#if defined(GRAPHICS_API_OPENGL_ES2) - glBufferData(GL_ELEMENT_ARRAY_BUFFER, bufferElements*6*sizeof(short), batch.vertexBuffer[i].indices, GL_STATIC_DRAW); -#endif - } - - TRACELOG(LOG_INFO, "RLGL: Render batch vertex buffers loaded successfully in VRAM (GPU)"); - - // Unbind the current VAO - if (RLGL.ExtSupported.vao) glBindVertexArray(0); - //-------------------------------------------------------------------------------------------- - - // Init draw calls tracking system - //-------------------------------------------------------------------------------------------- - batch.draws = (DrawCall *)RL_MALLOC(DEFAULT_BATCH_DRAWCALLS*sizeof(DrawCall)); - - for (int i = 0; i < DEFAULT_BATCH_DRAWCALLS; i++) - { - batch.draws[i].mode = RL_QUADS; - batch.draws[i].vertexCount = 0; - batch.draws[i].vertexAlignment = 0; - //batch.draws[i].vaoId = 0; - //batch.draws[i].shaderId = 0; - batch.draws[i].textureId = RLGL.State.defaultTextureId; - //batch.draws[i].RLGL.State.projection = MatrixIdentity(); - //batch.draws[i].RLGL.State.modelview = MatrixIdentity(); - } - - batch.buffersCount = numBuffers; // Record buffer count - batch.drawsCounter = 1; // Reset draws counter - batch.currentDepth = -1.0f; // Reset depth value - //-------------------------------------------------------------------------------------------- -#endif - - return batch; -} - -// Unload default internal buffers vertex data from CPU and GPU -void rlUnloadRenderBatch(RenderBatch batch) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - // Unbind everything - if (RLGL.ExtSupported.vao) glBindVertexArray(0); - glDisableVertexAttribArray(0); - glDisableVertexAttribArray(1); - glDisableVertexAttribArray(2); - glDisableVertexAttribArray(3); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - // Unload all vertex buffers data - for (int i = 0; i < batch.buffersCount; i++) - { - // Delete VBOs from GPU (VRAM) - glDeleteBuffers(1, &batch.vertexBuffer[i].vboId[0]); - glDeleteBuffers(1, &batch.vertexBuffer[i].vboId[1]); - glDeleteBuffers(1, &batch.vertexBuffer[i].vboId[2]); - glDeleteBuffers(1, &batch.vertexBuffer[i].vboId[3]); - - // Delete VAOs from GPU (VRAM) - if (RLGL.ExtSupported.vao) glDeleteVertexArrays(1, &batch.vertexBuffer[i].vaoId); - - // Free vertex arrays memory from CPU (RAM) - RL_FREE(batch.vertexBuffer[i].vertices); - RL_FREE(batch.vertexBuffer[i].texcoords); - RL_FREE(batch.vertexBuffer[i].colors); - RL_FREE(batch.vertexBuffer[i].indices); - } - - // Unload arrays - RL_FREE(batch.vertexBuffer); - RL_FREE(batch.draws); -#endif -} - -// Draw render batch -// NOTE: We require a pointer to reset batch and increase current buffer (multi-buffer) -void rlDrawRenderBatch(RenderBatch *batch) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - // Update batch vertex buffers - //------------------------------------------------------------------------------------------------------------ - // NOTE: If there is not vertex data, buffers doesn't need to be updated (vertexCount > 0) - // TODO: If no data changed on the CPU arrays --> No need to re-update GPU arrays (change flag required) - if (batch->vertexBuffer[batch->currentBuffer].vCounter > 0) - { - // Activate elements VAO - if (RLGL.ExtSupported.vao) glBindVertexArray(batch->vertexBuffer[batch->currentBuffer].vaoId); - - // Vertex positions buffer - glBindBuffer(GL_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[0]); - glBufferSubData(GL_ARRAY_BUFFER, 0, batch->vertexBuffer[batch->currentBuffer].vCounter*3*sizeof(float), batch->vertexBuffer[batch->currentBuffer].vertices); - //glBufferData(GL_ARRAY_BUFFER, sizeof(float)*3*4*batch->vertexBuffer[batch->currentBuffer].elementsCount, batch->vertexBuffer[batch->currentBuffer].vertices, GL_DYNAMIC_DRAW); // Update all buffer - - // Texture coordinates buffer - glBindBuffer(GL_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[1]); - glBufferSubData(GL_ARRAY_BUFFER, 0, batch->vertexBuffer[batch->currentBuffer].vCounter*2*sizeof(float), batch->vertexBuffer[batch->currentBuffer].texcoords); - //glBufferData(GL_ARRAY_BUFFER, sizeof(float)*2*4*batch->vertexBuffer[batch->currentBuffer].elementsCount, batch->vertexBuffer[batch->currentBuffer].texcoords, GL_DYNAMIC_DRAW); // Update all buffer - - // Colors buffer - glBindBuffer(GL_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[2]); - glBufferSubData(GL_ARRAY_BUFFER, 0, batch->vertexBuffer[batch->currentBuffer].vCounter*4*sizeof(unsigned char), batch->vertexBuffer[batch->currentBuffer].colors); - //glBufferData(GL_ARRAY_BUFFER, sizeof(float)*4*4*batch->vertexBuffer[batch->currentBuffer].elementsCount, batch->vertexBuffer[batch->currentBuffer].colors, GL_DYNAMIC_DRAW); // Update all buffer - - // NOTE: glMapBuffer() causes sync issue. - // If GPU is working with this buffer, glMapBuffer() will wait(stall) until GPU to finish its job. - // To avoid waiting (idle), you can call first glBufferData() with NULL pointer before glMapBuffer(). - // If you do that, the previous data in PBO will be discarded and glMapBuffer() returns a new - // allocated pointer immediately even if GPU is still working with the previous data. - - // Another option: map the buffer object into client's memory - // Probably this code could be moved somewhere else... - // batch->vertexBuffer[batch->currentBuffer].vertices = (float *)glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE); - // if (batch->vertexBuffer[batch->currentBuffer].vertices) - // { - // Update vertex data - // } - // glUnmapBuffer(GL_ARRAY_BUFFER); - - // Unbind the current VAO - if (RLGL.ExtSupported.vao) glBindVertexArray(0); - } - //------------------------------------------------------------------------------------------------------------ - - // Draw batch vertex buffers (considering VR stereo if required) - //------------------------------------------------------------------------------------------------------------ - Matrix matProjection = RLGL.State.projection; - Matrix matModelView = RLGL.State.modelview; - - int eyesCount = 1; - if (RLGL.State.stereoRender) eyesCount = 2; - - for (int eye = 0; eye < eyesCount; eye++) - { - if (eyesCount == 2) - { - // Setup current eye viewport (half screen width) - rlViewport(eye*RLGL.State.framebufferWidth/2, 0, RLGL.State.framebufferWidth/2, RLGL.State.framebufferHeight); - - // Set current eye view offset to modelview matrix - rlSetMatrixModelview(MatrixMultiply(matModelView, RLGL.State.viewOffsetStereo[eye])); - // Set current eye projection matrix - rlSetMatrixProjection(RLGL.State.projectionStereo[eye]); - } - - // Draw buffers - if (batch->vertexBuffer[batch->currentBuffer].vCounter > 0) - { - // Set current shader and upload current MVP matrix - glUseProgram(RLGL.State.currentShader.id); - - // Create modelview-projection matrix and upload to shader - Matrix matMVP = MatrixMultiply(RLGL.State.modelview, RLGL.State.projection); - glUniformMatrix4fv(RLGL.State.currentShader.locs[SHADER_LOC_MATRIX_MVP], 1, false, MatrixToFloat(matMVP)); - - if (RLGL.ExtSupported.vao) glBindVertexArray(batch->vertexBuffer[batch->currentBuffer].vaoId); - else - { - // Bind vertex attrib: position (shader-location = 0) - glBindBuffer(GL_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[0]); - glVertexAttribPointer(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_POSITION], 3, GL_FLOAT, 0, 0, 0); - glEnableVertexAttribArray(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_POSITION]); - - // Bind vertex attrib: texcoord (shader-location = 1) - glBindBuffer(GL_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[1]); - glVertexAttribPointer(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_TEXCOORD01], 2, GL_FLOAT, 0, 0, 0); - glEnableVertexAttribArray(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_TEXCOORD01]); - - // Bind vertex attrib: color (shader-location = 3) - glBindBuffer(GL_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[2]); - glVertexAttribPointer(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_COLOR], 4, GL_UNSIGNED_BYTE, GL_TRUE, 0, 0); - glEnableVertexAttribArray(RLGL.State.currentShader.locs[SHADER_LOC_VERTEX_COLOR]); - - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, batch->vertexBuffer[batch->currentBuffer].vboId[3]); - } - - // Setup some default shader values - glUniform4f(RLGL.State.currentShader.locs[SHADER_LOC_COLOR_DIFFUSE], 1.0f, 1.0f, 1.0f, 1.0f); - glUniform1i(RLGL.State.currentShader.locs[SHADER_LOC_MAP_DIFFUSE], 0); // Active default sampler2D: texture0 - - // Activate additional sampler textures - // Those additional textures will be common for all draw calls of the batch - for (int i = 0; i < MAX_BATCH_ACTIVE_TEXTURES; i++) - { - if (RLGL.State.activeTextureId[i] > 0) - { - glActiveTexture(GL_TEXTURE0 + 1 + i); - glBindTexture(GL_TEXTURE_2D, RLGL.State.activeTextureId[i]); - } - } - - // Activate default sampler2D texture0 (one texture is always active for default batch shader) - // NOTE: Batch system accumulates calls by texture0 changes, additional textures are enabled for all the draw calls - glActiveTexture(GL_TEXTURE0); - - for (int i = 0, vertexOffset = 0; i < batch->drawsCounter; i++) - { - // Bind current draw call texture, activated as GL_TEXTURE0 and binded to sampler2D texture0 by default - glBindTexture(GL_TEXTURE_2D, batch->draws[i].textureId); - - if ((batch->draws[i].mode == RL_LINES) || (batch->draws[i].mode == RL_TRIANGLES)) glDrawArrays(batch->draws[i].mode, vertexOffset, batch->draws[i].vertexCount); - else - { -#if defined(GRAPHICS_API_OPENGL_33) - // We need to define the number of indices to be processed: quadsCount*6 - // NOTE: The final parameter tells the GPU the offset in bytes from the - // start of the index buffer to the location of the first index to process - glDrawElements(GL_TRIANGLES, batch->draws[i].vertexCount/4*6, GL_UNSIGNED_INT, (GLvoid *)(vertexOffset/4*6*sizeof(GLuint))); -#endif -#if defined(GRAPHICS_API_OPENGL_ES2) - glDrawElements(GL_TRIANGLES, batch->draws[i].vertexCount/4*6, GL_UNSIGNED_SHORT, (GLvoid *)(vertexOffset/4*6*sizeof(GLushort))); -#endif - } - - vertexOffset += (batch->draws[i].vertexCount + batch->draws[i].vertexAlignment); - } - - if (!RLGL.ExtSupported.vao) - { - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - } - - glBindTexture(GL_TEXTURE_2D, 0); // Unbind textures - } - - if (RLGL.ExtSupported.vao) glBindVertexArray(0); // Unbind VAO - - glUseProgram(0); // Unbind shader program - } - //------------------------------------------------------------------------------------------------------------ - - // Reset batch buffers - //------------------------------------------------------------------------------------------------------------ - // Reset vertex counters for next frame - batch->vertexBuffer[batch->currentBuffer].vCounter = 0; - batch->vertexBuffer[batch->currentBuffer].tcCounter = 0; - batch->vertexBuffer[batch->currentBuffer].cCounter = 0; - - // Reset depth for next draw - batch->currentDepth = -1.0f; - - // Restore projection/modelview matrices - RLGL.State.projection = matProjection; - RLGL.State.modelview = matModelView; - - // Reset RLGL.currentBatch->draws array - for (int i = 0; i < DEFAULT_BATCH_DRAWCALLS; i++) - { - batch->draws[i].mode = RL_QUADS; - batch->draws[i].vertexCount = 0; - batch->draws[i].textureId = RLGL.State.defaultTextureId; - } - - // Reset active texture units for next batch - for (int i = 0; i < MAX_BATCH_ACTIVE_TEXTURES; i++) RLGL.State.activeTextureId[i] = 0; - - // Reset draws counter to one draw for the batch - batch->drawsCounter = 1; - //------------------------------------------------------------------------------------------------------------ - - // Change to next buffer in the list (in case of multi-buffering) - batch->currentBuffer++; - if (batch->currentBuffer >= batch->buffersCount) batch->currentBuffer = 0; -#endif -} - -// Set the active render batch for rlgl -void rlSetRenderBatchActive(RenderBatch *batch) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - rlDrawRenderBatch(RLGL.currentBatch); - - if (batch != NULL) RLGL.currentBatch = batch; - else RLGL.currentBatch = &RLGL.defaultBatch; -#endif -} - -// Update and draw internal render batch -void rlDrawRenderBatchActive(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - rlDrawRenderBatch(RLGL.currentBatch); // NOTE: Stereo rendering is checked inside -#endif -} - -// Check internal buffer overflow for a given number of vertex -// and force a RenderBatch draw call if required -bool rlCheckRenderBatchLimit(int vCount) -{ - bool overflow = false; - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - if ((RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].vCounter + vCount) >= - (RLGL.currentBatch->vertexBuffer[RLGL.currentBatch->currentBuffer].elementsCount*4)) - { - overflow = true; - rlDrawRenderBatch(RLGL.currentBatch); // NOTE: Stereo rendering is checked inside - } -#endif - - return overflow; -} - -// Textures data management -//----------------------------------------------------------------------------------------- -// Convert image data to OpenGL texture (returns OpenGL valid Id) -unsigned int rlLoadTexture(void *data, int width, int height, int format, int mipmapCount) -{ - glBindTexture(GL_TEXTURE_2D, 0); // Free any old binding - - unsigned int id = 0; - - // Check texture format support by OpenGL 1.1 (compressed textures not supported) -#if defined(GRAPHICS_API_OPENGL_11) - if (format >= PIXELFORMAT_COMPRESSED_DXT1_RGB) - { - TRACELOG(LOG_WARNING, "GL: OpenGL 1.1 does not support GPU compressed texture formats"); - return id; - } -#else - if ((!RLGL.ExtSupported.texCompDXT) && ((format == PIXELFORMAT_COMPRESSED_DXT1_RGB) || (format == PIXELFORMAT_COMPRESSED_DXT1_RGBA) || - (format == PIXELFORMAT_COMPRESSED_DXT3_RGBA) || (format == PIXELFORMAT_COMPRESSED_DXT5_RGBA))) - { - TRACELOG(LOG_WARNING, "GL: DXT compressed texture format not supported"); - return id; - } -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - if ((!RLGL.ExtSupported.texCompETC1) && (format == PIXELFORMAT_COMPRESSED_ETC1_RGB)) - { - TRACELOG(LOG_WARNING, "GL: ETC1 compressed texture format not supported"); - return id; - } - - if ((!RLGL.ExtSupported.texCompETC2) && ((format == PIXELFORMAT_COMPRESSED_ETC2_RGB) || (format == PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA))) - { - TRACELOG(LOG_WARNING, "GL: ETC2 compressed texture format not supported"); - return id; - } - - if ((!RLGL.ExtSupported.texCompPVRT) && ((format == PIXELFORMAT_COMPRESSED_PVRT_RGB) || (format == PIXELFORMAT_COMPRESSED_PVRT_RGBA))) - { - TRACELOG(LOG_WARNING, "GL: PVRT compressed texture format not supported"); - return id; - } - - if ((!RLGL.ExtSupported.texCompASTC) && ((format == PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA) || (format == PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA))) - { - TRACELOG(LOG_WARNING, "GL: ASTC compressed texture format not supported"); - return id; - } -#endif -#endif // GRAPHICS_API_OPENGL_11 - - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - glGenTextures(1, &id); // Generate texture id - - glBindTexture(GL_TEXTURE_2D, id); - - int mipWidth = width; - int mipHeight = height; - int mipOffset = 0; // Mipmap data offset - - // Load the different mipmap levels - for (int i = 0; i < mipmapCount; i++) - { - unsigned int mipSize = rlGetPixelDataSize(mipWidth, mipHeight, format); - - unsigned int glInternalFormat, glFormat, glType; - rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType); - - TRACELOGD("TEXTURE: Load mipmap level %i (%i x %i), size: %i, offset: %i", i, mipWidth, mipHeight, mipSize, mipOffset); - - if (glInternalFormat != -1) - { - if (format < PIXELFORMAT_COMPRESSED_DXT1_RGB) glTexImage2D(GL_TEXTURE_2D, i, glInternalFormat, mipWidth, mipHeight, 0, glFormat, glType, (unsigned char *)data + mipOffset); -#if !defined(GRAPHICS_API_OPENGL_11) - else glCompressedTexImage2D(GL_TEXTURE_2D, i, glInternalFormat, mipWidth, mipHeight, 0, mipSize, (unsigned char *)data + mipOffset); -#endif - -#if defined(GRAPHICS_API_OPENGL_33) - if (format == PIXELFORMAT_UNCOMPRESSED_GRAYSCALE) - { - GLint swizzleMask[] = { GL_RED, GL_RED, GL_RED, GL_ONE }; - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } - else if (format == PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA) - { -#if defined(GRAPHICS_API_OPENGL_21) - GLint swizzleMask[] = { GL_RED, GL_RED, GL_RED, GL_ALPHA }; -#elif defined(GRAPHICS_API_OPENGL_33) - GLint swizzleMask[] = { GL_RED, GL_RED, GL_RED, GL_GREEN }; -#endif - glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } -#endif - } - - mipWidth /= 2; - mipHeight /= 2; - mipOffset += mipSize; - - // Security check for NPOT textures - if (mipWidth < 1) mipWidth = 1; - if (mipHeight < 1) mipHeight = 1; - } - - // Texture parameters configuration - // NOTE: glTexParameteri does NOT affect texture uploading, just the way it's used -#if defined(GRAPHICS_API_OPENGL_ES2) - // NOTE: OpenGL ES 2.0 with no GL_OES_texture_npot support (i.e. WebGL) has limited NPOT support, so CLAMP_TO_EDGE must be used - if (RLGL.ExtSupported.texNPOT) - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // Set texture to repeat on x-axis - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // Set texture to repeat on y-axis - } - else - { - // NOTE: If using negative texture coordinates (LoadOBJ()), it does not work! - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); // Set texture to clamp on x-axis - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); // Set texture to clamp on y-axis - } -#else - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // Set texture to repeat on x-axis - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // Set texture to repeat on y-axis -#endif - - // Magnification and minification filters - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // Alternative: GL_LINEAR - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); // Alternative: GL_LINEAR - -#if defined(GRAPHICS_API_OPENGL_33) - if (mipmapCount > 1) - { - // Activate Trilinear filtering if mipmaps are available - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); - } -#endif - - // At this point we have the texture loaded in GPU and texture parameters configured - - // NOTE: If mipmaps were not in data, they are not generated automatically - - // Unbind current texture - glBindTexture(GL_TEXTURE_2D, 0); - - if (id > 0) TRACELOG(LOG_INFO, "TEXTURE: [ID %i] Texture loaded successfully (%ix%i - %i mipmaps)", id, width, height, mipmapCount); - else TRACELOG(LOG_WARNING, "TEXTURE: Failed to load texture"); - - return id; -} - -// Load depth texture/renderbuffer (to be attached to fbo) -// WARNING: OpenGL ES 2.0 requires GL_OES_depth_texture/WEBGL_depth_texture extensions -unsigned int rlLoadTextureDepth(int width, int height, bool useRenderBuffer) -{ - unsigned int id = 0; - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - // In case depth textures not supported, we force renderbuffer usage - if (!RLGL.ExtSupported.texDepth) useRenderBuffer = true; - - // NOTE: We let the implementation to choose the best bit-depth - // Possible formats: GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT32 and GL_DEPTH_COMPONENT32F - unsigned int glInternalFormat = GL_DEPTH_COMPONENT; - -#if defined(GRAPHICS_API_OPENGL_ES2) - if (RLGL.ExtSupported.maxDepthBits == 32) glInternalFormat = GL_DEPTH_COMPONENT32_OES; - else if (RLGL.ExtSupported.maxDepthBits == 24) glInternalFormat = GL_DEPTH_COMPONENT24_OES; - else glInternalFormat = GL_DEPTH_COMPONENT16; -#endif - - if (!useRenderBuffer && RLGL.ExtSupported.texDepth) - { - glGenTextures(1, &id); - glBindTexture(GL_TEXTURE_2D, id); - glTexImage2D(GL_TEXTURE_2D, 0, glInternalFormat, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL); - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - - glBindTexture(GL_TEXTURE_2D, 0); - - TRACELOG(LOG_INFO, "TEXTURE: Depth texture loaded successfully"); - } - else - { - // Create the renderbuffer that will serve as the depth attachment for the framebuffer - // NOTE: A renderbuffer is simpler than a texture and could offer better performance on embedded devices - glGenRenderbuffers(1, &id); - glBindRenderbuffer(GL_RENDERBUFFER, id); - glRenderbufferStorage(GL_RENDERBUFFER, glInternalFormat, width, height); - - glBindRenderbuffer(GL_RENDERBUFFER, 0); - - TRACELOG(LOG_INFO, "TEXTURE: [ID %i] Depth renderbuffer loaded successfully (%i bits)", id, (RLGL.ExtSupported.maxDepthBits >= 24)? RLGL.ExtSupported.maxDepthBits : 16); - } -#endif - - return id; -} - -// Load texture cubemap -// NOTE: Cubemap data is expected to be 6 images in a single data array (one after the other), -// expected the following convention: +X, -X, +Y, -Y, +Z, -Z -unsigned int rlLoadTextureCubemap(void *data, int size, int format) -{ - unsigned int id = 0; - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - unsigned int dataSize = rlGetPixelDataSize(size, size, format); - - glGenTextures(1, &id); - glBindTexture(GL_TEXTURE_CUBE_MAP, id); - - unsigned int glInternalFormat, glFormat, glType; - rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType); - - if (glInternalFormat != -1) - { - // Load cubemap faces - for (unsigned int i = 0; i < 6; i++) - { - if (data == NULL) - { - if (format < PIXELFORMAT_COMPRESSED_DXT1_RGB) - { - if (format == PIXELFORMAT_UNCOMPRESSED_R32G32B32) - { - // Instead of using a sized internal texture format (GL_RGB16F, GL_RGB32F), we let the driver to choose the better format for us (GL_RGB) - if (RLGL.ExtSupported.texFloat32) glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, size, size, 0, GL_RGB, GL_FLOAT, NULL); - else TRACELOG(LOG_WARNING, "TEXTURES: Cubemap requested format not supported"); - } - else if ((format == PIXELFORMAT_UNCOMPRESSED_R32) || (format == PIXELFORMAT_UNCOMPRESSED_R32G32B32A32)) TRACELOG(LOG_WARNING, "TEXTURES: Cubemap requested format not supported"); - else glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, size, size, 0, glFormat, glType, NULL); - } - else TRACELOG(LOG_WARNING, "TEXTURES: Empty cubemap creation does not support compressed format"); - } - else - { - if (format < PIXELFORMAT_COMPRESSED_DXT1_RGB) glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, size, size, 0, glFormat, glType, (unsigned char *)data + i*dataSize); - else glCompressedTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, size, size, 0, dataSize, (unsigned char *)data + i*dataSize); - } - -#if defined(GRAPHICS_API_OPENGL_33) - if (format == PIXELFORMAT_UNCOMPRESSED_GRAYSCALE) - { - GLint swizzleMask[] = { GL_RED, GL_RED, GL_RED, GL_ONE }; - glTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } - else if (format == PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA) - { -#if defined(GRAPHICS_API_OPENGL_21) - GLint swizzleMask[] = { GL_RED, GL_RED, GL_RED, GL_ALPHA }; -#elif defined(GRAPHICS_API_OPENGL_33) - GLint swizzleMask[] = { GL_RED, GL_RED, GL_RED, GL_GREEN }; -#endif - glTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_RGBA, swizzleMask); - } -#endif - } - } - - // Set cubemap texture sampling parameters - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); -#if defined(GRAPHICS_API_OPENGL_33) - glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); // Flag not supported on OpenGL ES 2.0 -#endif - - glBindTexture(GL_TEXTURE_CUBE_MAP, 0); -#endif - - if (id > 0) TRACELOG(LOG_INFO, "TEXTURE: [ID %i] Cubemap texture loaded successfully (%ix%i)", id, size, size); - else TRACELOG(LOG_WARNING, "TEXTURE: Failed to load cubemap texture"); - - return id; -} - -// Update already loaded texture in GPU with new data -// NOTE: We don't know safely if internal texture format is the expected one... -void rlUpdateTexture(unsigned int id, int offsetX, int offsetY, int width, int height, int format, const void *data) -{ - glBindTexture(GL_TEXTURE_2D, id); - - unsigned int glInternalFormat, glFormat, glType; - rlGetGlTextureFormats(format, &glInternalFormat, &glFormat, &glType); - - if ((glInternalFormat != -1) && (format < PIXELFORMAT_COMPRESSED_DXT1_RGB)) - { - glTexSubImage2D(GL_TEXTURE_2D, 0, offsetX, offsetY, width, height, glFormat, glType, (unsigned char *)data); - } - else TRACELOG(LOG_WARNING, "TEXTURE: [ID %i] Failed to update for current texture format (%i)", id, format); -} - -// Get OpenGL internal formats and data type from raylib PixelFormat -void rlGetGlTextureFormats(int format, unsigned int *glInternalFormat, unsigned int *glFormat, unsigned int *glType) -{ - *glInternalFormat = -1; - *glFormat = -1; - *glType = -1; - - switch (format) - { - #if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_21) || defined(GRAPHICS_API_OPENGL_ES2) - // NOTE: on OpenGL ES 2.0 (WebGL), internalFormat must match format and options allowed are: GL_LUMINANCE, GL_RGB, GL_RGBA - case PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: *glInternalFormat = GL_LUMINANCE; *glFormat = GL_LUMINANCE; *glType = GL_UNSIGNED_BYTE; break; - case PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: *glInternalFormat = GL_LUMINANCE_ALPHA; *glFormat = GL_LUMINANCE_ALPHA; *glType = GL_UNSIGNED_BYTE; break; - case PIXELFORMAT_UNCOMPRESSED_R5G6B5: *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_UNSIGNED_SHORT_5_6_5; break; - case PIXELFORMAT_UNCOMPRESSED_R8G8B8: *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_UNSIGNED_BYTE; break; - case PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_SHORT_5_5_5_1; break; - case PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_SHORT_4_4_4_4; break; - case PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_BYTE; break; - #if !defined(GRAPHICS_API_OPENGL_11) - case PIXELFORMAT_UNCOMPRESSED_R32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_LUMINANCE; *glFormat = GL_LUMINANCE; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float - case PIXELFORMAT_UNCOMPRESSED_R32G32B32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGB; *glFormat = GL_RGB; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float - case PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGBA; *glFormat = GL_RGBA; *glType = GL_FLOAT; break; // NOTE: Requires extension OES_texture_float - #endif - #elif defined(GRAPHICS_API_OPENGL_33) - case PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: *glInternalFormat = GL_R8; *glFormat = GL_RED; *glType = GL_UNSIGNED_BYTE; break; - case PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: *glInternalFormat = GL_RG8; *glFormat = GL_RG; *glType = GL_UNSIGNED_BYTE; break; - case PIXELFORMAT_UNCOMPRESSED_R5G6B5: *glInternalFormat = GL_RGB565; *glFormat = GL_RGB; *glType = GL_UNSIGNED_SHORT_5_6_5; break; - case PIXELFORMAT_UNCOMPRESSED_R8G8B8: *glInternalFormat = GL_RGB8; *glFormat = GL_RGB; *glType = GL_UNSIGNED_BYTE; break; - case PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: *glInternalFormat = GL_RGB5_A1; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_SHORT_5_5_5_1; break; - case PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: *glInternalFormat = GL_RGBA4; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_SHORT_4_4_4_4; break; - case PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: *glInternalFormat = GL_RGBA8; *glFormat = GL_RGBA; *glType = GL_UNSIGNED_BYTE; break; - case PIXELFORMAT_UNCOMPRESSED_R32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_R32F; *glFormat = GL_RED; *glType = GL_FLOAT; break; - case PIXELFORMAT_UNCOMPRESSED_R32G32B32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGB32F; *glFormat = GL_RGB; *glType = GL_FLOAT; break; - case PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: if (RLGL.ExtSupported.texFloat32) *glInternalFormat = GL_RGBA32F; *glFormat = GL_RGBA; *glType = GL_FLOAT; break; - #endif - #if !defined(GRAPHICS_API_OPENGL_11) - case PIXELFORMAT_COMPRESSED_DXT1_RGB: if (RLGL.ExtSupported.texCompDXT) *glInternalFormat = GL_COMPRESSED_RGB_S3TC_DXT1_EXT; break; - case PIXELFORMAT_COMPRESSED_DXT1_RGBA: if (RLGL.ExtSupported.texCompDXT) *glInternalFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; break; - case PIXELFORMAT_COMPRESSED_DXT3_RGBA: if (RLGL.ExtSupported.texCompDXT) *glInternalFormat = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; break; - case PIXELFORMAT_COMPRESSED_DXT5_RGBA: if (RLGL.ExtSupported.texCompDXT) *glInternalFormat = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; break; - case PIXELFORMAT_COMPRESSED_ETC1_RGB: if (RLGL.ExtSupported.texCompETC1) *glInternalFormat = GL_ETC1_RGB8_OES; break; // NOTE: Requires OpenGL ES 2.0 or OpenGL 4.3 - case PIXELFORMAT_COMPRESSED_ETC2_RGB: if (RLGL.ExtSupported.texCompETC2) *glInternalFormat = GL_COMPRESSED_RGB8_ETC2; break; // NOTE: Requires OpenGL ES 3.0 or OpenGL 4.3 - case PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: if (RLGL.ExtSupported.texCompETC2) *glInternalFormat = GL_COMPRESSED_RGBA8_ETC2_EAC; break; // NOTE: Requires OpenGL ES 3.0 or OpenGL 4.3 - case PIXELFORMAT_COMPRESSED_PVRT_RGB: if (RLGL.ExtSupported.texCompPVRT) *glInternalFormat = GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG; break; // NOTE: Requires PowerVR GPU - case PIXELFORMAT_COMPRESSED_PVRT_RGBA: if (RLGL.ExtSupported.texCompPVRT) *glInternalFormat = GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; break; // NOTE: Requires PowerVR GPU - case PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: if (RLGL.ExtSupported.texCompASTC) *glInternalFormat = GL_COMPRESSED_RGBA_ASTC_4x4_KHR; break; // NOTE: Requires OpenGL ES 3.1 or OpenGL 4.3 - case PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: if (RLGL.ExtSupported.texCompASTC) *glInternalFormat = GL_COMPRESSED_RGBA_ASTC_8x8_KHR; break; // NOTE: Requires OpenGL ES 3.1 or OpenGL 4.3 - #endif - default: TRACELOG(LOG_WARNING, "TEXTURE: Current format not supported (%i)", format); break; - } -} - -// Unload texture from GPU memory -void rlUnloadTexture(unsigned int id) -{ - glDeleteTextures(1, &id); -} - -// Generate mipmap data for selected texture -void rlGenerateMipmaps(Texture2D *texture) -{ - glBindTexture(GL_TEXTURE_2D, texture->id); - - // Check if texture is power-of-two (POT) - bool texIsPOT = false; - - if (((texture->width > 0) && ((texture->width & (texture->width - 1)) == 0)) && - ((texture->height > 0) && ((texture->height & (texture->height - 1)) == 0))) texIsPOT = true; - -#if defined(GRAPHICS_API_OPENGL_11) - if (texIsPOT) - { - // WARNING: Manual mipmap generation only works for RGBA 32bit textures! - if (texture->format == PIXELFORMAT_UNCOMPRESSED_R8G8B8A8) - { - // Retrieve texture data from VRAM - void *texData = rlReadTexturePixels(*texture); - - // NOTE: Texture data size is reallocated to fit mipmaps data - // NOTE: CPU mipmap generation only supports RGBA 32bit data - int mipmapCount = rlGenerateMipmapsData(texData, texture->width, texture->height); - - int size = texture->width*texture->height*4; - int offset = size; - - int mipWidth = texture->width/2; - int mipHeight = texture->height/2; - - // Load the mipmaps - for (int level = 1; level < mipmapCount; level++) - { - glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA8, mipWidth, mipHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, (unsigned char *)texData + offset); - - size = mipWidth*mipHeight*4; - offset += size; - - mipWidth /= 2; - mipHeight /= 2; - } - - texture->mipmaps = mipmapCount + 1; - RL_FREE(texData); // Once mipmaps have been generated and data has been uploaded to GPU VRAM, we can discard RAM data - - TRACELOG(LOG_WARNING, "TEXTURE: [ID %i] Mipmaps generated manually on CPU side, total: %i", texture->id, texture->mipmaps); - } - else TRACELOG(LOG_WARNING, "TEXTURE: [ID %i] Failed to generate mipmaps for provided texture format", texture->id); - } -#endif -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - if ((texIsPOT) || (RLGL.ExtSupported.texNPOT)) - { - //glHint(GL_GENERATE_MIPMAP_HINT, GL_DONT_CARE); // Hint for mipmaps generation algorythm: GL_FASTEST, GL_NICEST, GL_DONT_CARE - glGenerateMipmap(GL_TEXTURE_2D); // Generate mipmaps automatically - - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); // Activate Trilinear filtering for mipmaps - - #define MIN(a,b) (((a)<(b))?(a):(b)) - #define MAX(a,b) (((a)>(b))?(a):(b)) - - texture->mipmaps = 1 + (int)floor(log(MAX(texture->width, texture->height))/log(2)); - TRACELOG(LOG_INFO, "TEXTURE: [ID %i] Mipmaps generated automatically, total: %i", texture->id, texture->mipmaps); - } -#endif - else TRACELOG(LOG_WARNING, "TEXTURE: [ID %i] Failed to generate mipmaps", texture->id); - - glBindTexture(GL_TEXTURE_2D, 0); -} - - -// Read texture pixel data -void *rlReadTexturePixels(Texture2D texture) -{ - void *pixels = NULL; - -#if defined(GRAPHICS_API_OPENGL_11) || defined(GRAPHICS_API_OPENGL_33) - glBindTexture(GL_TEXTURE_2D, texture.id); - - // NOTE: Using texture.id, we can retrieve some texture info (but not on OpenGL ES 2.0) - // Possible texture info: GL_TEXTURE_RED_SIZE, GL_TEXTURE_GREEN_SIZE, GL_TEXTURE_BLUE_SIZE, GL_TEXTURE_ALPHA_SIZE - //int width, height, format; - //glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width); - //glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height); - //glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &format); - - // NOTE: Each row written to or read from by OpenGL pixel operations like glGetTexImage are aligned to a 4 byte boundary by default, which may add some padding. - // Use glPixelStorei to modify padding with the GL_[UN]PACK_ALIGNMENT setting. - // GL_PACK_ALIGNMENT affects operations that read from OpenGL memory (glReadPixels, glGetTexImage, etc.) - // GL_UNPACK_ALIGNMENT affects operations that write to OpenGL memory (glTexImage, etc.) - glPixelStorei(GL_PACK_ALIGNMENT, 1); - - unsigned int glInternalFormat, glFormat, glType; - rlGetGlTextureFormats(texture.format, &glInternalFormat, &glFormat, &glType); - unsigned int size = rlGetPixelDataSize(texture.width, texture.height, texture.format); - - if ((glInternalFormat != -1) && (texture.format < PIXELFORMAT_COMPRESSED_DXT1_RGB)) - { - pixels = RL_MALLOC(size); - glGetTexImage(GL_TEXTURE_2D, 0, glFormat, glType, pixels); - } - else TRACELOG(LOG_WARNING, "TEXTURE: [ID %i] Data retrieval not suported for pixel format (%i)", texture.id, texture.format); - - glBindTexture(GL_TEXTURE_2D, 0); -#endif - -#if defined(GRAPHICS_API_OPENGL_ES2) - // glGetTexImage() is not available on OpenGL ES 2.0 - // Texture width and height are required on OpenGL ES 2.0. There is no way to get it from texture id. - // Two possible Options: - // 1 - Bind texture to color fbo attachment and glReadPixels() - // 2 - Create an fbo, activate it, render quad with texture, glReadPixels() - // We are using Option 1, just need to care for texture format on retrieval - // NOTE: This behaviour could be conditioned by graphic driver... - unsigned int fboId = rlLoadFramebuffer(texture.width, texture.height); - - // TODO: Create depth texture/renderbuffer for fbo? - - glBindFramebuffer(GL_FRAMEBUFFER, fboId); - glBindTexture(GL_TEXTURE_2D, 0); - - // Attach our texture to FBO - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture.id, 0); - - // We read data as RGBA because FBO texture is configured as RGBA, despite binding another texture format - pixels = (unsigned char *)RL_MALLOC(rlGetPixelDataSize(texture.width, texture.height, PIXELFORMAT_UNCOMPRESSED_R8G8B8A8)); - glReadPixels(0, 0, texture.width, texture.height, GL_RGBA, GL_UNSIGNED_BYTE, pixels); - - glBindFramebuffer(GL_FRAMEBUFFER, 0); - - // Clean up temporal fbo - rlUnloadFramebuffer(fboId); -#endif - - return pixels; -} - - -// Read screen pixel data (color buffer) -unsigned char *rlReadScreenPixels(int width, int height) -{ - unsigned char *screenData = (unsigned char *)RL_CALLOC(width*height*4, sizeof(unsigned char)); - - // NOTE 1: glReadPixels returns image flipped vertically -> (0,0) is the bottom left corner of the framebuffer - // NOTE 2: We are getting alpha channel! Be careful, it can be transparent if not cleared properly! - glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, screenData); - - // Flip image vertically! - unsigned char *imgData = (unsigned char *)RL_MALLOC(width*height*4*sizeof(unsigned char)); - - for (int y = height - 1; y >= 0; y--) - { - for (int x = 0; x < (width*4); x++) - { - imgData[((height - 1) - y)*width*4 + x] = screenData[(y*width*4) + x]; // Flip line - - // Set alpha component value to 255 (no trasparent image retrieval) - // NOTE: Alpha value has already been applied to RGB in framebuffer, we don't need it! - if (((x + 1)%4) == 0) imgData[((height - 1) - y)*width*4 + x] = 255; - } - } - - RL_FREE(screenData); - - return imgData; // NOTE: image data should be freed -} - -// Framebuffer management (fbo) -//----------------------------------------------------------------------------------------- -// Load a framebuffer to be used for rendering -// NOTE: No textures attached -unsigned int rlLoadFramebuffer(int width, int height) -{ - unsigned int fboId = 0; - -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(SUPPORT_RENDER_TEXTURES_HINT) - glGenFramebuffers(1, &fboId); // Create the framebuffer object - glBindFramebuffer(GL_FRAMEBUFFER, 0); // Unbind any framebuffer -#endif - - return fboId; -} - -// Attach color buffer texture to an fbo (unloads previous attachment) -// NOTE: Attach type: 0-Color, 1-Depth renderbuffer, 2-Depth texture -void rlFramebufferAttach(unsigned int fboId, unsigned int texId, int attachType, int texType, int mipLevel) -{ -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(SUPPORT_RENDER_TEXTURES_HINT) - glBindFramebuffer(GL_FRAMEBUFFER, fboId); - - switch (attachType) - { - case RL_ATTACHMENT_COLOR_CHANNEL0: - case RL_ATTACHMENT_COLOR_CHANNEL1: - case RL_ATTACHMENT_COLOR_CHANNEL2: - case RL_ATTACHMENT_COLOR_CHANNEL3: - case RL_ATTACHMENT_COLOR_CHANNEL4: - case RL_ATTACHMENT_COLOR_CHANNEL5: - case RL_ATTACHMENT_COLOR_CHANNEL6: - case RL_ATTACHMENT_COLOR_CHANNEL7: - { - if (texType == RL_ATTACHMENT_TEXTURE2D) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + attachType, GL_TEXTURE_2D, texId, mipLevel); - else if (texType == RL_ATTACHMENT_RENDERBUFFER) glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + attachType, GL_RENDERBUFFER, texId); - else if (texType >= RL_ATTACHMENT_CUBEMAP_POSITIVE_X) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + attachType, GL_TEXTURE_CUBE_MAP_POSITIVE_X + texType, texId, mipLevel); - - } break; - case RL_ATTACHMENT_DEPTH: - { - if (texType == RL_ATTACHMENT_TEXTURE2D) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, texId, mipLevel); - else if (texType == RL_ATTACHMENT_RENDERBUFFER) glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, texId); - - } break; - case RL_ATTACHMENT_STENCIL: - { - if (texType == RL_ATTACHMENT_TEXTURE2D) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, texId, mipLevel); - else if (texType == RL_ATTACHMENT_RENDERBUFFER) glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, texId); - - } break; - default: break; - } - - glBindFramebuffer(GL_FRAMEBUFFER, 0); -#endif -} - -// Verify render texture is complete -bool rlFramebufferComplete(unsigned int id) -{ - bool result = false; - -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(SUPPORT_RENDER_TEXTURES_HINT) - glBindFramebuffer(GL_FRAMEBUFFER, id); - - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); - - if (status != GL_FRAMEBUFFER_COMPLETE) - { - switch (status) - { - case GL_FRAMEBUFFER_UNSUPPORTED: TRACELOG(LOG_WARNING, "FBO: [ID %i] Framebuffer is unsupported", id); break; - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: TRACELOG(LOG_WARNING, "FBO: [ID %i] Framebuffer has incomplete attachment", id); break; -#if defined(GRAPHICS_API_OPENGL_ES2) - case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: TRACELOG(LOG_WARNING, "FBO: [ID %i] Framebuffer has incomplete dimensions", id); break; -#endif - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: TRACELOG(LOG_WARNING, "FBO: [ID %i] Framebuffer has a missing attachment", id); break; - default: break; - } - } - - glBindFramebuffer(GL_FRAMEBUFFER, 0); - - result = (status == GL_FRAMEBUFFER_COMPLETE); -#endif - - return result; -} - -// Unload framebuffer from GPU memory -// NOTE: All attached textures/cubemaps/renderbuffers are also deleted -void rlUnloadFramebuffer(unsigned int id) -{ -#if (defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)) && defined(SUPPORT_RENDER_TEXTURES_HINT) - - // Query depth attachment to automatically delete texture/renderbuffer - int depthType = 0, depthId = 0; - glBindFramebuffer(GL_FRAMEBUFFER, id); // Bind framebuffer to query depth texture type - glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &depthType); - glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &depthId); - - unsigned int depthIdU = (unsigned int)depthId; - if (depthType == GL_RENDERBUFFER) glDeleteRenderbuffers(1, &depthIdU); - else if (depthType == GL_RENDERBUFFER) glDeleteTextures(1, &depthIdU); - - // NOTE: If a texture object is deleted while its image is attached to the *currently bound* framebuffer, - // the texture image is automatically detached from the currently bound framebuffer. - - glBindFramebuffer(GL_FRAMEBUFFER, 0); - glDeleteFramebuffers(1, &id); - - TRACELOG(LOG_INFO, "FBO: [ID %i] Unloaded framebuffer from VRAM (GPU)", id); -#endif -} - -// Vertex data management -//----------------------------------------------------------------------------------------- -// Load a new attributes buffer -unsigned int rlLoadVertexBuffer(void *buffer, int size, bool dynamic) -{ - unsigned int id = 0; - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glGenBuffers(1, &id); - glBindBuffer(GL_ARRAY_BUFFER, id); - glBufferData(GL_ARRAY_BUFFER, size, buffer, dynamic? GL_DYNAMIC_DRAW : GL_STATIC_DRAW); -#endif - - return id; -} - -// Load a new attributes element buffer -unsigned int rlLoadVertexBufferElement(void *buffer, int size, bool dynamic) -{ - unsigned int id = 0; - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glGenBuffers(1, &id); - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, id); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, size, buffer, dynamic? GL_DYNAMIC_DRAW : GL_STATIC_DRAW); -#endif - - return id; -} - -void rlEnableVertexBuffer(unsigned int id) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glBindBuffer(GL_ARRAY_BUFFER, id); -#endif -} - -void rlDisableVertexBuffer(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glBindBuffer(GL_ARRAY_BUFFER, 0); -#endif -} - -void rlEnableVertexBufferElement(unsigned int id) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, id); -#endif -} - -void rlDisableVertexBufferElement(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); -#endif -} - -// Update GPU buffer with new data -// NOTE: dataSize and offset must be provided in bytes -void rlUpdateVertexBuffer(int bufferId, void *data, int dataSize, int offset) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glBindBuffer(GL_ARRAY_BUFFER, bufferId); - glBufferSubData(GL_ARRAY_BUFFER, offset, dataSize, data); -#endif -} - -bool rlEnableVertexArray(unsigned int vaoId) -{ - bool result = false; -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - if (RLGL.ExtSupported.vao) - { - glBindVertexArray(vaoId); - result = true; - } -#endif - return result; -} - -void rlDisableVertexArray(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - if (RLGL.ExtSupported.vao) glBindVertexArray(0); -#endif -} - -void rlEnableVertexAttribute(unsigned int index) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glEnableVertexAttribArray(index); -#endif -} - -void rlDisableVertexAttribute(unsigned int index) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glDisableVertexAttribArray(index); -#endif -} - -void rlDrawVertexArray(int offset, int count) -{ - glDrawArrays(GL_TRIANGLES, offset, count); -} - -void rlDrawVertexArrayElements(int offset, int count, void *buffer) -{ - glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, (unsigned short*)buffer + offset); -} - -void rlDrawVertexArrayInstanced(int offset, int count, int instances) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glDrawArraysInstanced(GL_TRIANGLES, 0, count, instances); -#endif -} - -void rlDrawVertexArrayElementsInstanced(int offset, int count, void *buffer, int instances) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glDrawElementsInstanced(GL_TRIANGLES, count, GL_UNSIGNED_SHORT, (unsigned short*)buffer + offset, instances); -#endif -} - -#if defined(GRAPHICS_API_OPENGL_11) -void rlEnableStatePointer(int vertexAttribType, void *buffer) -{ - if (buffer != NULL) glEnableClientState(vertexAttribType); - switch (vertexAttribType) - { - case GL_VERTEX_ARRAY: glVertexPointer(3, GL_FLOAT, 0, buffer); break; - case GL_TEXTURE_COORD_ARRAY: glTexCoordPointer(2, GL_FLOAT, 0, buffer); break; - case GL_NORMAL_ARRAY: if (buffer != NULL) glNormalPointer(GL_FLOAT, 0, buffer); break; - case GL_COLOR_ARRAY: if (buffer != NULL) glColorPointer(4, GL_UNSIGNED_BYTE, 0, buffer); break; - //case GL_INDEX_ARRAY: if (buffer != NULL) glIndexPointer(GL_SHORT, 0, buffer); break; // Indexed colors - default: break; - } -} - -void rlDisableStatePointer(int vertexAttribType) -{ - glDisableClientState(vertexAttribType); -} -#endif - -unsigned int rlLoadVertexArray(void) -{ - unsigned int vaoId = 0; -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glGenVertexArrays(1, &vaoId); -#endif - return vaoId; -} - -void rlSetVertexAttribute(unsigned int index, int compSize, int type, bool normalized, int stride, void *pointer) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glVertexAttribPointer(index, compSize, type, normalized, stride, pointer); -#endif -} - -void rlSetVertexAttributeDivisor(unsigned int index, int divisor) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glVertexAttribDivisor(index, divisor); -#endif -} - -void rlUnloadVertexArray(unsigned int vaoId) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - if (RLGL.ExtSupported.vao) - { - glBindVertexArray(0); - glDeleteVertexArrays(1, &vaoId); - TRACELOG(LOG_INFO, "VAO: [ID %i] Unloaded vertex array data from VRAM (GPU)", vaoId); - } -#endif -} - -void rlUnloadVertexBuffer(unsigned int vboId) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glDeleteBuffers(1, &vboId); - //TRACELOG(LOG_INFO, "VBO: Unloaded vertex data from VRAM (GPU)"); -#endif -} - -// Shaders management -//----------------------------------------------------------------------------------------------- -// Load shader from code strings -// NOTE: If shader string is NULL, using default vertex/fragment shaders -unsigned int rlLoadShaderCode(const char *vsCode, const char *fsCode) -{ - unsigned int id = 0; - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - unsigned int vertexShaderId = RLGL.State.defaultVShaderId; - unsigned int fragmentShaderId = RLGL.State.defaultFShaderId; - - if (vsCode != NULL) vertexShaderId = rlCompileShader(vsCode, GL_VERTEX_SHADER); - if (fsCode != NULL) fragmentShaderId = rlCompileShader(fsCode, GL_FRAGMENT_SHADER); - - if ((vertexShaderId == RLGL.State.defaultVShaderId) && (fragmentShaderId == RLGL.State.defaultFShaderId)) id = RLGL.State.defaultShader.id; - else - { - id = rlLoadShaderProgram(vertexShaderId, fragmentShaderId); - - if (vertexShaderId != RLGL.State.defaultVShaderId) - { - // Detach shader before deletion to make sure memory is freed - glDetachShader(id, vertexShaderId); - glDeleteShader(vertexShaderId); - } - if (fragmentShaderId != RLGL.State.defaultFShaderId) - { - // Detach shader before deletion to make sure memory is freed - glDetachShader(id, fragmentShaderId); - glDeleteShader(fragmentShaderId); - } - - if (id == 0) - { - TRACELOG(LOG_WARNING, "SHADER: Failed to load custom shader code"); - id = RLGL.State.defaultShader.id; - } - } - - // Get available shader uniforms - // NOTE: This information is useful for debug... - int uniformCount = -1; - - glGetProgramiv(id, GL_ACTIVE_UNIFORMS, &uniformCount); - - for (int i = 0; i < uniformCount; i++) - { - int namelen = -1; - int num = -1; - char name[256]; // Assume no variable names longer than 256 - GLenum type = GL_ZERO; - - // Get the name of the uniforms - glGetActiveUniform(id, i, sizeof(name) - 1, &namelen, &num, &type, name); - - name[namelen] = 0; - - TRACELOGD("SHADER: [ID %i] Active uniform (%s) set at location: %i", id, name, glGetUniformLocation(id, name)); - } -#endif - - return id; -} - -// Compile custom shader and return shader id -unsigned int rlCompileShader(const char *shaderCode, int type) -{ - unsigned int shader = 0; - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - shader = glCreateShader(type); - glShaderSource(shader, 1, &shaderCode, NULL); - - GLint success = 0; - glCompileShader(shader); - glGetShaderiv(shader, GL_COMPILE_STATUS, &success); - - if (success == GL_FALSE) - { - switch (type) - { - case GL_VERTEX_SHADER: TRACELOG(LOG_WARNING, "SHADER: [ID %i] Failed to compile vertex shader code", shader); break; - case GL_FRAGMENT_SHADER: TRACELOG(LOG_WARNING, "SHADER: [ID %i] Failed to compile fragment shader code", shader); break; - //case GL_GEOMETRY_SHADER: - //case GL_COMPUTE_SHADER: - default: break; - } - - int maxLength = 0; - glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &maxLength); - - if (maxLength > 0) - { - int length = 0; - char *log = (char *)RL_CALLOC(maxLength, sizeof(char)); - glGetShaderInfoLog(shader, maxLength, &length, log); - TRACELOG(LOG_WARNING, "SHADER: [ID %i] Compile error: %s", shader, log); - RL_FREE(log); - } - } - else - { - switch (type) - { - case GL_VERTEX_SHADER: TRACELOG(LOG_INFO, "SHADER: [ID %i] Vertex shader compiled successfully", shader); break; - case GL_FRAGMENT_SHADER: TRACELOG(LOG_INFO, "SHADER: [ID %i] Fragment shader compiled successfully", shader); break; - //case GL_GEOMETRY_SHADER: - //case GL_COMPUTE_SHADER: - default: break; - } - } -#endif - - return shader; -} - -// Load custom shader strings and return program id -unsigned int rlLoadShaderProgram(unsigned int vShaderId, unsigned int fShaderId) -{ - unsigned int program = 0; - -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - GLint success = 0; - program = glCreateProgram(); - - glAttachShader(program, vShaderId); - glAttachShader(program, fShaderId); - - // NOTE: Default attribute shader locations must be binded before linking - glBindAttribLocation(program, 0, DEFAULT_SHADER_ATTRIB_NAME_POSITION); - glBindAttribLocation(program, 1, DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD); - glBindAttribLocation(program, 2, DEFAULT_SHADER_ATTRIB_NAME_NORMAL); - glBindAttribLocation(program, 3, DEFAULT_SHADER_ATTRIB_NAME_COLOR); - glBindAttribLocation(program, 4, DEFAULT_SHADER_ATTRIB_NAME_TANGENT); - glBindAttribLocation(program, 5, DEFAULT_SHADER_ATTRIB_NAME_TEXCOORD2); - - // NOTE: If some attrib name is no found on the shader, it locations becomes -1 - - glLinkProgram(program); - - // NOTE: All uniform variables are intitialised to 0 when a program links - - glGetProgramiv(program, GL_LINK_STATUS, &success); - - if (success == GL_FALSE) - { - TRACELOG(LOG_WARNING, "SHADER: [ID %i] Failed to link shader program", program); - - int maxLength = 0; - glGetProgramiv(program, GL_INFO_LOG_LENGTH, &maxLength); - - if (maxLength > 0) - { - int length = 0; - char *log = (char *)RL_CALLOC(maxLength, sizeof(char)); - glGetProgramInfoLog(program, maxLength, &length, log); - TRACELOG(LOG_WARNING, "SHADER: [ID %i] Link error: %s", program, log); - RL_FREE(log); - } - - glDeleteProgram(program); - - program = 0; - } - else TRACELOG(LOG_INFO, "SHADER: [ID %i] Program shader loaded successfully", program); -#endif - return program; -} - -// Unload shader program -void rlUnloadShaderProgram(unsigned int id) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glDeleteProgram(id); - - TRACELOG(LOG_INFO, "SHADER: [ID %i] Unloaded shader program data from VRAM (GPU)", id); -#endif -} - -// Get shader location uniform -int rlGetLocationUniform(unsigned int shaderId, const char *uniformName) -{ - int location = -1; -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - location = glGetUniformLocation(shaderId, uniformName); - - if (location == -1) TRACELOG(LOG_WARNING, "SHADER: [ID %i] Failed to find shader uniform: %s", shaderId, uniformName); - else TRACELOG(LOG_INFO, "SHADER: [ID %i] Shader uniform (%s) set at location: %i", shaderId, uniformName, location); -#endif - return location; -} - -// Get shader location attribute -int rlGetLocationAttrib(unsigned int shaderId, const char *attribName) -{ - int location = -1; -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - location = glGetAttribLocation(shaderId, attribName); - - if (location == -1) TRACELOG(LOG_WARNING, "SHADER: [ID %i] Failed to find shader attribute: %s", shaderId, attribName); - else TRACELOG(LOG_INFO, "SHADER: [ID %i] Shader attribute (%s) set at location: %i", shaderId, attribName, location); -#endif - return location; -} - -// Set shader value uniform -void rlSetUniform(int locIndex, const void *value, int uniformType, int count) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - switch (uniformType) - { - case SHADER_UNIFORM_FLOAT: glUniform1fv(locIndex, count, (float *)value); break; - case SHADER_UNIFORM_VEC2: glUniform2fv(locIndex, count, (float *)value); break; - case SHADER_UNIFORM_VEC3: glUniform3fv(locIndex, count, (float *)value); break; - case SHADER_UNIFORM_VEC4: glUniform4fv(locIndex, count, (float *)value); break; - case SHADER_UNIFORM_INT: glUniform1iv(locIndex, count, (int *)value); break; - case SHADER_UNIFORM_IVEC2: glUniform2iv(locIndex, count, (int *)value); break; - case SHADER_UNIFORM_IVEC3: glUniform3iv(locIndex, count, (int *)value); break; - case SHADER_UNIFORM_IVEC4: glUniform4iv(locIndex, count, (int *)value); break; - case SHADER_UNIFORM_SAMPLER2D: glUniform1iv(locIndex, count, (int *)value); break; - default: TRACELOG(LOG_WARNING, "SHADER: Failed to set uniform value, data type not recognized"); - } -#endif -} - -// Set shader value attribute -void rlSetVertexAttributeDefault(int locIndex, const void *value, int attribType, int count) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - switch (attribType) - { - case SHADER_ATTRIB_FLOAT: if (count == 1) glVertexAttrib1fv(locIndex, (float *)value); break; - case SHADER_ATTRIB_VEC2: if (count == 2) glVertexAttrib2fv(locIndex, (float *)value); break; - case SHADER_ATTRIB_VEC3: if (count == 3) glVertexAttrib3fv(locIndex, (float *)value); break; - case SHADER_ATTRIB_VEC4: if (count == 4) glVertexAttrib4fv(locIndex, (float *)value); break; - default: TRACELOG(LOG_WARNING, "SHADER: Failed to set attrib default value, data type not recognized"); - } -#endif -} - -// Set shader value uniform matrix -void rlSetUniformMatrix(int locIndex, Matrix mat) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - glUniformMatrix4fv(locIndex, 1, false, MatrixToFloat(mat)); -#endif -} - -// Set shader value uniform sampler -void rlSetUniformSampler(int locIndex, unsigned int textureId) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - // Check if texture is already active - for (int i = 0; i < MAX_BATCH_ACTIVE_TEXTURES; i++) if (RLGL.State.activeTextureId[i] == textureId) return; - - // Register a new active texture for the internal batch system - // NOTE: Default texture is always activated as GL_TEXTURE0 - for (int i = 0; i < MAX_BATCH_ACTIVE_TEXTURES; i++) - { - if (RLGL.State.activeTextureId[i] == 0) - { - glUniform1i(locIndex, 1 + i); // Activate new texture unit - RLGL.State.activeTextureId[i] = textureId; // Save texture id for binding on drawing - break; - } - } -#endif -} - -// Set shader currently active -void rlSetShader(Shader shader) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - if (RLGL.State.currentShader.id != shader.id) - { - rlDrawRenderBatch(RLGL.currentBatch); - RLGL.State.currentShader = shader; - } -#endif -} - -// Matrix state management -//----------------------------------------------------------------------------------------- -// Return internal modelview matrix -Matrix rlGetMatrixModelview(void) -{ - Matrix matrix = MatrixIdentity(); -#if defined(GRAPHICS_API_OPENGL_11) - float mat[16]; - glGetFloatv(GL_MODELVIEW_MATRIX, mat); - matrix.m0 = mat[0]; matrix.m1 = mat[1]; matrix.m2 = mat[2]; matrix.m3 = mat[3]; - matrix.m4 = mat[4]; matrix.m5 = mat[5]; matrix.m6 = mat[6]; matrix.m7 = mat[7]; - matrix.m8 = mat[8]; matrix.m9 = mat[9]; matrix.m10 = mat[10]; matrix.m11 = mat[11]; - matrix.m12 = mat[12]; matrix.m13 = mat[13]; matrix.m14 = mat[14]; matrix.m15 = mat[15]; -#else - matrix = RLGL.State.modelview; -#endif - return matrix; -} - -// Return internal projection matrix -Matrix rlGetMatrixProjection(void) -{ -#if defined(GRAPHICS_API_OPENGL_11) - float mat[16]; - glGetFloatv(GL_PROJECTION_MATRIX,mat); - Matrix m; - m.m0 = mat[0]; m.m1 = mat[1]; m.m2 = mat[2]; m.m3 = mat[3]; - m.m4 = mat[4]; m.m5 = mat[5]; m.m6 = mat[6]; m.m7 = mat[7]; - m.m8 = mat[8]; m.m9 = mat[9]; m.m10 = mat[10]; m.m11 = mat[11]; - m.m12 = mat[12]; m.m13 = mat[13]; m.m14 = mat[14]; m.m15 = mat[15]; - return m; -#else - return RLGL.State.projection; -#endif -} - -// Get internal accumulated transform matrix -Matrix rlGetMatrixTransform(void) -{ - Matrix mat = MatrixIdentity(); -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - // TODO: Consider possible transform matrices in the RLGL.State.stack - // Is this the right order? or should we start with the first stored matrix instead of the last one? - //Matrix matStackTransform = MatrixIdentity(); - //for (int i = RLGL.State.stackCounter; i > 0; i--) matStackTransform = MatrixMultiply(RLGL.State.stack[i], matStackTransform); - mat = RLGL.State.transform; -#endif - return mat; -} - -// Get internal projection matrix for stereo render (selected eye) -RLAPI Matrix rlGetMatrixProjectionStereo(int eye) -{ - Matrix mat = MatrixIdentity(); -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - mat = RLGL.State.projectionStereo[eye]; -#endif - return mat; -} - -// Get internal view offset matrix for stereo render (selected eye) -RLAPI Matrix rlGetMatrixViewOffsetStereo(int eye) -{ - Matrix mat = MatrixIdentity(); -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - mat = RLGL.State.viewOffsetStereo[eye]; -#endif - return mat; -} - -// Set a custom modelview matrix (replaces internal modelview matrix) -void rlSetMatrixModelview(Matrix view) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - RLGL.State.modelview = view; -#endif -} - -// Set a custom projection matrix (replaces internal projection matrix) -void rlSetMatrixProjection(Matrix projection) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - RLGL.State.projection = projection; -#endif -} - -// Set eyes projection matrices for stereo rendering -void rlSetMatrixProjectionStereo(Matrix right, Matrix left) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - RLGL.State.projectionStereo[0] = right; - RLGL.State.projectionStereo[1] = left; -#endif -} - -// Set eyes view offsets matrices for stereo rendering -void rlSetMatrixViewOffsetStereo(Matrix right, Matrix left) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - RLGL.State.viewOffsetStereo[0] = right; - RLGL.State.viewOffsetStereo[1] = left; -#endif -} - -// Load and draw a 1x1 XY quad in NDC -void rlLoadDrawQuad(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - unsigned int quadVAO = 0; - unsigned int quadVBO = 0; - - float vertices[] = { - // Positions Texcoords - -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, - -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, - 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, - 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, - }; - - // Gen VAO to contain VBO - glGenVertexArrays(1, &quadVAO); - glBindVertexArray(quadVAO); - - // Gen and fill vertex buffer (VBO) - glGenBuffers(1, &quadVBO); - glBindBuffer(GL_ARRAY_BUFFER, quadVBO); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), &vertices, GL_STATIC_DRAW); - - // Bind vertex attributes (position, texcoords) - glEnableVertexAttribArray(0); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5*sizeof(float), (void *)0); // Positions - glEnableVertexAttribArray(1); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5*sizeof(float), (void *)(3*sizeof(float))); // Texcoords - - // Draw quad - glBindVertexArray(quadVAO); - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - glBindVertexArray(0); - - // Delete buffers (VBO and VAO) - glDeleteBuffers(1, &quadVBO); - glDeleteVertexArrays(1, &quadVAO); -#endif -} - -// Load and draw a 1x1 3D cube in NDC -void rlLoadDrawCube(void) -{ -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) - unsigned int cubeVAO = 0; - unsigned int cubeVBO = 0; - - float vertices[] = { - // Positions Normals Texcoords - -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, - 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, - 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, - 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, - -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, - -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, - -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, - 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, - 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, - -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, - -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, - -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, - -1.0f, 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, - -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, - -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, - -1.0f, -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, - -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, - 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, - 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, - 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, - 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, - 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, - 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, - -1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, - 1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f, - 1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, - 1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, - -1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, - -1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, - -1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, - 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, - 1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, - -1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, - -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f - }; - - // Gen VAO to contain VBO - glGenVertexArrays(1, &cubeVAO); - glBindVertexArray(cubeVAO); - - // Gen and fill vertex buffer (VBO) - glGenBuffers(1, &cubeVBO); - glBindBuffer(GL_ARRAY_BUFFER, cubeVBO); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - // Bind vertex attributes (position, normals, texcoords) - glBindVertexArray(cubeVAO); - glEnableVertexAttribArray(0); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void *)0); // Positions - glEnableVertexAttribArray(1); - glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void *)(3*sizeof(float))); // Normals - glEnableVertexAttribArray(2); - glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8*sizeof(float), (void *)(6*sizeof(float))); // Texcoords - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindVertexArray(0); - - // Draw cube - glBindVertexArray(cubeVAO); - glDrawArrays(GL_TRIANGLES, 0, 36); - glBindVertexArray(0); - - // Delete VBO and VAO - glDeleteBuffers(1, &cubeVBO); - glDeleteVertexArrays(1, &cubeVAO); -#endif -} - -//---------------------------------------------------------------------------------- -// Module specific Functions Definition -//---------------------------------------------------------------------------------- -#if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) -// Load default shader (just vertex positioning and texture coloring) -// NOTE: This shader program is used for internal buffers -// NOTE: It uses global variable: RLGL.State.defaultShader -static void rlLoadShaderDefault(void) -{ - RLGL.State.defaultShader.locs = (int *)RL_CALLOC(MAX_SHADER_LOCATIONS, sizeof(int)); - - // NOTE: All locations must be reseted to -1 (no location) - for (int i = 0; i < MAX_SHADER_LOCATIONS; i++) RLGL.State.defaultShader.locs[i] = -1; - - // Vertex shader directly defined, no external file required - const char *vShaderDefault = -#if defined(GRAPHICS_API_OPENGL_21) - "#version 120 \n" - "attribute vec3 vertexPosition; \n" - "attribute vec2 vertexTexCoord; \n" - "attribute vec4 vertexColor; \n" - "varying vec2 fragTexCoord; \n" - "varying vec4 fragColor; \n" -#elif defined(GRAPHICS_API_OPENGL_33) - "#version 330 \n" - "in vec3 vertexPosition; \n" - "in vec2 vertexTexCoord; \n" - "in vec4 vertexColor; \n" - "out vec2 fragTexCoord; \n" - "out vec4 fragColor; \n" -#endif -#if defined(GRAPHICS_API_OPENGL_ES2) - "#version 100 \n" - "attribute vec3 vertexPosition; \n" - "attribute vec2 vertexTexCoord; \n" - "attribute vec4 vertexColor; \n" - "varying vec2 fragTexCoord; \n" - "varying vec4 fragColor; \n" -#endif - "uniform mat4 mvp; \n" - "void main() \n" - "{ \n" - " fragTexCoord = vertexTexCoord; \n" - " fragColor = vertexColor; \n" - " gl_Position = mvp*vec4(vertexPosition, 1.0); \n" - "} \n"; - - // Fragment shader directly defined, no external file required - const char *fShaderDefault = -#if defined(GRAPHICS_API_OPENGL_21) - "#version 120 \n" - "varying vec2 fragTexCoord; \n" - "varying vec4 fragColor; \n" - "uniform sampler2D texture0; \n" - "uniform vec4 colDiffuse; \n" - "void main() \n" - "{ \n" - " vec4 texelColor = texture2D(texture0, fragTexCoord); \n" - " gl_FragColor = texelColor*colDiffuse*fragColor; \n" - "} \n"; -#elif defined(GRAPHICS_API_OPENGL_33) - "#version 330 \n" - "in vec2 fragTexCoord; \n" - "in vec4 fragColor; \n" - "out vec4 finalColor; \n" - "uniform sampler2D texture0; \n" - "uniform vec4 colDiffuse; \n" - "void main() \n" - "{ \n" - " vec4 texelColor = texture(texture0, fragTexCoord); \n" - " finalColor = texelColor*colDiffuse*fragColor; \n" - "} \n"; -#endif -#if defined(GRAPHICS_API_OPENGL_ES2) - "#version 100 \n" - "precision mediump float; \n" // Precision required for OpenGL ES2 (WebGL) - "varying vec2 fragTexCoord; \n" - "varying vec4 fragColor; \n" - "uniform sampler2D texture0; \n" - "uniform vec4 colDiffuse; \n" - "void main() \n" - "{ \n" - " vec4 texelColor = texture2D(texture0, fragTexCoord); \n" - " gl_FragColor = texelColor*colDiffuse*fragColor; \n" - "} \n"; -#endif - - // NOTE: Compiled vertex/fragment shaders are kept for re-use - RLGL.State.defaultVShaderId = rlCompileShader(vShaderDefault, GL_VERTEX_SHADER); // Compile default vertex shader - RLGL.State.defaultFShaderId = rlCompileShader(fShaderDefault, GL_FRAGMENT_SHADER); // Compile default fragment shader - - RLGL.State.defaultShader.id = rlLoadShaderProgram(RLGL.State.defaultVShaderId, RLGL.State.defaultFShaderId); - - if (RLGL.State.defaultShader.id > 0) - { - TRACELOG(LOG_INFO, "SHADER: [ID %i] Default shader loaded successfully", RLGL.State.defaultShader.id); - - // Set default shader locations: attributes locations - RLGL.State.defaultShader.locs[SHADER_LOC_VERTEX_POSITION] = glGetAttribLocation(RLGL.State.defaultShader.id, "vertexPosition"); - RLGL.State.defaultShader.locs[SHADER_LOC_VERTEX_TEXCOORD01] = glGetAttribLocation(RLGL.State.defaultShader.id, "vertexTexCoord"); - RLGL.State.defaultShader.locs[SHADER_LOC_VERTEX_COLOR] = glGetAttribLocation(RLGL.State.defaultShader.id, "vertexColor"); - - // Set default shader locations: uniform locations - RLGL.State.defaultShader.locs[SHADER_LOC_MATRIX_MVP] = glGetUniformLocation(RLGL.State.defaultShader.id, "mvp"); - RLGL.State.defaultShader.locs[SHADER_LOC_COLOR_DIFFUSE] = glGetUniformLocation(RLGL.State.defaultShader.id, "colDiffuse"); - RLGL.State.defaultShader.locs[SHADER_LOC_MAP_DIFFUSE] = glGetUniformLocation(RLGL.State.defaultShader.id, "texture0"); - } - else TRACELOG(LOG_WARNING, "SHADER: [ID %i] Failed to load default shader", RLGL.State.defaultShader.id); -} - -// Unload default shader -// NOTE: It uses global variable: RLGL.State.defaultShader -static void rlUnloadShaderDefault(void) -{ - glUseProgram(0); - - glDetachShader(RLGL.State.defaultShader.id, RLGL.State.defaultVShaderId); - glDetachShader(RLGL.State.defaultShader.id, RLGL.State.defaultFShaderId); - glDeleteShader(RLGL.State.defaultVShaderId); - glDeleteShader(RLGL.State.defaultFShaderId); - - glDeleteProgram(RLGL.State.defaultShader.id); - - RL_FREE(RLGL.State.defaultShader.locs); - - TRACELOG(LOG_INFO, "SHADER: [ID %i] Default shader unloaded successfully", RLGL.State.defaultShader.id); -} - -#if defined(SUPPORT_GL_DETAILS_INFO) -// Get compressed format official GL identifier name -static char *rlGetCompressedFormatName(int format) -{ - static char compName[64] = { 0 }; - memset(compName, 0, 64); - - switch (format) - { - // GL_EXT_texture_compression_s3tc - case 0x83F0: strcpy(compName, "GL_COMPRESSED_RGB_S3TC_DXT1_EXT"); break; - case 0x83F1: strcpy(compName, "GL_COMPRESSED_RGBA_S3TC_DXT1_EXT"); break; - case 0x83F2: strcpy(compName, "GL_COMPRESSED_RGBA_S3TC_DXT3_EXT"); break; - case 0x83F3: strcpy(compName, "GL_COMPRESSED_RGBA_S3TC_DXT5_EXT"); break; - // GL_3DFX_texture_compression_FXT1 - case 0x86B0: strcpy(compName, "GL_COMPRESSED_RGB_FXT1_3DFX"); break; - case 0x86B1: strcpy(compName, "GL_COMPRESSED_RGBA_FXT1_3DFX"); break; - // GL_IMG_texture_compression_pvrtc - case 0x8C00: strcpy(compName, "GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG"); break; - case 0x8C01: strcpy(compName, "GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG"); break; - case 0x8C02: strcpy(compName, "GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG"); break; - case 0x8C03: strcpy(compName, "GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG"); break; - // GL_OES_compressed_ETC1_RGB8_texture - case 0x8D64: strcpy(compName, "GL_ETC1_RGB8_OES"); break; - // GL_ARB_texture_compression_rgtc - case 0x8DBB: strcpy(compName, "GL_COMPRESSED_RED_RGTC1"); break; - case 0x8DBC: strcpy(compName, "GL_COMPRESSED_SIGNED_RED_RGTC1"); break; - case 0x8DBD: strcpy(compName, "GL_COMPRESSED_RG_RGTC2"); break; - case 0x8DBE: strcpy(compName, "GL_COMPRESSED_SIGNED_RG_RGTC2"); break; - // GL_ARB_texture_compression_bptc - case 0x8E8C: strcpy(compName, "GL_COMPRESSED_RGBA_BPTC_UNORM_ARB"); break; - case 0x8E8D: strcpy(compName, "GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB"); break; - case 0x8E8E: strcpy(compName, "GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB"); break; - case 0x8E8F: strcpy(compName, "GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB"); break; - // GL_ARB_ES3_compatibility - case 0x9274: strcpy(compName, "GL_COMPRESSED_RGB8_ETC2"); break; - case 0x9275: strcpy(compName, "GL_COMPRESSED_SRGB8_ETC2"); break; - case 0x9276: strcpy(compName, "GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2"); break; - case 0x9277: strcpy(compName, "GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2"); break; - case 0x9278: strcpy(compName, "GL_COMPRESSED_RGBA8_ETC2_EAC"); break; - case 0x9279: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC"); break; - case 0x9270: strcpy(compName, "GL_COMPRESSED_R11_EAC"); break; - case 0x9271: strcpy(compName, "GL_COMPRESSED_SIGNED_R11_EAC"); break; - case 0x9272: strcpy(compName, "GL_COMPRESSED_RG11_EAC"); break; - case 0x9273: strcpy(compName, "GL_COMPRESSED_SIGNED_RG11_EAC"); break; - // GL_KHR_texture_compression_astc_hdr - case 0x93B0: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_4x4_KHR"); break; - case 0x93B1: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_5x4_KHR"); break; - case 0x93B2: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_5x5_KHR"); break; - case 0x93B3: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_6x5_KHR"); break; - case 0x93B4: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_6x6_KHR"); break; - case 0x93B5: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_8x5_KHR"); break; - case 0x93B6: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_8x6_KHR"); break; - case 0x93B7: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_8x8_KHR"); break; - case 0x93B8: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_10x5_KHR"); break; - case 0x93B9: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_10x6_KHR"); break; - case 0x93BA: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_10x8_KHR"); break; - case 0x93BB: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_10x10_KHR"); break; - case 0x93BC: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_12x10_KHR"); break; - case 0x93BD: strcpy(compName, "GL_COMPRESSED_RGBA_ASTC_12x12_KHR"); break; - case 0x93D0: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR"); break; - case 0x93D1: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR"); break; - case 0x93D2: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR"); break; - case 0x93D3: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR"); break; - case 0x93D4: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR"); break; - case 0x93D5: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR"); break; - case 0x93D6: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR"); break; - case 0x93D7: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR"); break; - case 0x93D8: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR"); break; - case 0x93D9: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR"); break; - case 0x93DA: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR"); break; - case 0x93DB: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR"); break; - case 0x93DC: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR"); break; - case 0x93DD: strcpy(compName, "GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR"); break; - default: strcpy(compName, "GL_COMPRESSED_UNKNOWN"); break; - } - - return compName; -} -#endif // SUPPORT_GL_DETAILS_INFO - -#endif // GRAPHICS_API_OPENGL_33 || GRAPHICS_API_OPENGL_ES2 - -#if defined(GRAPHICS_API_OPENGL_11) -// Mipmaps data is generated after image data -// NOTE: Only works with RGBA (4 bytes) data! -static int rlGenerateMipmapsData(unsigned char *data, int baseWidth, int baseHeight) -{ - int mipmapCount = 1; // Required mipmap levels count (including base level) - int width = baseWidth; - int height = baseHeight; - int size = baseWidth*baseHeight*4; // Size in bytes (will include mipmaps...), RGBA only - - // Count mipmap levels required - while ((width != 1) && (height != 1)) - { - width /= 2; - height /= 2; - - TRACELOGD("TEXTURE: Next mipmap size: %i x %i", width, height); - - mipmapCount++; - - size += (width*height*4); // Add mipmap size (in bytes) - } - - TRACELOGD("TEXTURE: Total mipmaps required: %i", mipmapCount); - TRACELOGD("TEXTURE: Total size of data required: %i", size); - - unsigned char *temp = RL_REALLOC(data, size); - - if (temp != NULL) data = temp; - else TRACELOG(LOG_WARNING, "TEXTURE: Failed to re-allocate required mipmaps memory"); - - width = baseWidth; - height = baseHeight; - size = (width*height*4); - - // Generate mipmaps - // NOTE: Every mipmap data is stored after data - Color *image = (Color *)RL_MALLOC(width*height*sizeof(Color)); - Color *mipmap = NULL; - int offset = 0; - int j = 0; - - for (int i = 0; i < size; i += 4) - { - image[j].r = data[i]; - image[j].g = data[i + 1]; - image[j].b = data[i + 2]; - image[j].a = data[i + 3]; - j++; - } - - TRACELOGD("TEXTURE: Mipmap base size (%ix%i)", width, height); - - for (int mip = 1; mip < mipmapCount; mip++) - { - mipmap = rlGenNextMipmapData(image, width, height); - - offset += (width*height*4); // Size of last mipmap - j = 0; - - width /= 2; - height /= 2; - size = (width*height*4); // Mipmap size to store after offset - - // Add mipmap to data - for (int i = 0; i < size; i += 4) - { - data[offset + i] = mipmap[j].r; - data[offset + i + 1] = mipmap[j].g; - data[offset + i + 2] = mipmap[j].b; - data[offset + i + 3] = mipmap[j].a; - j++; - } - - RL_FREE(image); - - image = mipmap; - mipmap = NULL; - } - - RL_FREE(mipmap); // free mipmap data - - return mipmapCount; -} - -// Manual mipmap generation (basic scaling algorithm) -static Color *rlGenNextMipmapData(Color *srcData, int srcWidth, int srcHeight) -{ - int x2, y2; - Color prow, pcol; - - int width = srcWidth/2; - int height = srcHeight/2; - - Color *mipmap = (Color *)RL_MALLOC(width*height*sizeof(Color)); - - // Scaling algorithm works perfectly (box-filter) - for (int y = 0; y < height; y++) - { - y2 = 2*y; - - for (int x = 0; x < width; x++) - { - x2 = 2*x; - - prow.r = (srcData[y2*srcWidth + x2].r + srcData[y2*srcWidth + x2 + 1].r)/2; - prow.g = (srcData[y2*srcWidth + x2].g + srcData[y2*srcWidth + x2 + 1].g)/2; - prow.b = (srcData[y2*srcWidth + x2].b + srcData[y2*srcWidth + x2 + 1].b)/2; - prow.a = (srcData[y2*srcWidth + x2].a + srcData[y2*srcWidth + x2 + 1].a)/2; - - pcol.r = (srcData[(y2+1)*srcWidth + x2].r + srcData[(y2+1)*srcWidth + x2 + 1].r)/2; - pcol.g = (srcData[(y2+1)*srcWidth + x2].g + srcData[(y2+1)*srcWidth + x2 + 1].g)/2; - pcol.b = (srcData[(y2+1)*srcWidth + x2].b + srcData[(y2+1)*srcWidth + x2 + 1].b)/2; - pcol.a = (srcData[(y2+1)*srcWidth + x2].a + srcData[(y2+1)*srcWidth + x2 + 1].a)/2; - - mipmap[y*width + x].r = (prow.r + pcol.r)/2; - mipmap[y*width + x].g = (prow.g + pcol.g)/2; - mipmap[y*width + x].b = (prow.b + pcol.b)/2; - mipmap[y*width + x].a = (prow.a + pcol.a)/2; - } - } - - TRACELOGD("TEXTURE: Mipmap generated successfully (%ix%i)", width, height); - - return mipmap; -} -#endif // GRAPHICS_API_OPENGL_11 - -// Get pixel data size in bytes (image or texture) -// NOTE: Size depends on pixel format -static int rlGetPixelDataSize(int width, int height, int format) -{ - int dataSize = 0; // Size in bytes - int bpp = 0; // Bits per pixel - - switch (format) - { - case PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: bpp = 8; break; - case PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: - case PIXELFORMAT_UNCOMPRESSED_R5G6B5: - case PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: - case PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: bpp = 16; break; - case PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: bpp = 32; break; - case PIXELFORMAT_UNCOMPRESSED_R8G8B8: bpp = 24; break; - case PIXELFORMAT_UNCOMPRESSED_R32: bpp = 32; break; - case PIXELFORMAT_UNCOMPRESSED_R32G32B32: bpp = 32*3; break; - case PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: bpp = 32*4; break; - case PIXELFORMAT_COMPRESSED_DXT1_RGB: - case PIXELFORMAT_COMPRESSED_DXT1_RGBA: - case PIXELFORMAT_COMPRESSED_ETC1_RGB: - case PIXELFORMAT_COMPRESSED_ETC2_RGB: - case PIXELFORMAT_COMPRESSED_PVRT_RGB: - case PIXELFORMAT_COMPRESSED_PVRT_RGBA: bpp = 4; break; - case PIXELFORMAT_COMPRESSED_DXT3_RGBA: - case PIXELFORMAT_COMPRESSED_DXT5_RGBA: - case PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: - case PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: bpp = 8; break; - case PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: bpp = 2; break; - default: break; - } - - dataSize = width*height*bpp/8; // Total data size in bytes - - // Most compressed formats works on 4x4 blocks, - // if texture is smaller, minimum dataSize is 8 or 16 - if ((width < 4) && (height < 4)) - { - if ((format >= PIXELFORMAT_COMPRESSED_DXT1_RGB) && (format < PIXELFORMAT_COMPRESSED_DXT3_RGBA)) dataSize = 8; - else if ((format >= PIXELFORMAT_COMPRESSED_DXT3_RGBA) && (format < PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA)) dataSize = 16; - } - - return dataSize; -} -#endif // RLGL_IMPLEMENTATION diff --git a/raylib-sys/src/camera.rs b/raylib-sys/src/camera.rs new file mode 100644 index 00000000..6275609a --- /dev/null +++ b/raylib-sys/src/camera.rs @@ -0,0 +1,88 @@ +use std::mem::transmute; + +use super::{Camera3D, CameraProjection, Matrix}; +use mint::Vector3; + +impl Camera3D { + pub fn camera_type(&self) -> CameraProjection { + unsafe { transmute(self.projection as u32) } + } + /// Create a perspective camera. + /// fovy is in degrees + pub fn perspective( + position: impl Into>, + target: impl Into>, + up: impl Into>, + fovy: f32, + ) -> Camera3D { + Camera3D { + position: position.into(), + target: target.into(), + up: up.into(), + fovy, + projection: CameraProjection::CAMERA_PERSPECTIVE as i32, + } + } + /// Create a orthographic camera. + /// fovy is in degrees + pub fn orthographic( + position: impl Into>, + target: impl Into>, + up: impl Into>, + fovy: f32, + ) -> Camera3D { + let mut c = Self::perspective(position, target, up, fovy); + c.projection = CameraProjection::CAMERA_ORTHOGRAPHIC as i32; + c + } + + pub fn forward(&self) -> Vector3 { + unsafe { super::GetCameraForward(self as *const _ as *mut _) } + } + + pub fn up(&self) -> Vector3 { + unsafe { super::GetCameraUp(self as *const _ as *mut _) } + } + + pub fn move_forward(&mut self, distance: f32, in_world_plane: bool) { + unsafe { super::CameraMoveForward(self, distance, in_world_plane) } + } + + pub fn move_up(&mut self, distance: f32) { + unsafe { super::CameraMoveUp(self, distance) } + } + + pub fn move_right(&mut self, distance: f32, in_world_plane: bool) { + unsafe { super::CameraMoveRight(self, distance, in_world_plane) } + } + + pub fn move_to_target(&mut self, delta: f32) { + unsafe { super::CameraMoveToTarget(self, delta) } + } + + pub fn yaw(&mut self, angle: f32, rotate_around_target: bool) { + unsafe { super::CameraYaw(self, angle, rotate_around_target) } + } + + pub fn pitch( + &mut self, + angle: f32, + lock_view: bool, + rotate_around_target: bool, + rotate_up: bool, + ) { + unsafe { super::CameraPitch(self, angle, lock_view, rotate_around_target, rotate_up) } + } + + pub fn roll(&mut self, angle: f32) { + unsafe { super::CameraRoll(self, angle) } + } + + pub fn view_matrix(&self) -> Matrix { + unsafe { super::GetCameraViewMatrix(self as *const _ as *mut _) } + } + + pub fn projection_matrix(&self, aspect: f32) -> Matrix { + unsafe { super::GetCameraProjectionMatrix(self as *const _ as *mut _, aspect) } + } +} diff --git a/raylib/src/core/color.rs b/raylib-sys/src/color.rs similarity index 84% rename from raylib/src/core/color.rs rename to raylib-sys/src/color.rs index 2f8b69b8..d06ed14c 100644 --- a/raylib/src/core/color.rs +++ b/raylib-sys/src/color.rs @@ -1,292 +1,263 @@ -//! [`Color`] manipulation helpers -use crate::core::math::{Vector3, Vector4}; -use crate::ffi; - -#[repr(C)] -#[derive(Debug, Copy, Clone, PartialEq, Eq, Default)] -#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] -pub struct Color { - pub r: u8, - pub g: u8, - pub b: u8, - pub a: u8, -} - -// A convenience function for making a new `Color`. -pub fn rcolor(r: u8, g: u8, b: u8, a: u8) -> Color { - Color::new(r, g, b, a) -} - -impl From for Color { - fn from(v: ffi::Color) -> Color { - unsafe { std::mem::transmute(v) } - } -} - -impl Into for Color { - fn into(self) -> ffi::Color { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Color { - fn into(self) -> ffi::Color { - ffi::Color { - r: self.r, - g: self.g, - b: self.b, - a: self.a, - } - } -} - -impl Into for Color { - fn into(self) -> Vector4 { - Vector4::new( - self.r as f32 / 255.0, - self.g as f32 / 255.0, - self.b as f32 / 255.0, - self.a as f32 / 255.0, - ) - } -} - -impl From<(u8, u8, u8, u8)> for Color { - fn from(col: (u8, u8, u8, u8)) -> Color { - Color::new(col.0, col.1, col.2, col.3) - } -} - -impl Color { - /// Get color from HEX RGB string - /// # Arguments - /// * `color_hex_str` - A string slice, 6 characters long - /// # Example - /// ``` - /// use raylib::prelude::*; - /// let color_white = Color::from_hex("FFFFFF").unwrap(); - /// let color_black = Color::from_hex("000000").unwrap(); - /// - /// assert_eq!(color_black, Color::BLACK); - /// assert_eq!(color_white, Color::WHITE); - /// ``` - pub fn from_hex(color_hex_str: &str) -> Result { - let color = i32::from_str_radix(color_hex_str, 16)?; - let b = color % 0x100; - let g = (color - b) / 0x100 % 0x100; - let r = (color - g) / 0x10000; - - Ok(Color { - r: r as u8, - g: g as u8, - b: b as u8, - a: 255, - }) - } - - #[inline] - pub const fn new(r: u8, g: u8, b: u8, a: u8) -> Color { - Color { r, g, b, a } - } - - /// Returns hexadecimal value for a Color - #[inline] - pub fn color_to_int(&self) -> i32 { - unsafe { ffi::ColorToInt(self.into()) } - } - - /// Returns color normalized as float [0..1] - #[inline] - pub fn color_normalize(&self) -> Vector4 { - unsafe { ffi::ColorNormalize(self.into()).into() } - } - - /// Returns HSV values for a Color - #[inline] - pub fn color_to_hsv(&self) -> Vector3 { - unsafe { ffi::ColorToHSV(self.into()).into() } - } - - /// Returns a Color from HSV values - #[inline] - pub fn color_from_hsv(hue: f32, saturation: f32, value: f32) -> Color { - unsafe { ffi::ColorFromHSV(hue, saturation, value).into() } - } - - /// Returns color from normalized values [0..1] - /// ```rust - /// use raylib::prelude::*; - /// fn main() { - /// assert_eq!(Color::color_from_normalized(Vector4::new(1.0, 1.0, 1.0, 1.0)), Color::new(255, 255, 255, 255)); - /// } - /// ``` - #[inline] - pub fn color_from_normalized(normalized: Vector4) -> Color { - unsafe { ffi::ColorFromNormalized(normalized.into()).into() } - } - - /// Returns a Color struct from hexadecimal value - #[inline] - pub fn get_color(hex_value: i32) -> Color { - unsafe { ffi::GetColor(hex_value).into() } - } - - /// Color fade-in or fade-out, alpha goes from 0.0f to 1.0f - #[inline] - pub fn fade(&self, alpha: f32) -> Color { - unsafe { ffi::Fade(self.into(), alpha).into() } - } - - /// Color fade-in or fade-out, alpha goes from 0.0f to 1.0f - #[inline] - pub fn color_alpha_blend(dst: &Color, src: &Color, tint: &Color) -> Color { - unsafe { ffi::ColorAlphaBlend(dst.into(), src.into(), tint.into()).into() } - } -} - -/// Color constants -impl Color { - pub const INDIANRED: Color = Color::new(205, 92, 92, 255); - pub const LIGHTCORAL: Color = Color::new(240, 128, 128, 255); - pub const SALMON: Color = Color::new(250, 128, 114, 255); - pub const DARKSALMON: Color = Color::new(233, 150, 122, 255); - pub const LIGHTSALMON: Color = Color::new(255, 160, 122, 255); - pub const CRIMSON: Color = Color::new(220, 20, 60, 255); - pub const RED: Color = Color::new(255, 0, 0, 255); - pub const FIREBRICK: Color = Color::new(178, 34, 34, 255); - pub const DARKRED: Color = Color::new(139, 0, 0, 255); - pub const PINK: Color = Color::new(255, 192, 203, 255); - pub const LIGHTPINK: Color = Color::new(255, 182, 193, 255); - pub const HOTPINK: Color = Color::new(255, 105, 180, 255); - pub const DEEPPINK: Color = Color::new(255, 20, 147, 255); - pub const MEDIUMVIOLETRED: Color = Color::new(199, 21, 133, 255); - pub const PALEVIOLETRED: Color = Color::new(219, 112, 147, 255); - pub const CORAL: Color = Color::new(255, 127, 80, 255); - pub const TOMATO: Color = Color::new(255, 99, 71, 255); - pub const ORANGERED: Color = Color::new(255, 69, 0, 255); - pub const DARKORANGE: Color = Color::new(255, 140, 0, 255); - pub const ORANGE: Color = Color::new(255, 165, 0, 255); - pub const GOLD: Color = Color::new(255, 215, 0, 255); - pub const YELLOW: Color = Color::new(255, 255, 0, 255); - pub const LIGHTYELLOW: Color = Color::new(255, 255, 224, 255); - pub const LEMONCHIFFON: Color = Color::new(255, 250, 205, 255); - pub const LIGHTGOLDENRODYELLOW: Color = Color::new(250, 250, 210, 255); - pub const PAPAYAWHIP: Color = Color::new(255, 239, 213, 255); - pub const MOCCASIN: Color = Color::new(255, 228, 181, 255); - pub const PEACHPUFF: Color = Color::new(255, 218, 185, 255); - pub const PALEGOLDENROD: Color = Color::new(238, 232, 170, 255); - pub const KHAKI: Color = Color::new(240, 230, 140, 255); - pub const DARKKHAKI: Color = Color::new(189, 183, 107, 255); - pub const LAVENDER: Color = Color::new(230, 230, 250, 255); - pub const THISTLE: Color = Color::new(216, 191, 216, 255); - pub const PLUM: Color = Color::new(221, 160, 221, 255); - pub const VIOLET: Color = Color::new(238, 130, 238, 255); - pub const ORCHID: Color = Color::new(218, 112, 214, 255); - pub const FUCHSIA: Color = Color::new(255, 0, 255, 255); - pub const MAGENTA: Color = Color::new(255, 0, 255, 255); - pub const MEDIUMORCHID: Color = Color::new(186, 85, 211, 255); - pub const MEDIUMPURPLE: Color = Color::new(147, 112, 219, 255); - pub const REBECCAPURPLE: Color = Color::new(102, 51, 153, 255); - pub const BLUEVIOLET: Color = Color::new(138, 43, 226, 255); - pub const DARKVIOLET: Color = Color::new(148, 0, 211, 255); - pub const DARKORCHID: Color = Color::new(153, 50, 204, 255); - pub const DARKMAGENTA: Color = Color::new(139, 0, 139, 255); - pub const PURPLE: Color = Color::new(128, 0, 128, 255); - pub const INDIGO: Color = Color::new(75, 0, 130, 255); - pub const SLATEBLUE: Color = Color::new(106, 90, 205, 255); - pub const DARKSLATEBLUE: Color = Color::new(72, 61, 139, 255); - pub const MEDIUMSLATEBLUE: Color = Color::new(123, 104, 238, 255); - pub const GREENYELLOW: Color = Color::new(173, 255, 47, 255); - pub const CHARTREUSE: Color = Color::new(127, 255, 0, 255); - pub const LAWNGREEN: Color = Color::new(124, 252, 0, 255); - pub const LIME: Color = Color::new(0, 255, 0, 255); - pub const LIMEGREEN: Color = Color::new(50, 205, 50, 255); - pub const PALEGREEN: Color = Color::new(152, 251, 152, 255); - pub const LIGHTGREEN: Color = Color::new(144, 238, 144, 255); - pub const MEDIUMSPRINGGREEN: Color = Color::new(0, 250, 154, 255); - pub const SPRINGGREEN: Color = Color::new(0, 255, 127, 255); - pub const MEDIUMSEAGREEN: Color = Color::new(60, 179, 113, 255); - pub const SEAGREEN: Color = Color::new(46, 139, 87, 255); - pub const FORESTGREEN: Color = Color::new(34, 139, 34, 255); - pub const GREEN: Color = Color::new(0, 128, 0, 255); - pub const DARKGREEN: Color = Color::new(0, 100, 0, 255); - pub const YELLOWGREEN: Color = Color::new(154, 205, 50, 255); - pub const OLIVEDRAB: Color = Color::new(107, 142, 35, 255); - pub const OLIVE: Color = Color::new(128, 128, 0, 255); - pub const DARKOLIVEGREEN: Color = Color::new(85, 107, 47, 255); - pub const MEDIUMAQUAMARINE: Color = Color::new(102, 205, 170, 255); - pub const DARKSEAGREEN: Color = Color::new(143, 188, 139, 255); - pub const LIGHTSEAGREEN: Color = Color::new(32, 178, 170, 255); - pub const DARKCYAN: Color = Color::new(0, 139, 139, 255); - pub const TEAL: Color = Color::new(0, 128, 128, 255); - pub const AQUA: Color = Color::new(0, 255, 255, 255); - pub const CYAN: Color = Color::new(0, 255, 255, 255); - pub const LIGHTCYAN: Color = Color::new(224, 255, 255, 255); - pub const PALETURQUOISE: Color = Color::new(175, 238, 238, 255); - pub const AQUAMARINE: Color = Color::new(127, 255, 212, 255); - pub const TURQUOISE: Color = Color::new(64, 224, 208, 255); - pub const MEDIUMTURQUOISE: Color = Color::new(72, 209, 204, 255); - pub const DARKTURQUOISE: Color = Color::new(0, 206, 209, 255); - pub const CADETBLUE: Color = Color::new(95, 158, 160, 255); - pub const STEELBLUE: Color = Color::new(70, 130, 180, 255); - pub const LIGHTSTEELBLUE: Color = Color::new(176, 196, 222, 255); - pub const POWDERBLUE: Color = Color::new(176, 224, 230, 255); - pub const LIGHTBLUE: Color = Color::new(173, 216, 230, 255); - pub const SKYBLUE: Color = Color::new(135, 206, 235, 255); - pub const LIGHTSKYBLUE: Color = Color::new(135, 206, 250, 255); - pub const DEEPSKYBLUE: Color = Color::new(0, 191, 255, 255); - pub const DODGERBLUE: Color = Color::new(30, 144, 255, 255); - pub const CORNFLOWERBLUE: Color = Color::new(100, 149, 237, 255); - pub const ROYALBLUE: Color = Color::new(65, 105, 225, 255); - pub const BLUE: Color = Color::new(0, 0, 255, 255); - pub const MEDIUMBLUE: Color = Color::new(0, 0, 205, 255); - pub const DARKBLUE: Color = Color::new(0, 0, 139, 255); - pub const NAVY: Color = Color::new(0, 0, 128, 255); - pub const MIDNIGHTBLUE: Color = Color::new(25, 25, 112, 255); - pub const CORNSILK: Color = Color::new(255, 248, 220, 255); - pub const BLANCHEDALMOND: Color = Color::new(255, 235, 205, 255); - pub const BISQUE: Color = Color::new(255, 228, 196, 255); - pub const NAVAJOWHITE: Color = Color::new(255, 222, 173, 255); - pub const WHEAT: Color = Color::new(245, 222, 179, 255); - pub const BURLYWOOD: Color = Color::new(222, 184, 135, 255); - pub const TAN: Color = Color::new(210, 180, 140, 255); - pub const ROSYBROWN: Color = Color::new(188, 143, 143, 255); - pub const SANDYBROWN: Color = Color::new(244, 164, 96, 255); - pub const GOLDENROD: Color = Color::new(218, 165, 32, 255); - pub const DARKGOLDENROD: Color = Color::new(184, 134, 11, 255); - pub const PERU: Color = Color::new(205, 133, 63, 255); - pub const CHOCOLATE: Color = Color::new(210, 105, 30, 255); - pub const SADDLEBROWN: Color = Color::new(139, 69, 19, 255); - pub const SIENNA: Color = Color::new(160, 82, 45, 255); - pub const BROWN: Color = Color::new(165, 42, 42, 255); - pub const MAROON: Color = Color::new(128, 0, 0, 255); - pub const WHITE: Color = Color::new(255, 255, 255, 255); - pub const SNOW: Color = Color::new(255, 250, 250, 255); - pub const HONEYDEW: Color = Color::new(240, 255, 240, 255); - pub const MINTCREAM: Color = Color::new(245, 255, 250, 255); - pub const AZURE: Color = Color::new(240, 255, 255, 255); - pub const ALICEBLUE: Color = Color::new(240, 248, 255, 255); - pub const GHOSTWHITE: Color = Color::new(248, 248, 255, 255); - pub const WHITESMOKE: Color = Color::new(245, 245, 245, 255); - pub const SEASHELL: Color = Color::new(255, 245, 238, 255); - pub const BEIGE: Color = Color::new(245, 245, 220, 255); - pub const OLDLACE: Color = Color::new(253, 245, 230, 255); - pub const FLORALWHITE: Color = Color::new(255, 250, 240, 255); - pub const IVORY: Color = Color::new(255, 255, 240, 255); - pub const ANTIQUEWHITE: Color = Color::new(250, 235, 215, 255); - pub const LINEN: Color = Color::new(250, 240, 230, 255); - pub const LAVENDERBLUSH: Color = Color::new(255, 240, 245, 255); - pub const MISTYROSE: Color = Color::new(255, 228, 225, 255); - pub const GAINSBORO: Color = Color::new(220, 220, 220, 255); - pub const LIGHTGRAY: Color = Color::new(211, 211, 211, 255); - pub const SILVER: Color = Color::new(192, 192, 192, 255); - pub const DARKGRAY: Color = Color::new(169, 169, 169, 255); - pub const GRAY: Color = Color::new(128, 128, 128, 255); - pub const DIMGRAY: Color = Color::new(105, 105, 105, 255); - pub const LIGHTSLATEGRAY: Color = Color::new(119, 136, 153, 255); - pub const SLATEGRAY: Color = Color::new(112, 128, 144, 255); - pub const DARKSLATEGRAY: Color = Color::new(47, 79, 79, 255); - pub const BLACK: Color = Color::new(0, 0, 0, 255); - pub const BLANK: Color = Color::new(0, 0, 0, 0); - pub const RAYWHITE: Color = Color::new(245, 245, 245, 255); -} +use crate::Color; +use mint::{Vector3, Vector4}; + +impl From for Vector4 { + fn from(val: Color) -> Self { + Vector4:: { + x: val.r as f32 / 255.0, + y: val.g as f32 / 255.0, + z: val.b as f32 / 255.0, + w: val.a as f32 / 255.0, + } + } +} + +impl From<(u8, u8, u8, u8)> for Color { + fn from(col: (u8, u8, u8, u8)) -> Color { + Color::new(col.0, col.1, col.2, col.3) + } +} + +impl Default for Color { + fn default() -> Self { + Self { + r: 0, + g: 0, + b: 0, + a: 0, + } + } +} + +impl Color { + /// Get color from HEX RGB string + /// # Arguments + /// * `color_hex_str` - A string slice, 6 characters long + /// # Example + /// ``` + /// use raylib::prelude::*; + /// let color_white = Color::from_hex("FFFFFF").unwrap(); + /// let color_black = Color::from_hex("000000").unwrap(); + /// + /// assert_eq!(color_black, Color::BLACK); + /// assert_eq!(color_white, Color::WHITE); + /// ``` + pub fn from_hex(color_hex_str: &str) -> Result { + let color = i32::from_str_radix(color_hex_str, 16)?; + let b = color % 0x100; + let g = (color - b) / 0x100 % 0x100; + let r = (color - g) / 0x10000; + + Ok(Color { + r: r as u8, + g: g as u8, + b: b as u8, + a: 255, + }) + } + + #[inline] + pub const fn new(r: u8, g: u8, b: u8, a: u8) -> Color { + Color { r, g, b, a } + } + + /// Returns hexadecimal value for a Color + #[inline] + pub fn color_to_int(&self) -> i32 { + unsafe { crate::ColorToInt(*self) } + } + + /// Returns color normalized as float [0..1] + #[inline] + pub fn color_normalize(&self) -> Vector4 { + unsafe { crate::ColorNormalize(*self) } + } + + /// Returns HSV values for a Color + #[inline] + pub fn color_to_hsv(&self) -> Vector3 { + unsafe { crate::ColorToHSV(*self) } + } + + /// Returns a Color from HSV values + #[inline] + pub fn color_from_hsv(hue: f32, saturation: f32, value: f32) -> Color { + unsafe { crate::ColorFromHSV(hue, saturation, value) } + } + + /// Returns color from normalized values [0..1] + /// ```rust + /// assert_eq!(Color::color_from_normalized(Vector4 { x: 1.0, y: 1.0, z: 1.0, w: 1.0 }), Color::new(255, 255, 255, 255)); + /// ``` + #[inline] + pub fn color_from_normalized(normalized: impl Into>) -> Color { + unsafe { crate::ColorFromNormalized(normalized.into()) } + } + + /// Returns a Color struct from hexadecimal value + #[inline] + pub fn get_color(hex_value: u32) -> Color { + unsafe { crate::GetColor(hex_value) } + } + + /// Color fade-in or fade-out, alpha goes from 0.0f to 1.0f + #[inline] + pub fn fade(&self, alpha: f32) -> Color { + unsafe { crate::Fade(*self, alpha) } + } + + /// Color fade-in or fade-out, alpha goes from 0.0f to 1.0f + #[inline] + pub fn color_alpha_blend(dst: Color, src: Color, tint: Color) -> Color { + unsafe { crate::ColorAlphaBlend(dst, src, tint) } + } +} + +/// Color constants +impl Color { + pub const INDIANRED: Color = Color::new(205, 92, 92, 255); + pub const LIGHTCORAL: Color = Color::new(240, 128, 128, 255); + pub const SALMON: Color = Color::new(250, 128, 114, 255); + pub const DARKSALMON: Color = Color::new(233, 150, 122, 255); + pub const LIGHTSALMON: Color = Color::new(255, 160, 122, 255); + pub const CRIMSON: Color = Color::new(220, 20, 60, 255); + pub const RED: Color = Color::new(255, 0, 0, 255); + pub const FIREBRICK: Color = Color::new(178, 34, 34, 255); + pub const DARKRED: Color = Color::new(139, 0, 0, 255); + pub const PINK: Color = Color::new(255, 192, 203, 255); + pub const LIGHTPINK: Color = Color::new(255, 182, 193, 255); + pub const HOTPINK: Color = Color::new(255, 105, 180, 255); + pub const DEEPPINK: Color = Color::new(255, 20, 147, 255); + pub const MEDIUMVIOLETRED: Color = Color::new(199, 21, 133, 255); + pub const PALEVIOLETRED: Color = Color::new(219, 112, 147, 255); + pub const CORAL: Color = Color::new(255, 127, 80, 255); + pub const TOMATO: Color = Color::new(255, 99, 71, 255); + pub const ORANGERED: Color = Color::new(255, 69, 0, 255); + pub const DARKORANGE: Color = Color::new(255, 140, 0, 255); + pub const ORANGE: Color = Color::new(255, 165, 0, 255); + pub const GOLD: Color = Color::new(255, 215, 0, 255); + pub const YELLOW: Color = Color::new(255, 255, 0, 255); + pub const LIGHTYELLOW: Color = Color::new(255, 255, 224, 255); + pub const LEMONCHIFFON: Color = Color::new(255, 250, 205, 255); + pub const LIGHTGOLDENRODYELLOW: Color = Color::new(250, 250, 210, 255); + pub const PAPAYAWHIP: Color = Color::new(255, 239, 213, 255); + pub const MOCCASIN: Color = Color::new(255, 228, 181, 255); + pub const PEACHPUFF: Color = Color::new(255, 218, 185, 255); + pub const PALEGOLDENROD: Color = Color::new(238, 232, 170, 255); + pub const KHAKI: Color = Color::new(240, 230, 140, 255); + pub const DARKKHAKI: Color = Color::new(189, 183, 107, 255); + pub const LAVENDER: Color = Color::new(230, 230, 250, 255); + pub const THISTLE: Color = Color::new(216, 191, 216, 255); + pub const PLUM: Color = Color::new(221, 160, 221, 255); + pub const VIOLET: Color = Color::new(238, 130, 238, 255); + pub const ORCHID: Color = Color::new(218, 112, 214, 255); + pub const FUCHSIA: Color = Color::new(255, 0, 255, 255); + pub const MAGENTA: Color = Color::new(255, 0, 255, 255); + pub const MEDIUMORCHID: Color = Color::new(186, 85, 211, 255); + pub const MEDIUMPURPLE: Color = Color::new(147, 112, 219, 255); + pub const REBECCAPURPLE: Color = Color::new(102, 51, 153, 255); + pub const BLUEVIOLET: Color = Color::new(138, 43, 226, 255); + pub const DARKVIOLET: Color = Color::new(148, 0, 211, 255); + pub const DARKORCHID: Color = Color::new(153, 50, 204, 255); + pub const DARKMAGENTA: Color = Color::new(139, 0, 139, 255); + pub const PURPLE: Color = Color::new(128, 0, 128, 255); + pub const DARKPURPLE: Color = Color::new(112, 31, 126, 255); + pub const INDIGO: Color = Color::new(75, 0, 130, 255); + pub const SLATEBLUE: Color = Color::new(106, 90, 205, 255); + pub const DARKSLATEBLUE: Color = Color::new(72, 61, 139, 255); + pub const MEDIUMSLATEBLUE: Color = Color::new(123, 104, 238, 255); + pub const GREENYELLOW: Color = Color::new(173, 255, 47, 255); + pub const CHARTREUSE: Color = Color::new(127, 255, 0, 255); + pub const LAWNGREEN: Color = Color::new(124, 252, 0, 255); + pub const LIME: Color = Color::new(0, 255, 0, 255); + pub const LIMEGREEN: Color = Color::new(50, 205, 50, 255); + pub const PALEGREEN: Color = Color::new(152, 251, 152, 255); + pub const LIGHTGREEN: Color = Color::new(144, 238, 144, 255); + pub const MEDIUMSPRINGGREEN: Color = Color::new(0, 250, 154, 255); + pub const SPRINGGREEN: Color = Color::new(0, 255, 127, 255); + pub const MEDIUMSEAGREEN: Color = Color::new(60, 179, 113, 255); + pub const SEAGREEN: Color = Color::new(46, 139, 87, 255); + pub const FORESTGREEN: Color = Color::new(34, 139, 34, 255); + pub const GREEN: Color = Color::new(0, 128, 0, 255); + pub const DARKGREEN: Color = Color::new(0, 100, 0, 255); + pub const YELLOWGREEN: Color = Color::new(154, 205, 50, 255); + pub const OLIVEDRAB: Color = Color::new(107, 142, 35, 255); + pub const OLIVE: Color = Color::new(128, 128, 0, 255); + pub const DARKOLIVEGREEN: Color = Color::new(85, 107, 47, 255); + pub const MEDIUMAQUAMARINE: Color = Color::new(102, 205, 170, 255); + pub const DARKSEAGREEN: Color = Color::new(143, 188, 139, 255); + pub const LIGHTSEAGREEN: Color = Color::new(32, 178, 170, 255); + pub const DARKCYAN: Color = Color::new(0, 139, 139, 255); + pub const TEAL: Color = Color::new(0, 128, 128, 255); + pub const AQUA: Color = Color::new(0, 255, 255, 255); + pub const CYAN: Color = Color::new(0, 255, 255, 255); + pub const LIGHTCYAN: Color = Color::new(224, 255, 255, 255); + pub const PALETURQUOISE: Color = Color::new(175, 238, 238, 255); + pub const AQUAMARINE: Color = Color::new(127, 255, 212, 255); + pub const TURQUOISE: Color = Color::new(64, 224, 208, 255); + pub const MEDIUMTURQUOISE: Color = Color::new(72, 209, 204, 255); + pub const DARKTURQUOISE: Color = Color::new(0, 206, 209, 255); + pub const CADETBLUE: Color = Color::new(95, 158, 160, 255); + pub const STEELBLUE: Color = Color::new(70, 130, 180, 255); + pub const LIGHTSTEELBLUE: Color = Color::new(176, 196, 222, 255); + pub const POWDERBLUE: Color = Color::new(176, 224, 230, 255); + pub const LIGHTBLUE: Color = Color::new(173, 216, 230, 255); + pub const SKYBLUE: Color = Color::new(135, 206, 235, 255); + pub const LIGHTSKYBLUE: Color = Color::new(135, 206, 250, 255); + pub const DEEPSKYBLUE: Color = Color::new(0, 191, 255, 255); + pub const DODGERBLUE: Color = Color::new(30, 144, 255, 255); + pub const CORNFLOWERBLUE: Color = Color::new(100, 149, 237, 255); + pub const ROYALBLUE: Color = Color::new(65, 105, 225, 255); + pub const BLUE: Color = Color::new(0, 0, 255, 255); + pub const MEDIUMBLUE: Color = Color::new(0, 0, 205, 255); + pub const DARKBLUE: Color = Color::new(0, 0, 139, 255); + pub const NAVY: Color = Color::new(0, 0, 128, 255); + pub const MIDNIGHTBLUE: Color = Color::new(25, 25, 112, 255); + pub const CORNSILK: Color = Color::new(255, 248, 220, 255); + pub const BLANCHEDALMOND: Color = Color::new(255, 235, 205, 255); + pub const BISQUE: Color = Color::new(255, 228, 196, 255); + pub const NAVAJOWHITE: Color = Color::new(255, 222, 173, 255); + pub const WHEAT: Color = Color::new(245, 222, 179, 255); + pub const BURLYWOOD: Color = Color::new(222, 184, 135, 255); + pub const TAN: Color = Color::new(210, 180, 140, 255); + pub const ROSYBROWN: Color = Color::new(188, 143, 143, 255); + pub const SANDYBROWN: Color = Color::new(244, 164, 96, 255); + pub const GOLDENROD: Color = Color::new(218, 165, 32, 255); + pub const DARKGOLDENROD: Color = Color::new(184, 134, 11, 255); + pub const PERU: Color = Color::new(205, 133, 63, 255); + pub const CHOCOLATE: Color = Color::new(210, 105, 30, 255); + pub const SADDLEBROWN: Color = Color::new(139, 69, 19, 255); + pub const SIENNA: Color = Color::new(160, 82, 45, 255); + pub const BROWN: Color = Color::new(165, 42, 42, 255); + pub const DARKBROWN: Color = Color::new(76, 63, 47, 255); + pub const MAROON: Color = Color::new(128, 0, 0, 255); + pub const WHITE: Color = Color::new(255, 255, 255, 255); + pub const SNOW: Color = Color::new(255, 250, 250, 255); + pub const HONEYDEW: Color = Color::new(240, 255, 240, 255); + pub const MINTCREAM: Color = Color::new(245, 255, 250, 255); + pub const AZURE: Color = Color::new(240, 255, 255, 255); + pub const ALICEBLUE: Color = Color::new(240, 248, 255, 255); + pub const GHOSTWHITE: Color = Color::new(248, 248, 255, 255); + pub const WHITESMOKE: Color = Color::new(245, 245, 245, 255); + pub const SEASHELL: Color = Color::new(255, 245, 238, 255); + pub const BEIGE: Color = Color::new(245, 245, 220, 255); + pub const OLDLACE: Color = Color::new(253, 245, 230, 255); + pub const FLORALWHITE: Color = Color::new(255, 250, 240, 255); + pub const IVORY: Color = Color::new(255, 255, 240, 255); + pub const ANTIQUEWHITE: Color = Color::new(250, 235, 215, 255); + pub const LINEN: Color = Color::new(250, 240, 230, 255); + pub const LAVENDERBLUSH: Color = Color::new(255, 240, 245, 255); + pub const MISTYROSE: Color = Color::new(255, 228, 225, 255); + pub const GAINSBORO: Color = Color::new(220, 220, 220, 255); + pub const LIGHTGRAY: Color = Color::new(211, 211, 211, 255); + pub const SILVER: Color = Color::new(192, 192, 192, 255); + pub const DARKGRAY: Color = Color::new(169, 169, 169, 255); + pub const GRAY: Color = Color::new(128, 128, 128, 255); + pub const DIMGRAY: Color = Color::new(105, 105, 105, 255); + pub const LIGHTSLATEGRAY: Color = Color::new(119, 136, 153, 255); + pub const SLATEGRAY: Color = Color::new(112, 128, 144, 255); + pub const DARKSLATEGRAY: Color = Color::new(47, 79, 79, 255); + pub const BLACK: Color = Color::new(0, 0, 0, 255); + pub const BLANK: Color = Color::new(0, 0, 0, 0); + pub const RAYWHITE: Color = Color::new(245, 245, 245, 255); +} diff --git a/raylib-sys/src/lib.rs b/raylib-sys/src/lib.rs index c64a12e5..f16d5ea2 100644 --- a/raylib-sys/src/lib.rs +++ b/raylib-sys/src/lib.rs @@ -1,7 +1,22 @@ #![allow(non_upper_case_globals)] #![allow(non_camel_case_types)] #![allow(non_snake_case)] + +pub use mint; +pub type Vector2 = mint::Vector2; +pub type Vector3 = mint::Vector3; +pub type Vector4 = mint::Vector4; +pub type Matrix = mint::ColumnMatrix4; +pub type Quaternion = mint::Quaternion; + include!(concat!(env!("OUT_DIR"), "/bindings.rs")); -#[cfg(target_os = "macos")] -pub const MAX_MATERIAL_MAPS: u32 = 12; \ No newline at end of file +pub const MAX_MATERIAL_MAPS: u32 = 12; + +mod camera; +mod color; +mod math; + +pub use camera::*; +pub use color::*; +pub use math::*; diff --git a/raylib-sys/src/math.rs b/raylib-sys/src/math.rs new file mode 100644 index 00000000..f0182396 --- /dev/null +++ b/raylib-sys/src/math.rs @@ -0,0 +1,69 @@ +use crate::{BoundingBox, Ray, RayCollision, Rectangle, Vector2, Vector3}; + +impl Rectangle { + pub fn new(x: f32, y: f32, width: f32, height: f32) -> Self { + Self { + x, + y, + width, + height, + } + } + + /// Check collision between two rectangles + #[inline] + pub fn check_collision_recs(&self, other: Rectangle) -> bool { + unsafe { crate::CheckCollisionRecs(*self, other) } + } + + /// Checks collision between circle and rectangle. + #[inline] + pub fn check_collision_circle_rec(&self, center: impl Into, radius: f32) -> bool { + unsafe { crate::CheckCollisionCircleRec(center.into(), radius, *self) } + } + + /// Gets the overlap between two colliding rectangles. + /// ```rust + /// use raylib::prelude::*; + /// + /// let r1 = Rectangle::new(0.0, 0.0, 10.0, 10.0); + /// let r2 = Rectangle::new(20.0, 20.0, 10.0, 10.0); + /// assert_eq!(None, r1.get_collision_rec(&r2)); + /// assert_eq!(Some(r1), r1.get_collision_rec(&r1)); + /// ``` + #[inline] + pub fn get_collision_rec(&self, other: Rectangle) -> Option { + self.check_collision_recs(other) + .then(|| unsafe { crate::GetCollisionRec(*self, other) }) + } + + /// Checks if point is inside rectangle. + #[inline] + pub fn check_collision_point_rec(&self, point: impl Into) -> bool { + unsafe { crate::CheckCollisionPointRec(point.into(), *self) } + } +} + +impl BoundingBox { + /// Detects collision between two boxes. + #[inline] + pub fn check_collision_boxes(&self, box2: BoundingBox) -> bool { + unsafe { crate::CheckCollisionBoxes(*self, box2) } + } + + /// Detects collision between box and sphere. + #[inline] + pub fn check_collision_box_sphere( + &self, + center_sphere: impl Into, + radius_sphere: f32, + ) -> bool { + unsafe { crate::CheckCollisionBoxSphere(*self, center_sphere.into(), radius_sphere) } + } + + /// Detects collision between ray and box. + #[inline] + pub fn get_ray_collision_box(&self, ray: Ray) -> RayCollision { + unsafe { crate::GetRayCollisionBox(ray, *self) } + } +} diff --git a/raylib-test/Cargo.toml b/raylib-test/Cargo.toml index b4ab37d7..9624d32f 100644 --- a/raylib-test/Cargo.toml +++ b/raylib-test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "raylib-test" -version = "3.7.0" +version = "4.5.0" authors = ["David Ayeke"] edition = "2018" license = "Zlib" @@ -9,5 +9,5 @@ repository = "https://github.com/deltaphc/raylib-rs" [dependencies] -raylib = { version = "3.7", path = "../raylib" } +raylib = { version = "4.5", path = "../raylib" } lazy_static = "1.2.0" diff --git a/raylib-test/src/drawing.rs b/raylib-test/src/drawing.rs index 87a8d82f..2b84b57f 100644 --- a/raylib-test/src/drawing.rs +++ b/raylib-test/src/drawing.rs @@ -3,13 +3,13 @@ mod draw_test { use crate::tests::*; use raylib::prelude::*; ray_draw_test!(test_pixel); - fn test_pixel(d: &mut RaylibDrawHandle, _: &TestAssets) { + fn test_pixel(d: &RaylibDrawHandle, _: &TestAssets) { d.clear_background(Color::WHITE); d.draw_pixel(10, 10, Color::RED); d.draw_pixel_v(Vector2::new(20.0, 20.0), Color::RED); } ray_draw_test!(test_line); - fn test_line(d: &mut RaylibDrawHandle, _: &TestAssets) { + fn test_line(d: &RaylibDrawHandle, _: &TestAssets) { d.clear_background(Color::WHITE); d.draw_line(0, 5, 100, 5, Color::RED); d.draw_line_v( @@ -31,7 +31,7 @@ mod draw_test { ); } ray_draw_test!(test_circle); - fn test_circle(d: &mut RaylibDrawHandle, _: &TestAssets) { + fn test_circle(d: &RaylibDrawHandle, _: &TestAssets) { d.clear_background(Color::WHITE); d.draw_circle(20, 20, 10.0, Color::RED); d.draw_circle_v(Vector2::new(40.0, 20.0), 10.0, Color::RED); @@ -60,7 +60,7 @@ mod draw_test { } ray_draw_test!(test_rectangle); - fn test_rectangle(d: &mut RaylibDrawHandle, _: &TestAssets) { + fn test_rectangle(d: &RaylibDrawHandle, _: &TestAssets) { d.clear_background(Color::WHITE); d.draw_rectangle(10, 10, 10, 10, Color::RED); d.draw_rectangle_v( @@ -85,7 +85,7 @@ mod draw_test { Color::WHITE, ); d.draw_rectangle_lines(90, 10, 10, 10, Color::RED); - d.draw_rectangle_lines_ex(Rectangle::new(100.0, 10.0, 10.0, 10.0), 3, Color::GREEN); + d.draw_rectangle_lines_ex(Rectangle::new(100.0, 10.0, 10.0, 10.0), 3.0, Color::GREEN); d.draw_rectangle_rounded( Rectangle::new(110.0, 30.0, 100.0, 100.0), 0.1, @@ -96,13 +96,13 @@ mod draw_test { Rectangle::new(220.0, 30.0, 100.0, 100.0), 0.10, 5, - 3, + 3.0, Color::ORANGE, ); } ray_draw_test!(test_triangle); - fn test_triangle(d: &mut RaylibDrawHandle, _: &TestAssets) { + fn test_triangle(d: &RaylibDrawHandle, _: &TestAssets) { d.clear_background(Color::WHITE); d.draw_triangle( Vector2::new(30.0, 30.0), @@ -119,7 +119,7 @@ mod draw_test { } ray_draw_test!(test_poly); - fn test_poly(d: &mut RaylibDrawHandle, _: &TestAssets) { + fn test_poly(d: &RaylibDrawHandle, _: &TestAssets) { d.clear_background(Color::WHITE); d.draw_poly(Vector2::new(100.0, 100.0), 12, 20.0, 45.0, Color::RED); } diff --git a/raylib-test/src/misc.rs b/raylib-test/src/misc.rs index 3e43e883..a4279621 100644 --- a/raylib-test/src/misc.rs +++ b/raylib-test/src/misc.rs @@ -15,6 +15,6 @@ mod core_test { let mut handle = TEST_HANDLE.write().unwrap(); let rl = handle.as_mut().unwrap(); // make sure it doesn't seg fault - let _ = rl.get_screen_data(t); + let _ = rl.load_image_from_screen(t); } } diff --git a/raylib-test/src/texture.rs b/raylib-test/src/texture.rs index cbdeed14..720b6ae7 100644 --- a/raylib-test/src/texture.rs +++ b/raylib-test/src/texture.rs @@ -10,27 +10,6 @@ mod texture_test { i.export_image_as_code("test_out/billboard_code.h"); } - #[test] - fn test_image_load_ex() { - let mut col = Vec::new(); - for _ in 0..32 { - for _ in 0..32 { - col.push(Color::RED); - } - } - let i = Image::load_image_ex(&col, 32, 32).expect("failed to load binary image"); - assert_eq!( - i.get_image_data().len(), - 32 * 32, - "failed to read pixels of image" - ); - assert_eq!( - i.get_image_data_normalized().len(), - 32 * 32, - "failed to read pixels of image normalized" - ); - } - ray_test!(test_texture_load); fn test_texture_load(thread: &RaylibThread) { let i = @@ -44,7 +23,7 @@ mod texture_test { .load_texture_from_image(thread, &i) .expect("could not load texture from image"); let _ = t - .get_texture_data() + .load_image() .expect("can't get an image from a texture created from an image..."); i.export_image("test_out/billboard_texture.png"); } @@ -75,9 +54,10 @@ mod texture_test { } } - let mut i = Image::load_image_ex(&col, 32, 32).expect("failed to load binary image"); - let mut canvas = Image::load_image_ex(&blank, 32, 32).expect("failed to load canvas image"); - let mask = Image::load_image_ex(&alpha, 32, 32).expect("failed to load alpha image"); + let mut i = Image::gen_image_color(32, 32, Color::RED); + let mut canvas = Image::gen_image_color(32, 32, Color::BLANK); + // let mask = Image::load_image_ex(&alpha, 32, 32).expect("failed to load alpha image"); + let mask = Image::gen_image_checked(32, 32, 8, 8, Color::WHITE, Color::BLANK); let mut c = i.clone(); diff --git a/raylib-test/src/window.rs b/raylib-test/src/window.rs index a1517219..106626bf 100644 --- a/raylib-test/src/window.rs +++ b/raylib-test/src/window.rs @@ -1,6 +1,6 @@ #[cfg(test)] mod core_test { - + use crate::tests::*; use raylib::camera::*; use raylib::math::*; @@ -40,22 +40,31 @@ mod core_test { rl.get_time(); } + fn set_window_hidden(rl: &mut raylib::RaylibHandle, hidden: bool) { + let state = rl.get_window_state().set_window_hidden(hidden); + rl.set_window_state(state); + } + #[test] #[cfg(not(target_os = "windows"))] + // does not work (too fast?) + #[ignore] fn test_window_ops() { // Call twice to make sure multiple calls won't panic let mut handle = TEST_HANDLE.write().unwrap(); let rl = handle.as_mut().unwrap(); + // check initial state + assert!(!rl.is_window_hidden(), "window is hidden!"); + // double hide double show - rl.hide_window(); - rl.hide_window(); - // TODO uncomment this when we can draw a frame - // assert!(rl.is_window_hidden(), "window is not hidden!"); + set_window_hidden(rl, true); + set_window_hidden(rl, true); + assert!(rl.is_window_hidden(), "window is not hidden!"); - rl.unhide_window(); - rl.unhide_window(); - // assert!(!rl.is_window_hidden(), "window is hidden!"); + set_window_hidden(rl, false); + set_window_hidden(rl, false); + assert!(!rl.is_window_hidden(), "window is hidden!"); } ray_test!(test_set_window_name); diff --git a/raylib/Cargo.toml b/raylib/Cargo.toml index 3fa36daa..0b2148bd 100644 --- a/raylib/Cargo.toml +++ b/raylib/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "raylib" -version = "3.7.0" -authors = ["DeltaPHC "] +version = "4.5.0" +authors = ["DeltaPHC ", "Mia Ayeke ", "Teddy Astie "] license = "Zlib" readme = "../README.md" description = "Safe Rust bindings for Raylib." @@ -9,22 +9,21 @@ documentation = "https://docs.rs/raylib" repository = "https://github.com/deltaphc/raylib-rs" keywords = ["bindings", "raylib", "gamedev"] categories = ["api-bindings", "game-engines", "graphics"] -edition = "2018" +edition = "2021" [dependencies] -raylib-sys = { version = "= 3.7.0", path = "../raylib-sys" } -libc = "0.2.45" +raylib-sys = { version = "= 4.5.0", path = "../raylib-sys" } +libc = "0.2.137" lazy_static = "1.2.0" cfg-if = "1.0.0" serde = { version = "1.0.125", features = ["derive"], optional = true } serde_json = { version = "1.0.64", optional = true } -nalgebra = { version = "0.26", optional = true } [features] nightly = [] nobuild = ["raylib-sys/nobuild"] with_serde = ["serde", "serde_json"] -nalgebra_interop = ["nalgebra"] +wayland = ["raylib-sys/wayland"] [package.metadata.docs.rs] features = ["nobuild"] diff --git a/raylib/src/core/audio.rs b/raylib/src/audio.rs similarity index 70% rename from raylib/src/core/audio.rs rename to raylib/src/audio.rs index 29a8780e..f1c374bc 100644 --- a/raylib/src/core/audio.rs +++ b/raylib/src/audio.rs @@ -1,16 +1,17 @@ //! Contains code related to audio. [`RaylibAudio`] plays sounds and music. - -use crate::core::RaylibThread; -use crate::ffi; +use crate::{buffer::RaylibBuffer, core::RaylibThread}; +use crate::{ffi, make_bound_thin_wrapper, make_thin_wrapper}; use std::ffi::CString; -use std::mem::ManuallyDrop; make_thin_wrapper!(Wave, ffi::Wave, ffi::UnloadWave); -make_thin_wrapper!(Sound, ffi::Sound, ffi::UnloadSound); -make_thin_wrapper!(Music, ffi::Music, ffi::UnloadMusicStream); -make_thin_wrapper!(AudioStream, ffi::AudioStream, ffi::CloseAudioStream); - -make_rslice!(WaveSamples, f32, ffi::UnloadWaveSamples); +make_bound_thin_wrapper!(Sound, ffi::Sound, ffi::UnloadSound, RaylibAudio); +make_bound_thin_wrapper!(Music, ffi::Music, ffi::UnloadMusicStream, RaylibAudio); +make_bound_thin_wrapper!( + AudioStream, + ffi::AudioStream, + ffi::UnloadAudioStream, + RaylibAudio +); /// A marker trait specifying an audio sample (`u8`, `i16`, or `f32`). pub trait AudioSample {} @@ -18,7 +19,7 @@ impl AudioSample for u8 {} impl AudioSample for i16 {} impl AudioSample for f32 {} -/// This token is used to indicate VR is initialized +/// This token is used to indicate audio is initialized #[derive(Debug)] pub struct RaylibAudio(()); @@ -46,31 +47,17 @@ impl RaylibAudio { } } - /// Get number of sounds playing in the multichannel - #[inline] - pub fn get_sounds_playing(&self) -> i32 { - unsafe { ffi::GetSoundsPlaying() } - } - /// Plays a sound. #[inline] - pub fn play_sound(&mut self, sound: &Sound) { + pub fn play_sound(&self, sound: &Sound) { unsafe { ffi::PlaySound(sound.0); } } - /// Play a sound (using multichannel buffer pool) - #[inline] - pub fn play_sound_multi(&mut self, sound: &Sound) { - unsafe { - ffi::PlaySoundMulti(sound.0); - } - } - /// Pauses a sound. #[inline] - pub fn pause_sound(&mut self, sound: &Sound) { + pub fn pause_sound(&self, sound: &Sound) { unsafe { ffi::PauseSound(sound.0); } @@ -78,7 +65,7 @@ impl RaylibAudio { /// Resumes a paused sound. #[inline] - pub fn resume_sound(&mut self, sound: &Sound) { + pub fn resume_sound(&self, sound: &Sound) { unsafe { ffi::ResumeSound(sound.0); } @@ -86,20 +73,12 @@ impl RaylibAudio { /// Stops playing a sound. #[inline] - pub fn stop_sound(&mut self, sound: &Sound) { + pub fn stop_sound(&self, sound: &Sound) { unsafe { ffi::StopSound(sound.0); } } - /// Stops playing a sound. - #[inline] - pub fn stop_sound_multi(&mut self) { - unsafe { - ffi::StopSoundMulti(); - } - } - /// Checks if a sound is currently playing. #[inline] pub fn is_sound_playing(&self, sound: &Sound) -> bool { @@ -108,7 +87,7 @@ impl RaylibAudio { /// Sets volume for a sound (`1.0` is max level). #[inline] - pub fn set_sound_volume(&mut self, sound: &Sound, volume: f32) { + pub fn set_sound_volume(&self, sound: &Sound, volume: f32) { unsafe { ffi::SetSoundVolume(sound.0, volume); } @@ -116,7 +95,7 @@ impl RaylibAudio { /// Sets pitch for a sound (`1.0` is base level). #[inline] - pub fn set_sound_pitch(&mut self, sound: &Sound, pitch: f32) { + pub fn set_sound_pitch(&self, sound: &Sound, pitch: f32) { unsafe { ffi::SetSoundPitch(sound.0, pitch); } @@ -124,7 +103,7 @@ impl RaylibAudio { /// Starts music playing. #[inline] - pub fn play_music_stream(&mut self, music: &mut Music) { + pub fn play_music_stream(&self, music: &mut Music) { unsafe { ffi::PlayMusicStream(music.0); } @@ -132,7 +111,7 @@ impl RaylibAudio { /// Updates buffers for music streaming. #[inline] - pub fn update_music_stream(&mut self, music: &mut Music) { + pub fn update_music_stream(&self, music: &mut Music) { unsafe { ffi::UpdateMusicStream(music.0); } @@ -140,7 +119,7 @@ impl RaylibAudio { /// Stops music playing. #[inline] - pub fn stop_music_stream(&mut self, music: &mut Music) { + pub fn stop_music_stream(&self, music: &mut Music) { unsafe { ffi::StopMusicStream(music.0); } @@ -148,7 +127,7 @@ impl RaylibAudio { /// Pauses music playing. #[inline] - pub fn pause_music_stream(&mut self, music: &mut Music) { + pub fn pause_music_stream(&self, music: &mut Music) { unsafe { ffi::PauseMusicStream(music.0); } @@ -156,7 +135,7 @@ impl RaylibAudio { /// Resumes playing paused music. #[inline] - pub fn resume_music_stream(&mut self, music: &mut Music) { + pub fn resume_music_stream(&self, music: &mut Music) { unsafe { ffi::ResumeMusicStream(music.0); } @@ -164,13 +143,13 @@ impl RaylibAudio { /// Checks if music is playing. #[inline] - pub fn is_music_playing(&self, music: &Music) -> bool { - unsafe { ffi::IsMusicPlaying(music.0) } + pub fn is_music_stream_playing(&self, music: &Music) -> bool { + unsafe { ffi::IsMusicStreamPlaying(music.0) } } /// Sets volume for music (`1.0` is max level). #[inline] - pub fn set_music_volume(&mut self, music: &mut Music, volume: f32) { + pub fn set_music_volume(&self, music: &mut Music, volume: f32) { unsafe { ffi::SetMusicVolume(music.0, volume); } @@ -178,7 +157,7 @@ impl RaylibAudio { /// Sets pitch for music (`1.0` is base level). #[inline] - pub fn set_music_pitch(&mut self, music: &mut Music, pitch: f32) { + pub fn set_music_pitch(&self, music: &mut Music, pitch: f32) { unsafe { ffi::SetMusicPitch(music.0, pitch); } @@ -198,7 +177,7 @@ impl RaylibAudio { /// Plays audio stream. #[inline] - pub fn play_audio_stream(&mut self, stream: &mut AudioStream) { + pub fn play_audio_stream(&self, stream: &mut AudioStream) { unsafe { ffi::PlayAudioStream(stream.0); } @@ -206,7 +185,7 @@ impl RaylibAudio { /// Pauses audio stream. #[inline] - pub fn pause_audio_stream(&mut self, stream: &mut AudioStream) { + pub fn pause_audio_stream(&self, stream: &mut AudioStream) { unsafe { ffi::PauseAudioStream(stream.0); } @@ -214,7 +193,7 @@ impl RaylibAudio { /// Resumes audio stream. #[inline] - pub fn resume_audio_stream(&mut self, stream: &mut AudioStream) { + pub fn resume_audio_stream(&self, stream: &mut AudioStream) { unsafe { ffi::ResumeAudioStream(stream.0); } @@ -228,7 +207,7 @@ impl RaylibAudio { /// Stops audio stream. #[inline] - pub fn stop_audio_stream(&mut self, stream: &mut AudioStream) { + pub fn stop_audio_stream(&self, stream: &mut AudioStream) { unsafe { ffi::StopAudioStream(stream.0); } @@ -236,7 +215,7 @@ impl RaylibAudio { /// Sets volume for audio stream (`1.0` is max level). #[inline] - pub fn set_audio_stream_volume(&mut self, stream: &mut AudioStream, volume: f32) { + pub fn set_audio_stream_volume(&self, stream: &mut AudioStream, volume: f32) { unsafe { ffi::SetAudioStreamVolume(stream.0, volume); } @@ -244,7 +223,7 @@ impl RaylibAudio { /// Sets pitch for audio stream (`1.0` is base level). #[inline] - pub fn set_audio_stream_pitch(&mut self, stream: &mut AudioStream, pitch: f32) { + pub fn set_audio_stream_pitch(&self, stream: &mut AudioStream, pitch: f32) { unsafe { ffi::SetAudioStreamPitch(stream.0, pitch); } @@ -252,7 +231,7 @@ impl RaylibAudio { /// Sets pitch for audio stream (`1.0` is base level). #[inline] - pub fn is_audio_stream_processed(&mut self, stream: &AudioStream) -> bool { + pub fn is_audio_stream_processed(&self, stream: &AudioStream) -> bool { unsafe { ffi::IsAudioStreamProcessed(stream.0) } } } @@ -260,15 +239,14 @@ impl RaylibAudio { impl Drop for RaylibAudio { fn drop(&mut self) { unsafe { - ffi::StopSoundMulti(); ffi::CloseAudioDevice(); } } } impl Wave { - pub fn sample_count(&self) -> u32 { - self.0.sampleCount + pub fn frame_count(&self) -> u32 { + self.0.frameCount } pub fn smaple_rate(&self) -> u32 { self.0.sampleRate @@ -335,33 +313,28 @@ impl Wave { /// NOTE 1: Returned sample values are normalized to range [-1..1] /// NOTE 2: Sample data allocated should be freed with UnloadWaveSamples() #[inline] - pub fn load_wave_samples(&self) -> WaveSamples { - let as_slice = unsafe { - let data = ffi::LoadWaveSamples(self.0); - Box::from_raw(std::slice::from_raw_parts_mut( - data, - self.sample_count() as usize, - )) - }; - WaveSamples(ManuallyDrop::new(as_slice)) + pub fn load_wave_samples(&self) -> RaylibBuffer<'static, f32> { + unsafe { + RaylibBuffer::new(ffi::LoadWaveSamples(self.0), self.frame_count() as usize).unwrap() + } } } -impl AsRef for Sound { +impl AsRef for Sound<'_, '_> { fn as_ref(&self) -> &ffi::AudioStream { &self.0.stream } } -impl AsMut for Sound { +impl AsMut for Sound<'_, '_> { fn as_mut(&mut self) -> &mut ffi::AudioStream { &mut self.0.stream } } -impl Sound { - pub fn sample_count(&self) -> u32 { - self.0.sampleCount +impl<'bind, 'a> Sound<'bind, 'a> { + pub fn frame_count(&self) -> u32 { + self.0.frameCount } pub unsafe fn inner(self) -> ffi::Sound { let inner = self.0; @@ -369,22 +342,25 @@ impl Sound { inner } /// Loads sound from file. - pub fn load_sound(filename: &str) -> Result { + pub fn load_sound(_: &'bind RaylibAudio, filename: &str) -> Result, String> { let c_filename = CString::new(filename).unwrap(); let s = unsafe { ffi::LoadSound(c_filename.as_ptr()) }; if s.stream.buffer.is_null() { return Err(format!("failed to load sound {}", filename)); } - Ok(Sound(s)) + Ok(unsafe { Sound::from_raw(s) }) } /// Loads sound from wave data. - pub fn load_sound_from_wave(wave: &Wave) -> Result { + pub fn load_sound_from_wave( + _: &'bind RaylibAudio, + wave: &Wave, + ) -> Result, String> { let s = unsafe { ffi::LoadSoundFromWave(wave.0) }; if s.stream.buffer.is_null() { - return Err(format!("failed to load sound from wave")); + return Err("failed to load sound from wave".to_string()); } - Ok(Sound(s)) + Ok(unsafe { Sound::from_raw(s) }) } // Figure out how to make this safe @@ -401,20 +377,24 @@ impl Sound { // } } -impl Music { +impl<'bind, 'a> Music<'bind, 'a> { /// Loads music stream from file. // #[inline] - pub fn load_music_stream(_: &RaylibThread, filename: &str) -> Result { + pub fn load_music_stream( + _: &'bind RaylibAudio, + _: &RaylibThread, + filename: &str, + ) -> Result, String> { let c_filename = CString::new(filename).unwrap(); let m = unsafe { ffi::LoadMusicStream(c_filename.as_ptr()) }; if m.stream.buffer.is_null() { return Err(format!("music could not be loaded from file {}", filename)); } - Ok(Music(m)) + Ok(unsafe { Music::from_raw(m) }) } } -impl AudioStream { +impl<'bind, 'a> AudioStream<'bind, 'a> { pub fn sample_rate(&self) -> u32 { self.0.sampleRate } @@ -432,24 +412,21 @@ impl AudioStream { } /// Initializes audio stream (to stream raw PCM data). #[inline] - pub fn init_audio_stream( + pub fn load_audio_stream( + _: &'bind RaylibAudio, _: &RaylibThread, sample_rate: u32, sample_size: u32, channels: u32, - ) -> AudioStream { - unsafe { AudioStream(ffi::InitAudioStream(sample_rate, sample_size, channels)) } + ) -> AudioStream<'bind, 'a> { + unsafe { AudioStream::from_raw(ffi::LoadAudioStream(sample_rate, sample_size, channels)) } } /// Updates audio stream buffers with data. #[inline] pub fn update_audio_stream(&mut self, data: &[T]) { - unsafe { - ffi::UpdateAudioStream( - self.0, - data.as_ptr() as *const std::os::raw::c_void, - (data.len() * std::mem::size_of::()) as i32, - ); - } + assert_eq!(self.0.sampleSize as usize, core::mem::size_of::() * 8); + + unsafe { ffi::UpdateAudioStream(self.0, data.as_ptr() as _, data.len() as i32) } } } diff --git a/raylib/src/buffer.rs b/raylib/src/buffer.rs new file mode 100644 index 00000000..c912e0ef --- /dev/null +++ b/raylib/src/buffer.rs @@ -0,0 +1,61 @@ +use std::{marker::PhantomData, ops::Index, ptr::NonNull, slice}; + +use crate::ffi; + +#[repr(transparent)] +pub(crate) struct ContigousBuffer<'a, T>(NonNull, PhantomData<&'a T>); + +impl<'a, T> ContigousBuffer<'a, T> { + pub fn new(buffer: *mut T) -> Option { + NonNull::new(buffer).and_then(|p| Some(ContigousBuffer(p, PhantomData))) + } + + pub unsafe fn get_slice(&'a self, len: usize) -> &'a [T] { + slice::from_raw_parts(self.0.as_ptr(), len) + } + + pub unsafe fn get_mut_slice(&'a mut self, len: usize) -> &'a mut [T] { + slice::from_raw_parts_mut(self.0.as_ptr(), len) + } + + pub fn get_ptr(&self) -> *mut T { + self.0.as_ptr() + } +} + +pub struct RaylibBuffer<'a, T>(&'a mut [T], ContigousBuffer<'a, T>); + +impl<'a, T> RaylibBuffer<'a, T> { + pub unsafe fn new(data: *mut T, len: usize) -> Option { + Some(RaylibBuffer( + slice::from_raw_parts_mut(data, len), + ContigousBuffer::new(data)?, + )) + } + + pub fn get_slice(&'a self) -> &'a [T] { + self.0 + } + + pub fn get_mut_slice(&'a mut self) -> &'a mut [T] { + self.0 + } + + pub fn get_ptr(&self) -> *mut T { + self.1.get_ptr() + } +} + +impl<'a, T> Index for RaylibBuffer<'a, T> { + type Output = T; + + fn index(&self, index: usize) -> &Self::Output { + unsafe { &*self.get_ptr().add(index) } + } +} + +impl<'a, T> Drop for RaylibBuffer<'a, T> { + fn drop(&mut self) { + unsafe { ffi::MemFree(self.1.get_ptr() as _) } + } +} diff --git a/raylib/src/consts.rs b/raylib/src/consts.rs deleted file mode 100644 index 557a933c..00000000 --- a/raylib/src/consts.rs +++ /dev/null @@ -1,46 +0,0 @@ -//! Various constant enums to use with raylib -pub use crate::ffi; - -pub use ffi::BlendMode; -pub use ffi::CameraMode; -pub use ffi::CameraProjection; -pub use ffi::ConfigFlags; -pub use ffi::CubemapLayout; -pub use ffi::GamepadAxis; -pub use ffi::GamepadButton; -pub use ffi::Gestures; -pub use ffi::KeyboardKey; -pub use ffi::MaterialMapIndex; -pub use ffi::MouseButton; -pub use ffi::NPatchLayout; -pub use ffi::PixelFormat; -pub use ffi::ShaderLocationIndex; -pub use ffi::ShaderUniformDataType; -pub use ffi::TextureFilter; -pub use ffi::TextureWrap; -pub use ffi::TraceLogLevel; -pub use ffi::DEG2RAD; -// TODO Fix when rlgl bindings are in -pub const MAX_MATERIAL_MAPS: u32 = 12; -pub const MAX_SHADER_LOCATIONS: u32 = 32; -pub use ffi::guiIconName; -pub use ffi::GuiCheckBoxProperty; -pub use ffi::GuiColorPickerProperty; -pub use ffi::GuiComboBoxProperty; -pub use ffi::GuiControl; -pub use ffi::GuiControlProperty; -pub use ffi::GuiControlState; -pub use ffi::GuiDefaultProperty; -pub use ffi::GuiDropdownBoxProperty; -pub use ffi::GuiListViewProperty; -pub use ffi::GuiProgressBarProperty; -pub use ffi::GuiScrollBarProperty; -pub use ffi::GuiScrollBarSide; -pub use ffi::GuiSliderProperty; -pub use ffi::GuiSpinnerProperty; -pub use ffi::GuiTextAlignment; -pub use ffi::GuiTextBoxProperty; -pub use ffi::GuiToggleProperty; -pub use ffi::MouseCursor; -pub use ffi::PI; -pub use ffi::RAD2DEG; diff --git a/raylib/src/core/camera.rs b/raylib/src/core/camera.rs index d2dd9f84..065a4795 100644 --- a/raylib/src/core/camera.rs +++ b/raylib/src/core/camera.rs @@ -1,166 +1,21 @@ //! Utility code for using Raylib [`Camera3D`] and [`Camera2D`] -use crate::core::math::{Vector2, Vector3}; -use crate::core::RaylibHandle; -use crate::ffi; - -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct Camera3D { - pub position: Vector3, - pub target: Vector3, - pub up: Vector3, - pub fovy: f32, - projection_: ffi::CameraProjection, -} -pub type Camera = Camera3D; - -impl From for Camera3D { - fn from(v: ffi::Camera3D) -> Camera3D { - unsafe { std::mem::transmute(v) } - } -} - -impl Into for Camera3D { - fn into(self) -> ffi::Camera3D { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Camera3D { - fn into(self) -> ffi::Camera3D { - ffi::Camera3D { - position: self.position.into(), - target: self.target.into(), - up: self.up.into(), - fovy: self.fovy, - projection: (self.projection_ as u32) as i32, - } - } -} - -#[repr(C)] -#[derive(Debug, Copy, Clone, Default)] -pub struct Camera2D { - pub offset: Vector2, - pub target: Vector2, - pub rotation: f32, - pub zoom: f32, -} - -impl From for Camera2D { - fn from(v: ffi::Camera2D) -> Camera2D { - unsafe { std::mem::transmute(v) } - } -} - -impl Into for Camera2D { - fn into(self) -> ffi::Camera2D { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Camera2D { - fn into(self) -> ffi::Camera2D { - ffi::Camera2D { - offset: self.offset.into(), - target: self.target.into(), - rotation: self.rotation, - zoom: self.zoom, - } - } -} - -impl Camera3D { - pub fn camera_type(&self) -> crate::consts::CameraProjection { - unsafe { std::mem::transmute(self.projection_.clone()) } - } - /// Create a perspective camera. - /// fovy is in degrees - pub fn perspective(position: Vector3, target: Vector3, up: Vector3, fovy: f32) -> Camera3D { - Camera3D { - position, - target, - up, - fovy, - projection_: ffi::CameraProjection::CAMERA_PERSPECTIVE, - } - } - /// Create a orthographic camera. - /// fovy is in degrees - pub fn orthographic(position: Vector3, target: Vector3, up: Vector3, fovy: f32) -> Camera3D { - let mut c = Self::perspective(position, target, up, fovy); - c.projection_ = ffi::CameraProjection::CAMERA_ORTHOGRAPHIC; - c - } -} - -impl RaylibHandle { - /// Sets camera mode. - #[inline] - pub fn set_camera_mode( - &mut self, - camera: impl Into, - mode: crate::consts::CameraMode, - ) { - unsafe { - ffi::SetCameraMode(camera.into(), mode as i32); - } - } +use super::RaylibHandle; +use crate::ffi::{self, Camera3D, CameraMode, Vector3}; +impl RaylibHandle<'_> { /// Updates camera position for selected mode. #[inline] - pub fn update_camera(&self, camera: &mut Camera3D) { - unsafe { - let mut fficam: ffi::Camera3D = (*camera).into(); - ffi::UpdateCamera(&mut fficam); - *camera = fficam.into(); - } + pub fn update_camera(&self, camera: &mut Camera3D, mode: CameraMode) { + unsafe { ffi::UpdateCamera(camera, mode as i32) } } - /// Sets camera pan key to combine with mouse movement (free camera). - #[inline] - pub fn set_camera_pan_control(&mut self, pan_key: crate::consts::KeyboardKey) { - unsafe { - ffi::SetCameraPanControl(pan_key as i32); - } - } - - /// Sets camera alt key to combine with mouse movement (free camera). - #[inline] - pub fn set_camera_alt_control(&mut self, alt_key: crate::consts::KeyboardKey) { - unsafe { - ffi::SetCameraAltControl(alt_key as i32); - } - } - - /// Sets camera smooth zoom key to combine with mouse (free camera). - #[inline] - pub fn set_camera_smooth_zoom_control(&mut self, sz_key: crate::consts::KeyboardKey) { - unsafe { - ffi::SetCameraSmoothZoomControl(sz_key as i32); - } - } - - /// Sets camera move controls (1st person and 3rd person cameras). - #[inline] - pub fn set_camera_move_controls( - &mut self, - front_key: crate::consts::KeyboardKey, - back_key: crate::consts::KeyboardKey, - right_key: crate::consts::KeyboardKey, - left_key: crate::consts::KeyboardKey, - up_key: crate::consts::KeyboardKey, - down_key: crate::consts::KeyboardKey, + pub fn update_camera_pro( + &self, + camera: &mut Camera3D, + movement: Vector3, + rotation: Vector3, + zoom: f32, ) { - unsafe { - ffi::SetCameraMoveControls( - front_key as i32, - back_key as i32, - right_key as i32, - left_key as i32, - up_key as i32, - down_key as i32, - ); - } + unsafe { ffi::UpdateCameraPro(camera, movement.into(), rotation.into(), zoom) } } } diff --git a/raylib/src/core/collision.rs b/raylib/src/core/collision.rs index ce47bbdf..9561073f 100644 --- a/raylib/src/core/collision.rs +++ b/raylib/src/core/collision.rs @@ -1,196 +1,108 @@ //! Common collision handling code -use crate::core::math::{BoundingBox, Ray, RayHitInfo, Rectangle, Vector2, Vector3}; -use crate::core::models::Model; -use crate::ffi; - -impl Rectangle { - /// Check collision between two rectangles - #[inline] - pub fn check_collision_recs(&self, other: &Rectangle) -> bool { - unsafe { ffi::CheckCollisionRecs(self.into(), other.into()) } - } - - /// Checks collision between circle and rectangle. - #[inline] - pub fn check_collision_circle_rec(&self, center: impl Into, radius: f32) -> bool { - unsafe { ffi::CheckCollisionCircleRec(center.into(), radius, self.into()) } - } - - /// Gets the overlap between two colliding rectangles. - /// ```rust - /// use raylib::prelude::*; - /// fn main() { - /// let r1 = Rectangle::new(0.0, 0.0, 10.0, 10.0); - /// let r2 = Rectangle::new(20.0, 20.0, 10.0, 10.0); - /// assert_eq!(None, r1.get_collision_rec(&r2)); - /// assert_eq!(Some(r1), r1.get_collision_rec(&r1)); - /// } - /// ``` - #[inline] - pub fn get_collision_rec(&self, other: &Rectangle) -> Option { - if self.check_collision_recs(other) { - return Some(unsafe { ffi::GetCollisionRec(self.into(), other.into()).into() }); - } - return None; - } - - /// Checks if point is inside rectangle. - #[inline] - pub fn check_collision_point_rec(&self, point: impl Into) -> bool { - unsafe { ffi::CheckCollisionPointRec(point.into(), self.into()) } - } -} +use super::models::Mesh; +use crate::ffi::{self, Matrix, Ray, RayCollision, Vector2, Vector3}; // Collision Handling /// Checks collision between two circles. #[inline] pub fn check_collision_circles( - center1: impl Into, + center1: Vector2, radius1: f32, - center2: impl Into, + center2: Vector2, radius2: f32, ) -> bool { - unsafe { ffi::CheckCollisionCircles(center1.into(), radius1, center2.into(), radius2) } + unsafe { ffi::CheckCollisionCircles(center1, radius1, center2, radius2) } } /// Checks if point is inside circle. #[inline] -pub fn check_collision_point_circle( - point: impl Into, - center: impl Into, - radius: f32, -) -> bool { - unsafe { ffi::CheckCollisionPointCircle(point.into(), center.into(), radius) } +pub fn check_collision_point_circle(point: Vector2, center: Vector2, radius: f32) -> bool { + unsafe { ffi::CheckCollisionPointCircle(point, center, radius) } } /// Checks if point is inside a triangle. #[inline] pub fn check_collision_point_triangle( - point: impl Into, - p1: impl Into, - p2: impl Into, - p3: impl Into, + point: Vector2, + p1: Vector2, + p2: Vector2, + p3: Vector2, ) -> bool { - unsafe { ffi::CheckCollisionPointTriangle(point.into(), p1.into(), p2.into(), p3.into()) } + unsafe { ffi::CheckCollisionPointTriangle(point, p1, p2, p3) } +} + +#[inline] +pub fn check_collision_point_poly(point: Vector2, points: &[Vector2]) -> bool { + unsafe { ffi::CheckCollisionPointPoly(point, points.as_ptr() as _, points.len() as _) } } /// Check the collision between two lines defined by two points each, returns collision point by reference #[inline] pub fn check_collision_lines( - start_pos1: impl Into, - end_pos1: impl Into, - start_pos2: impl Into, - end_pos2: impl Into, + start_pos1: Vector2, + end_pos1: Vector2, + start_pos2: Vector2, + end_pos2: Vector2, ) -> Option { let mut out = ffi::Vector2 { x: 0.0, y: 0.0 }; - let collision = unsafe { - ffi::CheckCollisionLines( - start_pos1.into(), - end_pos1.into(), - start_pos2.into(), - end_pos2.into(), - &mut out, - ) - }; - if collision { - return Some(out.into()); - } else { - return None; - } + let collision = + unsafe { ffi::CheckCollisionLines(start_pos1, end_pos1, start_pos2, end_pos2, &mut out) }; + + collision.then_some(out) +} + +#[inline] +pub fn check_collision_point_line( + point: Vector2, + p1: Vector2, + p2: Vector2, + threshold: i32, +) -> bool { + unsafe { ffi::CheckCollisionPointLine(point, p1, p2, threshold) } } /// Detects collision between two spheres. #[inline] pub fn check_collision_spheres( - center_a: impl Into, + center_a: Vector3, radius_a: f32, - center_b: impl Into, + center_b: Vector3, radius_b: f32, ) -> bool { - unsafe { ffi::CheckCollisionSpheres(center_a.into(), radius_a, center_b.into(), radius_b) } -} - -impl BoundingBox { - /// Detects collision between two boxes. - #[inline] - pub fn check_collision_boxes(&self, box2: BoundingBox) -> bool { - unsafe { ffi::CheckCollisionBoxes(self.into(), box2.into()) } - } - - /// Detects collision between box and sphere. - #[inline] - pub fn check_collision_box_sphere( - &self, - center_sphere: impl Into, - radius_sphere: f32, - ) -> bool { - unsafe { ffi::CheckCollisionBoxSphere(self.into(), center_sphere.into(), radius_sphere) } - } - - /// Detects collision between ray and box. - #[inline] - pub fn check_collision_ray_box(&self, ray: Ray) -> bool { - unsafe { ffi::CheckCollisionRayBox(ray.into(), self.into()) } - } + unsafe { ffi::CheckCollisionSpheres(center_a, radius_a, center_b, radius_b) } } /// Detects collision between ray and sphere. #[inline] -pub fn check_collision_ray_sphere( +pub fn get_ray_collision_sphere( ray: Ray, - sphere_position: impl Into, + sphere_position: Vector3, sphere_radius: f32, -) -> bool { - unsafe { ffi::CheckCollisionRaySphere(ray.into(), sphere_position.into(), sphere_radius) } -} - -/// Detects collision between ray and sphere, and returns the collision point. -#[inline] -pub fn check_collision_ray_sphere_ex( - ray: Ray, - sphere_position: impl Into, - sphere_radius: f32, -) -> Option { - unsafe { - let mut col_point = ffi::Vector3 { - x: 0.0, - y: 0.0, - z: 0.0, - }; - let collision = ffi::CheckCollisionRaySphereEx( - ray.into(), - sphere_position.into(), - sphere_radius, - &mut col_point, - ); - if collision { - Some(col_point.into()) - } else { - None - } - } +) -> RayCollision { + unsafe { ffi::GetRayCollisionSphere(ray, sphere_position, sphere_radius) } } /// Gets collision info between ray and model. #[inline] -pub fn get_collision_ray_model(ray: Ray, model: &Model) -> RayHitInfo { - unsafe { ffi::GetCollisionRayModel(ray.into(), model.0).into() } +pub fn get_ray_collision_mesh(ray: Ray, model: &Mesh, transform: Matrix) -> RayCollision { + unsafe { ffi::GetRayCollisionMesh(ray, model.0, transform) } } /// Gets collision info between ray and triangle. #[inline] -pub fn get_collision_ray_triangle( - ray: Ray, - p1: impl Into, - p2: impl Into, - p3: impl Into, -) -> RayHitInfo { - unsafe { ffi::GetCollisionRayTriangle(ray.into(), p1.into(), p2.into(), p3.into()).into() } +pub fn get_ray_collision_triangle(ray: Ray, p1: Vector3, p2: Vector3, p3: Vector3) -> RayCollision { + unsafe { ffi::GetRayCollisionTriangle(ray, p1, p2, p3) } } -/// Gets collision info between ray and ground plane (Y-normal plane). +/// Gets collision info between ray and model. #[inline] -pub fn get_collision_ray_ground(ray: Ray, ground_height: f32) -> RayHitInfo { - unsafe { ffi::GetCollisionRayGround(ray.into(), ground_height).into() } +pub fn get_ray_collision_quad( + ray: Ray, + p1: Vector3, + p2: Vector3, + p3: Vector3, + p4: Vector3, +) -> RayCollision { + unsafe { ffi::GetRayCollisionQuad(ray, p1, p2, p3, p4) } } diff --git a/raylib/src/core/data.rs b/raylib/src/core/data.rs index 768548cd..5372ee01 100644 --- a/raylib/src/core/data.rs +++ b/raylib/src/core/data.rs @@ -1,42 +1,39 @@ //! Data manipulation functions. Compress and Decompress with DEFLATE -use crate::ffi; +use crate::{buffer::RaylibBuffer, ffi}; /// Compress data (DEFLATE algorythm) -/// Currently broken. /// ```rust /// use raylib::prelude::*; /// let data = compress_data(b"1111111111"); -/// assert!(data.is_err()); +/// let expected: &[u8] = &[61, 193, 33, 1, 0, 0, 0, 128, 160, 77, 254, 63, 103, 3, 98]; +/// assert_eq!(data.unwrap().get_slice(), expected); /// ``` -pub fn compress_data(data: &[u8]) -> Result<&'static [u8], String> { +pub fn compress_data(data: &[u8]) -> Result, String> { let mut out_length: i32 = 0; // CompressData doesn't actually modify the data, but the header is wrong let buffer = { unsafe { ffi::CompressData(data.as_ptr() as *mut _, data.len() as i32, &mut out_length) } }; - if buffer.is_null() { - return Err("could not compress data".to_string()); - } - let buffer = unsafe { std::slice::from_raw_parts(buffer, out_length as usize) }; - return Ok(buffer); + + unsafe { RaylibBuffer::new(buffer, out_length as usize) } + .ok_or_else(|| "could not compress data".to_string()) } /// Decompress data (DEFLATE algorythm) -/// Currently broken. /// ```rust /// use raylib::prelude::*; -/// let data = compress_data(b"1111111111"); -/// assert!(data.is_err()); +/// let input: &[u8] = &[61, 193, 33, 1, 0, 0, 0, 128, 160, 77, 254, 63, 103, 3, 98]; +/// let expected: &[u8] = b"1111111111"; +/// let data = decompress_data(input); +/// assert_eq!(data.unwrap().get_slice(), expected); /// ``` -pub fn decompress_data(data: &[u8]) -> Result<&'static [u8], String> { +pub fn decompress_data(data: &[u8]) -> Result, String> { let mut out_length: i32 = 0; // CompressData doesn't actually modify the data, but the header is wrong let buffer = { unsafe { ffi::DecompressData(data.as_ptr() as *mut _, data.len() as i32, &mut out_length) } }; - if buffer.is_null() { - return Err("could not compress data".to_string()); - } - let buffer = unsafe { std::slice::from_raw_parts(buffer, out_length as usize) }; - return Ok(buffer); + + unsafe { RaylibBuffer::new(buffer, out_length as usize) } + .ok_or_else(|| "could not decompress data".to_string()) } diff --git a/raylib/src/core/drawing.rs b/raylib/src/core/drawing.rs index f05fd6eb..9efcf401 100644 --- a/raylib/src/core/drawing.rs +++ b/raylib/src/core/drawing.rs @@ -1,389 +1,253 @@ //! Contains code related to drawing. Types that can be set as a surface to draw will implement the [`RaylibDraw`] trait -use crate::core::camera::Camera3D; -use crate::core::math::Ray; -use crate::core::math::{Vector2, Vector3}; - -use crate::core::texture::Texture2D; -use crate::core::vr::VrStereoConfig; -use crate::core::{RaylibHandle, RaylibThread}; -use crate::ffi; -use std::convert::AsRef; -use std::ffi::CString; - -/// Seems like all draw commands must be issued from the main thread -impl RaylibHandle { - /// Setup canvas (framebuffer) to start drawing - #[must_use] - pub fn begin_drawing(&mut self, _: &RaylibThread) -> RaylibDrawHandle { - unsafe { - ffi::BeginDrawing(); - }; - let d = RaylibDrawHandle(self); - d - } +use raylib_sys::Camera; + +use super::{ + shaders::Shader, + texture::{RenderTexture2D, Texture2D}, + vr::VrStereoConfig, + RaylibHandle, +}; +use crate::ffi::{ + self, BlendMode, BoundingBox, Camera2D, Camera3D, Color, NPatchInfo, Rectangle, Vector2, + Vector3, +}; + +use std::{cell::Cell, convert::AsRef, ffi::CString, marker::PhantomData}; + +/// Holds the state of "special" Begin/End modes. +#[derive(Clone, Default)] +pub(crate) struct RaylibDrawState { + texture: bool, + vr: bool, + camera2d: bool, + camera3d: bool, + shader: bool, + blend: bool, + scissor: bool, } -pub struct RaylibDrawHandle<'a>(&'a mut RaylibHandle); +pub struct RaylibDrawHandle<'bind>( + pub(crate) PhantomData<&'bind RaylibHandle<'bind>>, + pub(crate) Cell, +); -impl<'a> Drop for RaylibDrawHandle<'a> { - fn drop(&mut self) { - unsafe { - ffi::EndDrawing(); - } - } -} +impl RaylibDrawHandle<'_> { + pub fn begin_texture(&self, target: &mut RenderTexture2D, func: F) { + let mut state = self.1.take(); -impl<'a> std::ops::Deref for RaylibDrawHandle<'a> { - type Target = RaylibHandle; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} + if state.texture { + panic!("Nested begin_texture occured !"); + } -impl<'a> RaylibDraw for RaylibDrawHandle<'a> {} + state.texture = true; + self.1.set(state.clone()); -// Texture2D Stuff + unsafe { ffi::BeginTextureMode(target.0) }; + func(); + unsafe { ffi::EndTextureMode() }; -pub struct RaylibTextureMode<'a, T>(&'a T, &'a mut ffi::RenderTexture2D); -impl<'a, T> Drop for RaylibTextureMode<'a, T> { - fn drop(&mut self) { - unsafe { ffi::EndTextureMode() } + state.texture = false; + self.1.set(state); } -} -impl<'a, T> std::ops::Deref for RaylibTextureMode<'a, T> { - type Target = T; - fn deref(&self) -> &Self::Target { - &self.0 - } -} + pub fn begin_vr(&self, config: &VrStereoConfig, func: F) { + let mut state = self.1.take(); -pub trait RaylibTextureModeExt -where - Self: Sized, -{ - #[must_use] - fn begin_texture_mode<'a>( - &'a mut self, - _: &RaylibThread, - framebuffer: &'a mut ffi::RenderTexture2D, - ) -> RaylibTextureMode { - unsafe { ffi::BeginTextureMode(*framebuffer) } - RaylibTextureMode(self, framebuffer) - } -} + if state.vr { + panic!("Nested begin_vr occured !"); + } -// Only the DrawHandle and the RaylibHandle can start a texture -impl<'a> RaylibTextureModeExt for RaylibDrawHandle<'a> {} -impl RaylibTextureModeExt for &mut RaylibHandle {} -impl<'a, T> RaylibDraw for RaylibTextureMode<'a, T> {} + state.vr = true; + self.1.set(state.clone()); -// VR Stuff + unsafe { ffi::BeginVrStereoMode(config.0) }; + func(); + unsafe { ffi::EndVrStereoMode() }; -pub struct RaylibVRMode<'a, T>(&'a T, &'a mut VrStereoConfig); -impl<'a, T> Drop for RaylibVRMode<'a, T> { - fn drop(&mut self) { - unsafe { ffi::EndVrStereoMode() } + state.vr = false; + self.1.set(state); } -} -impl<'a, T> std::ops::Deref for RaylibVRMode<'a, T> { - type Target = T; - fn deref(&self) -> &Self::Target { - &self.0 - } -} + pub fn begin_camera_2d(&self, camera: &Camera2D, func: F) { + let mut state = self.1.take(); -pub trait RaylibVRModeExt -where - Self: Sized, -{ - #[must_use] - fn begin_vr_stereo_mode<'a>( - &'a mut self, - vr_config: &'a mut VrStereoConfig, - ) -> RaylibVRMode { - unsafe { ffi::BeginVrStereoMode(*vr_config.as_ref()) } - RaylibVRMode(self, vr_config) - } -} + if state.camera2d { + panic!("Nested begin_camera_2d occured !"); + } -impl RaylibVRModeExt for D {} -impl<'a, T> RaylibDraw for RaylibVRMode<'a, T> {} + state.camera2d = true; + self.1.set(state.clone()); -// 2D Mode + unsafe { ffi::BeginMode2D(*camera) }; + func(); + unsafe { ffi::EndMode2D() }; -pub struct RaylibMode2D<'a, T>(&'a mut T); -impl<'a, T> Drop for RaylibMode2D<'a, T> { - fn drop(&mut self) { - unsafe { ffi::EndMode2D() } + state.camera2d = false; + self.1.set(state); } -} -impl<'a, T> std::ops::Deref for RaylibMode2D<'a, T> { - type Target = T; - fn deref(&self) -> &Self::Target { - &self.0 - } -} + pub fn begin_camera_3d(&self, camera: &Camera, func: F) { + let mut state = self.1.take(); -pub trait RaylibMode2DExt -where - Self: Sized, -{ - #[allow(non_snake_case)] - #[must_use] - fn begin_mode2D(&mut self, camera: impl Into) -> RaylibMode2D { - unsafe { - ffi::BeginMode2D(camera.into()); + if state.camera3d { + panic!("Nested begin_camera_3d occured !"); } - RaylibMode2D(self) - } -} -impl RaylibMode2DExt for D {} -impl<'a, T> RaylibDraw for RaylibMode2D<'a, T> {} + state.camera3d = true; + self.1.set(state.clone()); -// 3D Mode + unsafe { ffi::BeginMode3D(*camera) }; + func(); + unsafe { ffi::EndMode3D() }; -pub struct RaylibMode3D<'a, T>(&'a mut T); -impl<'a, T> Drop for RaylibMode3D<'a, T> { - fn drop(&mut self) { - unsafe { ffi::EndMode3D() } + state.camera3d = false; + self.1.set(state); } -} -impl<'a, T> std::ops::Deref for RaylibMode3D<'a, T> { - type Target = T; - fn deref(&self) -> &Self::Target { - &self.0 - } -} + pub fn begin_shader(&self, shader: &Shader, func: F) { + let mut state = self.1.take(); -pub trait RaylibMode3DExt -where - Self: Sized, -{ - #[allow(non_snake_case)] - #[must_use] - fn begin_mode3D(&mut self, camera: impl Into) -> RaylibMode3D { - unsafe { - ffi::BeginMode3D(camera.into()); + if state.shader { + panic!("Nested begin_shader occured !"); } - RaylibMode3D(self) - } -} - -impl RaylibMode3DExt for D {} -impl<'a, T> RaylibDraw for RaylibMode3D<'a, T> {} -impl<'a, T> RaylibDraw3D for RaylibMode3D<'a, T> {} - -// shader Mode -pub struct RaylibShaderMode<'a, T>(&'a mut T, &'a ffi::Shader); -impl<'a, T> Drop for RaylibShaderMode<'a, T> { - fn drop(&mut self) { - unsafe { ffi::EndShaderMode() } - } -} -impl<'a, T> std::ops::Deref for RaylibShaderMode<'a, T> { - type Target = T; + state.shader = true; + self.1.set(state.clone()); - fn deref(&self) -> &Self::Target { - &self.0 - } -} + unsafe { ffi::BeginShaderMode(shader.0) }; + func(); + unsafe { ffi::EndShaderMode() }; -pub trait RaylibShaderModeExt -where - Self: Sized, -{ - #[must_use] - fn begin_shader_mode<'a>(&'a mut self, shader: &'a ffi::Shader) -> RaylibShaderMode { - unsafe { ffi::BeginShaderMode(*shader) } - RaylibShaderMode(self, shader) + state.shader = false; + self.1.set(state); } -} -impl RaylibShaderModeExt for D {} -impl<'a, T> RaylibDraw for RaylibShaderMode<'a, T> {} -impl<'a, T> RaylibDraw3D for RaylibShaderMode<'a, T> {} + pub fn begin_blend(&self, blend_mode: BlendMode, func: F) { + let mut state = self.1.take(); -// Blend Mode + if state.blend { + panic!("Nested begin_blend occured !"); + } -pub struct RaylibBlendMode<'a, T>(&'a mut T); -impl<'a, T> Drop for RaylibBlendMode<'a, T> { - fn drop(&mut self) { - unsafe { ffi::EndBlendMode() } - } -} -impl<'a, T> std::ops::Deref for RaylibBlendMode<'a, T> { - type Target = T; + state.blend = true; + self.1.set(state.clone()); - fn deref(&self) -> &Self::Target { - &self.0 - } -} + unsafe { ffi::BeginBlendMode(blend_mode as _) }; + func(); + unsafe { ffi::EndBlendMode() }; -pub trait RaylibBlendModeExt -where - Self: Sized, -{ - #[must_use] - fn begin_blend_mode(&mut self, blend_mode: crate::consts::BlendMode) -> RaylibBlendMode { - unsafe { ffi::BeginBlendMode((blend_mode as u32) as i32) } - RaylibBlendMode(self) + state.blend = false; + self.1.set(state); } -} -impl RaylibBlendModeExt for D {} -impl<'a, T> RaylibDraw for RaylibBlendMode<'a, T> {} -impl<'a, T> RaylibDraw3D for RaylibBlendMode<'a, T> {} + pub fn begin_scissors(&self, x: i32, y: i32, width: i32, height: i32, func: F) { + let mut state = self.1.take(); -// Scissor Mode stuff + if state.scissor { + panic!("Nested begin_scissors occured !"); + } -pub struct RaylibScissorMode<'a, T>(&'a mut T); -impl<'a, T> Drop for RaylibScissorMode<'a, T> { - fn drop(&mut self) { - unsafe { ffi::EndScissorMode() } - } -} -impl<'a, T> std::ops::Deref for RaylibScissorMode<'a, T> { - type Target = T; + state.scissor = true; + self.1.set(state.clone()); - fn deref(&self) -> &Self::Target { - &self.0 - } -} + unsafe { ffi::BeginScissorMode(x, y, width, height) }; + func(); + unsafe { ffi::EndScissorMode() }; -pub trait RaylibScissorModeExt -where - Self: Sized, -{ - #[must_use] - fn begin_scissor_mode( - &mut self, - x: i32, - y: i32, - width: i32, - height: i32, - ) -> RaylibScissorMode { - unsafe { ffi::BeginScissorMode(x, y, width, height) } - RaylibScissorMode(self) + state.scissor = false; + self.1.set(state); } } -impl RaylibScissorModeExt for D {} -impl<'a, T> RaylibDraw for RaylibScissorMode<'a, T> {} -impl<'a, T: RaylibDraw3D> RaylibDraw3D for RaylibScissorMode<'a, T> {} +impl RaylibDraw for RaylibDrawHandle<'_> {} // Actual drawing functions - pub trait RaylibDraw { /// Sets background color (framebuffer clear color). #[inline] - fn clear_background(&mut self, color: impl Into) { - unsafe { - ffi::ClearBackground(color.into()); - } + fn clear_background(&self, color: Color) { + unsafe { ffi::ClearBackground(color) } } /// Define default texture used to draw shapes - fn set_shapes_texture( - &mut self, - texture: impl AsRef, - source: impl Into, - ) { - unsafe { ffi::SetShapesTexture(*texture.as_ref(), source.into()) } + fn set_shapes_texture(&self, texture: impl AsRef, source: Rectangle) { + unsafe { ffi::SetShapesTexture(*texture.as_ref(), source) } } // // Draw gui widget - // fn draw_gui(&mut self, widget: G) -> crate::rgui::DrawResult { + // fn draw_gui(&self, widget: G) -> crate::rgui::DrawResult { // widget.draw() // } // SHAPES /// Draws a pixel. #[inline] - fn draw_pixel(&mut self, x: i32, y: i32, color: impl Into) { - unsafe { - ffi::DrawPixel(x, y, color.into()); - } + fn draw_pixel(&self, x: i32, y: i32, color: Color) { + unsafe { ffi::DrawPixel(x, y, color) } } /// Draws a pixel (Vector version). #[inline] - fn draw_pixel_v(&mut self, position: impl Into, color: impl Into) { - unsafe { - ffi::DrawPixelV(position.into(), color.into()); - } + fn draw_pixel_v(&self, position: impl Into, color: Color) { + unsafe { ffi::DrawPixelV(position.into(), color) } } /// Draws a line. #[inline] fn draw_line( - &mut self, + &self, start_pos_x: i32, start_pos_y: i32, end_pos_x: i32, end_pos_y: i32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawLine(start_pos_x, start_pos_y, end_pos_x, end_pos_y, color.into()); - } + unsafe { ffi::DrawLine(start_pos_x, start_pos_y, end_pos_x, end_pos_y, color) } } /// Draws a line (Vector version). #[inline] fn draw_line_v( - &mut self, - start_pos: impl Into, - end_pos: impl Into, - color: impl Into, + &self, + start_pos: impl Into, + end_pos: impl Into, + color: Color, ) { - unsafe { - ffi::DrawLineV(start_pos.into(), end_pos.into(), color.into()); - } + unsafe { ffi::DrawLineV(start_pos.into(), end_pos.into(), color) } } /// Draws a line with thickness. #[inline] fn draw_line_ex( - &mut self, - start_pos: impl Into, - end_pos: impl Into, + &self, + start_pos: impl Into, + end_pos: impl Into, thick: f32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawLineEx(start_pos.into(), end_pos.into(), thick, color.into()); - } + unsafe { ffi::DrawLineEx(start_pos.into(), end_pos.into(), thick, color) } } /// Draws a line using cubic-bezier curves in-out. #[inline] fn draw_line_bezier( - &mut self, - start_pos: impl Into, - end_pos: impl Into, + &self, + start_pos: impl Into, + end_pos: impl Into, thick: f32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawLineBezier(start_pos.into(), end_pos.into(), thick, color.into()); - } + unsafe { ffi::DrawLineBezier(start_pos.into(), end_pos.into(), thick, color) } } /// Draw line using quadratic bezier curves with a control point #[inline] fn draw_line_bezier_quad( - &mut self, - start_pos: impl Into, - end_pos: impl Into, - control_pos: impl Into, + &self, + start_pos: impl Into, + end_pos: impl Into, + control_pos: impl Into, thick: f32, - color: impl Into, + color: Color, ) { unsafe { ffi::DrawLineBezierQuad( @@ -391,46 +255,56 @@ pub trait RaylibDraw { end_pos.into(), control_pos.into(), thick, - color.into(), - ); + color, + ) } } - /// Draw lines sequence + /// Draw line using cubic bezier curves with 2 control points #[inline] - fn draw_line_strip(&mut self, points: &[Vector2], color: impl Into) { + fn draw_line_bezier_cubic( + &self, + start_pos: impl Into, + end_pos: impl Into, + start_control_pos: impl Into, + end_control_pos: impl Into, + thick: f32, + color: Color, + ) { unsafe { - ffi::DrawLineStrip( - points.as_ptr() as *mut ffi::Vector2, - points.len() as i32, - color.into(), - ); + ffi::DrawLineBezierCubic( + start_pos.into(), + end_pos.into(), + start_control_pos.into(), + end_control_pos.into(), + thick, + color, + ) } } + /// Draw lines sequence + #[inline] + fn draw_line_strip(&self, points: &[Vector2], color: Color) { + unsafe { ffi::DrawLineStrip(points.as_ptr() as *mut Vector2, points.len() as i32, color) } + } + /// Draws a color-filled circle. #[inline] - fn draw_circle( - &mut self, - center_x: i32, - center_y: i32, - radius: f32, - color: impl Into, - ) { - unsafe { - ffi::DrawCircle(center_x, center_y, radius, color.into()); - } + fn draw_circle(&self, center_x: i32, center_y: i32, radius: f32, color: Color) { + unsafe { ffi::DrawCircle(center_x, center_y, radius, color) } } + /// Draw a piece of a circle #[inline] fn draw_circle_sector( - &mut self, - center: impl Into, + &self, + center: impl Into, radius: f32, start_angle: f32, end_angle: f32, segments: i32, - color: impl Into, + color: Color, ) { unsafe { ffi::DrawCircleSector( @@ -439,21 +313,21 @@ pub trait RaylibDraw { start_angle, end_angle, segments, - color.into(), - ); + color, + ) } } /// Draw circle sector outline #[inline] fn draw_circle_sector_lines( - &mut self, - center: impl Into, + &self, + center: impl Into, radius: f32, start_angle: f32, end_angle: f32, segments: i32, - color: impl Into, + color: Color, ) { unsafe { ffi::DrawCircleSectorLines( @@ -462,94 +336,73 @@ pub trait RaylibDraw { start_angle, end_angle, segments, - color.into(), - ); + color, + ) } } /// Draws a gradient-filled circle. #[inline] fn draw_circle_gradient( - &mut self, + &self, center_x: i32, center_y: i32, radius: f32, - color1: impl Into, - color2: impl Into, + color1: Color, + color2: Color, ) { - unsafe { - ffi::DrawCircleGradient(center_x, center_y, radius, color1.into(), color2.into()); - } + unsafe { ffi::DrawCircleGradient(center_x, center_y, radius, color1, color2) } } /// Draws a color-filled circle (Vector version). #[inline] - fn draw_circle_v( - &mut self, - center: impl Into, - radius: f32, - color: impl Into, - ) { - unsafe { - ffi::DrawCircleV(center.into(), radius, color.into()); - } + fn draw_circle_v(&self, center: impl Into, radius: f32, color: Color) { + unsafe { ffi::DrawCircleV(center.into(), radius, color) } } /// Draws circle outline. #[inline] - fn draw_circle_lines( - &mut self, - center_x: i32, - center_y: i32, - radius: f32, - color: impl Into, - ) { - unsafe { - ffi::DrawCircleLines(center_x, center_y, radius, color.into()); - } + fn draw_circle_lines(&self, center_x: i32, center_y: i32, radius: f32, color: Color) { + unsafe { ffi::DrawCircleLines(center_x, center_y, radius, color) } } /// Draws ellipse. #[inline] fn draw_ellipse( - &mut self, + &self, center_x: i32, center_y: i32, radius_h: f32, radius_v: f32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawEllipse(center_x, center_y, radius_h, radius_v, color.into()); - } + unsafe { ffi::DrawEllipse(center_x, center_y, radius_h, radius_v, color) } } /// Draws ellipse. #[inline] fn draw_ellipse_lines( - &mut self, + &self, center_x: i32, center_y: i32, radius_h: f32, radius_v: f32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawEllipseLines(center_x, center_y, radius_h, radius_v, color.into()); - } + unsafe { ffi::DrawEllipseLines(center_x, center_y, radius_h, radius_v, color) } } /// Draw ring #[inline] fn draw_ring( - &mut self, - center: impl Into, + &self, + center: impl Into, inner_radius: f32, outer_radius: f32, start_angle: f32, end_angle: f32, segments: i32, - color: impl Into, + color: Color, ) { unsafe { ffi::DrawRing( @@ -559,22 +412,22 @@ pub trait RaylibDraw { start_angle, end_angle, segments, - color.into(), - ); + color, + ) } } /// Draw ring lines #[inline] fn draw_ring_lines( - &mut self, - center: impl Into, + &self, + center: impl Into, inner_radius: f32, outer_radius: f32, start_angle: f32, end_angle: f32, segments: i32, - color: impl Into, + color: Color, ) { unsafe { ffi::DrawRingLines( @@ -584,59 +437,44 @@ pub trait RaylibDraw { start_angle, end_angle, segments, - color.into(), - ); + color, + ) } } /// Draws a color-filled rectangle. #[inline] - fn draw_rectangle( - &mut self, - x: i32, - y: i32, - width: i32, - height: i32, - color: impl Into, - ) { - unsafe { - ffi::DrawRectangle(x, y, width, height, color.into()); - } + fn draw_rectangle(&self, x: i32, y: i32, width: i32, height: i32, color: Color) { + unsafe { ffi::DrawRectangle(x, y, width, height, color) } } /// Draws a color-filled rectangle (Vector version). #[inline] fn draw_rectangle_v( - &mut self, - position: impl Into, - size: impl Into, - color: impl Into, + &self, + position: impl Into, + size: impl Into, + color: Color, ) { - unsafe { - ffi::DrawRectangleV(position.into(), size.into(), color.into()); - } + unsafe { ffi::DrawRectangleV(position.into(), size.into(), color) } } /// Draws a color-filled rectangle from `rec`. #[inline] - fn draw_rectangle_rec(&mut self, rec: impl Into, color: impl Into) { - unsafe { - ffi::DrawRectangleRec(rec.into(), color.into()); - } + fn draw_rectangle_rec(&self, rec: Rectangle, color: Color) { + unsafe { ffi::DrawRectangleRec(rec, color) } } /// Draws a color-filled rectangle with pro parameters. #[inline] fn draw_rectangle_pro( - &mut self, - rec: impl Into, - origin: impl Into, + &self, + rec: Rectangle, + origin: impl Into, rotation: f32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawRectanglePro(rec.into(), origin.into(), rotation, color.into()); - } + unsafe { ffi::DrawRectanglePro(rec, origin.into(), rotation, color) } } /// Draws a vertical-gradient-filled rectangle. @@ -644,17 +482,15 @@ pub trait RaylibDraw { /// **NOTE**: Gradient goes from bottom (`color1`) to top (`color2`). #[inline] fn draw_rectangle_gradient_v( - &mut self, + &self, x: i32, y: i32, width: i32, height: i32, - color1: impl Into, - color2: impl Into, + color1: Color, + color2: Color, ) { - unsafe { - ffi::DrawRectangleGradientV(x, y, width, height, color1.into(), color2.into()); - } + unsafe { ffi::DrawRectangleGradientV(x, y, width, height, color1, color2) } } /// Draws a horizontal-gradient-filled rectangle. @@ -662,17 +498,15 @@ pub trait RaylibDraw { /// **NOTE**: Gradient goes from bottom (`color1`) to top (`color2`). #[inline] fn draw_rectangle_gradient_h( - &mut self, + &self, x: i32, y: i32, width: i32, height: i32, - color1: impl Into, - color2: impl Into, + color1: Color, + color2: Color, ) { - unsafe { - ffi::DrawRectangleGradientH(x, y, width, height, color1.into(), color2.into()); - } + unsafe { ffi::DrawRectangleGradientH(x, y, width, height, color1, color2) } } /// Draws a gradient-filled rectangle with custom vertex colors. @@ -680,300 +514,184 @@ pub trait RaylibDraw { /// **NOTE**: Colors refer to corners, starting at top-left corner and going counter-clockwise. #[inline] fn draw_rectangle_gradient_ex( - &mut self, - rec: impl Into, - col1: impl Into, - col2: impl Into, - col3: impl Into, - col4: impl Into, + &self, + rec: Rectangle, + col1: Color, + col2: Color, + col3: Color, + col4: Color, ) { - unsafe { - ffi::DrawRectangleGradientEx( - rec.into(), - col1.into(), - col2.into(), - col3.into(), - col4.into(), - ); - } + unsafe { ffi::DrawRectangleGradientEx(rec, col1, col2, col3, col4) } } /// Draws rectangle outline. #[inline] - fn draw_rectangle_lines( - &mut self, - x: i32, - y: i32, - width: i32, - height: i32, - color: impl Into, - ) { - unsafe { - ffi::DrawRectangleLines(x, y, width, height, color.into()); - } + fn draw_rectangle_lines(&self, x: i32, y: i32, width: i32, height: i32, color: Color) { + unsafe { ffi::DrawRectangleLines(x, y, width, height, color) } } /// Draws rectangle outline with extended parameters. #[inline] - fn draw_rectangle_lines_ex( - &mut self, - rec: impl Into, - line_thick: i32, - color: impl Into, - ) { - unsafe { - ffi::DrawRectangleLinesEx(rec.into(), line_thick, color.into()); - } + fn draw_rectangle_lines_ex(&self, rec: Rectangle, line_thick: f32, color: Color) { + unsafe { ffi::DrawRectangleLinesEx(rec, line_thick, color) } } /// Draws rectangle outline with extended parameters. #[inline] - fn draw_rectangle_rounded( - &mut self, - rec: impl Into, - roundness: f32, - segments: i32, - color: impl Into, - ) { - unsafe { - ffi::DrawRectangleRounded(rec.into(), roundness, segments, color.into()); - } + fn draw_rectangle_rounded(&self, rec: Rectangle, roundness: f32, segments: i32, color: Color) { + unsafe { ffi::DrawRectangleRounded(rec, roundness, segments, color) } } /// Draws rectangle outline with extended parameters. #[inline] fn draw_rectangle_rounded_lines( - &mut self, - rec: impl Into, + &self, + rec: Rectangle, roundness: f32, segments: i32, - line_thickness: i32, - color: impl Into, + line_thickness: f32, + color: Color, ) { - unsafe { - ffi::DrawRectangleRoundedLines( - rec.into(), - roundness, - segments, - line_thickness, - color.into(), - ); - } + unsafe { ffi::DrawRectangleRoundedLines(rec, roundness, segments, line_thickness, color) } } /// Draws a triangle. #[inline] fn draw_triangle( - &mut self, - v1: impl Into, - v2: impl Into, - v3: impl Into, - color: impl Into, + &self, + v1: impl Into, + v2: impl Into, + v3: impl Into, + color: Color, ) { - unsafe { - ffi::DrawTriangle(v1.into(), v2.into(), v3.into(), color.into()); - } + unsafe { ffi::DrawTriangle(v1.into(), v2.into(), v3.into(), color) } } /// Draws a triangle using lines. #[inline] fn draw_triangle_lines( - &mut self, - v1: impl Into, - v2: impl Into, - v3: impl Into, - color: impl Into, + &self, + v1: impl Into, + v2: impl Into, + v3: impl Into, + color: Color, ) { - unsafe { - ffi::DrawTriangleLines(v1.into(), v2.into(), v3.into(), color.into()); - } + unsafe { ffi::DrawTriangleLines(v1.into(), v2.into(), v3.into(), color) } } /// Draw a triangle fan defined by points. #[inline] - fn draw_triangle_fan(&mut self, points: &[Vector2], color: impl Into) { - unsafe { - ffi::DrawTriangleFan( - points.as_ptr() as *mut ffi::Vector2, - points.len() as i32, - color.into(), - ); - } + fn draw_triangle_fan(&self, points: &[Vector2], color: Color) { + unsafe { ffi::DrawTriangleFan(points.as_ptr() as *mut Vector2, points.len() as i32, color) } } /// Draw a triangle strip defined by points #[inline] - fn draw_triangle_strip(&mut self, points: &[Vector2], color: impl Into) { + fn draw_triangle_strip(&self, points: &[Vector2], color: Color) { unsafe { - ffi::DrawTriangleStrip( - points.as_ptr() as *mut ffi::Vector2, - points.len() as i32, - color.into(), - ); + ffi::DrawTriangleStrip(points.as_ptr() as *mut Vector2, points.len() as i32, color) } } /// Draws a regular polygon of n sides (Vector version). #[inline] fn draw_poly( - &mut self, - center: impl Into, + &self, + center: impl Into, sides: i32, radius: f32, rotation: f32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawPoly(center.into(), sides, radius, rotation, color.into()); - } + unsafe { ffi::DrawPoly(center.into(), sides, radius, rotation, color) } } /// Draws a regular polygon of n sides (Vector version). #[inline] fn draw_poly_lines( - &mut self, - center: impl Into, + &self, + center: impl Into, sides: i32, radius: f32, rotation: f32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawPolyLines(center.into(), sides, radius, rotation, color.into()); - } + unsafe { ffi::DrawPolyLines(center.into(), sides, radius, rotation, color) } } - /// Draws a `texture` using specified position and `tint` color. #[inline] - fn draw_texture( - &mut self, - texture: impl AsRef, - x: i32, - y: i32, - tint: impl Into, + fn draw_poly_lines_ex( + &self, + center: impl Into, + sides: i32, + radius: f32, + rotation: f32, + line_thick: f32, + color: Color, ) { - unsafe { - ffi::DrawTexture(*texture.as_ref(), x, y, tint.into()); - } + unsafe { ffi::DrawPolyLinesEx(center.into(), sides, radius, rotation, line_thick, color) } + } + + /// Draws a `texture` using specified position and `tint` color. + #[inline] + fn draw_texture(&self, texture: impl AsRef, x: i32, y: i32, tint: Color) { + unsafe { ffi::DrawTexture(*texture.as_ref(), x, y, tint) } } /// Draws a `texture` using specified `position` vector and `tint` color. #[inline] fn draw_texture_v( - &mut self, + &self, texture: impl AsRef, - position: impl Into, - tint: impl Into, + position: impl Into, + tint: Color, ) { - unsafe { - ffi::DrawTextureV(*texture.as_ref(), position.into(), tint.into()); - } + unsafe { ffi::DrawTextureV(*texture.as_ref(), position.into(), tint) } } /// Draws a `texture` with extended parameters. #[inline] fn draw_texture_ex( - &mut self, + &self, texture: impl AsRef, - position: impl Into, + position: impl Into, rotation: f32, scale: f32, - tint: impl Into, + tint: Color, ) { - unsafe { - ffi::DrawTextureEx( - *texture.as_ref(), - position.into(), - rotation, - scale, - tint.into(), - ); - } + unsafe { ffi::DrawTextureEx(*texture.as_ref(), position.into(), rotation, scale, tint) } } /// Draws from a region of `texture` defined by the `source_rec` rectangle. #[inline] fn draw_texture_rec( - &mut self, - texture: impl AsRef, - source_rec: impl Into, - position: impl Into, - tint: impl Into, - ) { - unsafe { - ffi::DrawTextureRec( - *texture.as_ref(), - source_rec.into(), - position.into(), - tint.into(), - ); - } - } - - /// Draw texture quad with tiling and offset parameters - #[inline] - fn draw_texture_quad( - &mut self, + &self, texture: impl AsRef, - tiling: impl Into, - offset: impl Into, - quad: impl Into, - tint: impl Into, + source_rec: Rectangle, + position: impl Into, + tint: Color, ) { - unsafe { - ffi::DrawTextureQuad( - *texture.as_ref(), - tiling.into(), - offset.into(), - quad.into(), - tint.into(), - ); - } + unsafe { ffi::DrawTextureRec(*texture.as_ref(), source_rec, position.into(), tint) } } - /// Draw from a region of `texture` defined by the `source_rec` rectangle with pro parameters. + /// Draw a part of a texture defined by a rectangle with 'pro' parameters. #[inline] fn draw_texture_pro( - &mut self, + &self, texture: impl AsRef, - source_rec: impl Into, - dest_rec: impl Into, - origin: impl Into, + source: Rectangle, + dest: Rectangle, + origin: impl Into, rotation: f32, - tint: impl Into, + tint: Color, ) { unsafe { ffi::DrawTexturePro( *texture.as_ref(), - source_rec.into(), - dest_rec.into(), + source, + dest, origin.into(), rotation, - tint.into(), - ); - } - } - - /// Draw part of a texture (defined by a rectangle) with rotation and scale tiled into dest. - #[inline] - fn draw_texture_tiled( - &mut self, - texture: impl AsRef, - source_rec: impl Into, - dest_rec: impl Into, - origin: impl Into, - rotation: f32, - scale: f32, - tint: impl Into, - ) { - unsafe { - ffi::DrawTextureTiled( - *texture.as_ref(), - source_rec.into(), - dest_rec.into(), - origin.into(), - rotation, - scale, - tint.into(), + tint, ) } } @@ -981,83 +699,49 @@ pub trait RaylibDraw { ///Draws a texture (or part of it) that stretches or shrinks nicely #[inline] fn draw_texture_n_patch( - &mut self, + &self, texture: impl AsRef, - n_patch_info: impl Into, - dest_rec: impl Into, - origin: impl Into, + n_patch_info: NPatchInfo, + dest_rec: Rectangle, + origin: impl Into, rotation: f32, - tint: impl Into, + tint: Color, ) { unsafe { ffi::DrawTextureNPatch( *texture.as_ref(), - n_patch_info.into(), - dest_rec.into(), + n_patch_info, + dest_rec, origin.into(), rotation, - tint.into(), - ); - } - } - - ///Draws a texture (or part of it) that stretches or shrinks nicely - #[inline] - fn draw_texture_poly( - &mut self, - texture: impl AsRef, - center: impl Into, - points: &[Vector2], - texcoords: &[Vector2], - tint: impl Into, - ) { - assert!(points.len() == texcoords.len()); - unsafe { - ffi::DrawTexturePoly( - *texture.as_ref(), - center.into(), - points.as_ptr() as *mut _, - texcoords.as_ptr() as *mut _, - points.len() as _, - tint.into(), - ); + tint, + ) } } /// Shows current FPS. #[inline] - fn draw_fps(&mut self, x: i32, y: i32) { - unsafe { - ffi::DrawFPS(x, y); - } + fn draw_fps(&self, x: i32, y: i32) { + unsafe { ffi::DrawFPS(x, y) } } /// Draws text (using default font). #[inline] - fn draw_text( - &mut self, - text: &str, - x: i32, - y: i32, - font_size: i32, - color: impl Into, - ) { + fn draw_text(&self, text: &str, x: i32, y: i32, font_size: i32, color: Color) { let c_text = CString::new(text).unwrap(); - unsafe { - ffi::DrawText(c_text.as_ptr(), x, y, font_size, color.into()); - } + unsafe { ffi::DrawText(c_text.as_ptr(), x, y, font_size, color) } } /// Draws text using `font` and additional parameters. #[inline] fn draw_text_ex( - &mut self, + &self, font: impl AsRef, text: &str, - position: impl Into, + position: impl Into, font_size: f32, spacing: f32, - tint: impl Into, + tint: Color, ) { let c_text = CString::new(text).unwrap(); unsafe { @@ -1067,468 +751,282 @@ pub trait RaylibDraw { position.into(), font_size, spacing, - tint.into(), - ); - } - } - - /// Draws text using `font` and additional parameters. - #[inline] - fn draw_text_rec( - &mut self, - font: impl AsRef, - text: &str, - rec: impl Into, - font_size: f32, - spacing: f32, - word_wrap: bool, - tint: impl Into, - ) { - let c_text = CString::new(text).unwrap(); - unsafe { - ffi::DrawTextRec( - *font.as_ref(), - c_text.as_ptr(), - rec.into(), - font_size, - spacing, - word_wrap, - tint.into(), - ); - } - } - - /// Draws text using `font` and additional parameters. - #[inline] - fn draw_text_rec_ex( - &mut self, - font: impl AsRef, - text: &str, - rec: impl Into, - font_size: f32, - spacing: f32, - word_wrap: bool, - tint: impl Into, - select_start: i32, - select_length: i32, - select_text: impl Into, - select_back: impl Into, - ) { - let c_text = CString::new(text).unwrap(); - unsafe { - ffi::DrawTextRecEx( - *font.as_ref(), - c_text.as_ptr(), - rec.into(), - font_size, - spacing, - word_wrap, - tint.into(), - select_start, - select_length, - select_text.into(), - select_back.into(), - ); + tint, + ) } } /// Draw one character (codepoint) #[inline] fn draw_text_codepoint( - &mut self, + &self, font: impl AsRef, codepoint: i32, - position: impl Into, + position: impl Into, scale: f32, - tint: impl Into, + tint: Color, ) { - unsafe { - ffi::DrawTextCodepoint( - *font.as_ref(), - codepoint, - position.into(), - scale, - tint.into(), - ); - } + unsafe { ffi::DrawTextCodepoint(*font.as_ref(), codepoint, position.into(), scale, tint) } } -} -pub trait RaylibDraw3D { /// Draw a point in 3D space, actually a small line - #[allow(non_snake_case)] #[inline] - fn draw_point3D(&mut self, position: impl Into, color: impl Into) { - unsafe { - ffi::DrawPoint3D(position.into(), color.into()); - } + fn draw_point_3d(&self, position: Vector3, color: Color) { + unsafe { ffi::DrawPoint3D(position, color) } } ///// Draw a color-filled triangle (vertex in counter-clockwise order!) - #[allow(non_snake_case)] - #[inline] - fn draw_triangle3D( - &mut self, - v1: impl Into, - v2: impl Into, - v3: impl Into, - color: impl Into, - ) { - unsafe { - ffi::DrawTriangle3D(v1.into(), v2.into(), v3.into(), color.into()); - } + #[inline] + fn draw_triangle_3d(&self, v1: Vector3, v2: Vector3, v3: Vector3, color: Color) { + unsafe { ffi::DrawTriangle3D(v1, v2, v3, color) } } /// // Draw a triangle strip defined by points - #[allow(non_snake_case)] #[inline] - fn draw_triangle_strip3D(&mut self, points: &[Vector3], color: impl Into) { - unsafe { - ffi::DrawTriangleStrip3D(points.as_ptr() as *mut _, points.len() as i32, color.into()); - } + fn draw_triangle_strip_3d(&self, points: &[Vector3], color: Color) { + unsafe { ffi::DrawTriangleStrip3D(points.as_ptr() as *mut _, points.len() as i32, color) } } /// Draws a line in 3D world space. #[inline] - #[allow(non_snake_case)] - fn draw_line_3D( - &mut self, - start_pos: impl Into, - end_pos: impl Into, - color: impl Into, - ) { - unsafe { - ffi::DrawLine3D(start_pos.into(), end_pos.into(), color.into()); - } + fn draw_line_3d(&self, start_pos: Vector3, end_pos: Vector3, color: Color) { + unsafe { ffi::DrawLine3D(start_pos, end_pos, color) } } /// Draws a circle in 3D world space. #[inline] - #[allow(non_snake_case)] - fn draw_circle_3D( - &mut self, - center: impl Into, + fn draw_circle_3d( + &self, + center: Vector3, radius: f32, - rotation_axis: impl Into, + rotation_axis: Vector3, rotation_angle: f32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawCircle3D( - center.into(), - radius, - rotation_axis.into(), - rotation_angle, - color.into(), - ); - } + unsafe { ffi::DrawCircle3D(center, radius, rotation_axis, rotation_angle, color) } } /// Draws a cube. #[inline] - fn draw_cube( - &mut self, - position: impl Into, - width: f32, - height: f32, - length: f32, - color: impl Into, - ) { - unsafe { - ffi::DrawCube(position.into(), width, height, length, color.into()); - } + fn draw_cube(&self, position: Vector3, width: f32, height: f32, length: f32, color: Color) { + unsafe { ffi::DrawCube(position, width, height, length, color) } } /// Draws a cube (Vector version). #[inline] - fn draw_cube_v( - &mut self, - position: impl Into, - size: impl Into, - color: impl Into, - ) { - unsafe { - ffi::DrawCubeV(position.into(), size.into(), color.into()); - } + fn draw_cube_v(&self, position: Vector3, size: Vector3, color: Color) { + unsafe { ffi::DrawCubeV(position, size, color) } } /// Draws a cube in wireframe. #[inline] fn draw_cube_wires( - &mut self, - position: impl Into, + &self, + position: Vector3, width: f32, height: f32, length: f32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawCubeWires(position.into(), width, height, length, color.into()); - } - } - - /// Draws a textured cube. - #[inline] - fn draw_cube_texture( - &mut self, - texture: &Texture2D, - position: impl Into, - width: f32, - height: f32, - length: f32, - color: impl Into, - ) { - unsafe { - ffi::DrawCubeTexture( - texture.0, - position.into(), - width, - height, - length, - color.into(), - ); - } + unsafe { ffi::DrawCubeWires(position, width, height, length, color) } } /// Draws a sphere. #[inline] - fn draw_sphere( - &mut self, - center_pos: impl Into, - radius: f32, - color: impl Into, - ) { - unsafe { - ffi::DrawSphere(center_pos.into(), radius, color.into()); - } + fn draw_sphere(&self, center_pos: Vector3, radius: f32, color: Color) { + unsafe { ffi::DrawSphere(center_pos, radius, color) } } /// Draws a sphere with extended parameters. #[inline] fn draw_sphere_ex( - &mut self, - center_pos: impl Into, + &self, + center_pos: Vector3, radius: f32, rings: i32, slices: i32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawSphereEx(center_pos.into(), radius, rings, slices, color.into()); - } + unsafe { ffi::DrawSphereEx(center_pos, radius, rings, slices, color) } } /// Draws a sphere in wireframe. #[inline] fn draw_sphere_wires( - &mut self, - center_pos: impl Into, + &self, + center_pos: Vector3, radius: f32, rings: i32, slices: i32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawSphereWires(center_pos.into(), radius, rings, slices, color.into()); - } + unsafe { ffi::DrawSphereWires(center_pos, radius, rings, slices, color) } } /// Draws a cylinder. #[inline] fn draw_cylinder( - &mut self, - position: impl Into, + &self, + position: Vector3, radius_top: f32, radius_bottom: f32, height: f32, slices: i32, - color: impl Into, + color: Color, ) { - unsafe { - ffi::DrawCylinder( - position.into(), - radius_top, - radius_bottom, - height, - slices, - color.into(), - ); - } + unsafe { ffi::DrawCylinder(position, radius_top, radius_bottom, height, slices, color) } } /// Draws a cylinder in wireframe. #[inline] fn draw_cylinder_wires( - &mut self, - position: impl Into, + &self, + position: Vector3, radius_top: f32, radius_bottom: f32, height: f32, slices: i32, - color: impl Into, + color: Color, ) { unsafe { - ffi::DrawCylinderWires( - position.into(), - radius_top, - radius_bottom, - height, - slices, - color.into(), - ); + ffi::DrawCylinderWires(position, radius_top, radius_bottom, height, slices, color) } } - /// Draws an X/Z plane. + /// Draw a cylinder wires with base at startPos and top at endPos #[inline] - fn draw_plane( - &mut self, - center_pos: impl Into, - size: impl Into, - color: impl Into, + fn draw_cylinder_wires_ex( + &self, + start_pos: Vector3, + end_pos: Vector3, + start_radius: f32, + end_radius: f32, + sides: i32, + color: Color, ) { unsafe { - ffi::DrawPlane(center_pos.into(), size.into(), color.into()); + ffi::DrawCylinderWiresEx(start_pos, end_pos, start_radius, end_radius, sides, color) } } + /// Draws an X/Z plane. + #[inline] + fn draw_plane(&self, center_pos: Vector3, size: impl Into, color: Color) { + unsafe { ffi::DrawPlane(center_pos, size.into(), color) } + } + /// Draws a ray line. #[inline] - fn draw_ray(&mut self, ray: Ray, color: impl Into) { - unsafe { - ffi::DrawRay(ray.into(), color.into()); - } + fn draw_ray(&self, ray: ffi::Ray, color: Color) { + unsafe { ffi::DrawRay(ray, color) } } /// Draws a grid (centered at (0, 0, 0)). #[inline] - fn draw_grid(&mut self, slices: i32, spacing: f32) { - unsafe { - ffi::DrawGrid(slices, spacing); - } + fn draw_grid(&self, slices: i32, spacing: f32) { + unsafe { ffi::DrawGrid(slices, spacing) } } /// Draws a model (with texture if set). #[inline] fn draw_model( - &mut self, + &self, model: impl AsRef, - position: impl Into, + position: Vector3, scale: f32, - tint: impl Into, + tint: Color, ) { - unsafe { - ffi::DrawModel(*model.as_ref(), position.into(), scale, tint.into()); - } + unsafe { ffi::DrawModel(*model.as_ref(), position, scale, tint) } } /// Draws a model with extended parameters. #[inline] fn draw_model_ex( - &mut self, + &self, model: impl AsRef, - position: impl Into, - rotation_axis: impl Into, + position: Vector3, + rotation_axis: Vector3, rotation_angle: f32, - scale: impl Into, - tint: impl Into, + scale: Vector3, + tint: Color, ) { unsafe { ffi::DrawModelEx( *model.as_ref(), - position.into(), - rotation_axis.into(), + position, + rotation_axis, rotation_angle, - scale.into(), - tint.into(), - ); + scale, + tint, + ) } } /// Draws a model with wires (with texture if set). #[inline] fn draw_model_wires( - &mut self, + &self, model: impl AsRef, - position: impl Into, + position: Vector3, scale: f32, - tint: impl Into, + tint: Color, ) { - unsafe { - ffi::DrawModelWires(*model.as_ref(), position.into(), scale, tint.into()); - } + unsafe { ffi::DrawModelWires(*model.as_ref(), position, scale, tint) } } /// Draws a model with wires. #[inline] fn draw_model_wires_ex( - &mut self, + &self, model: impl AsRef, - position: impl Into, - rotation_axis: impl Into, + position: Vector3, + rotation_axis: Vector3, rotation_angle: f32, - scale: impl Into, - tint: impl Into, + scale: Vector3, + tint: Color, ) { unsafe { ffi::DrawModelWiresEx( *model.as_ref(), - position.into(), - rotation_axis.into(), + position, + rotation_axis, rotation_angle, - scale.into(), - tint.into(), - ); + scale, + tint, + ) } } /// Draws a bounding box (wires). #[inline] - fn draw_bounding_box( - &mut self, - bbox: impl Into, - color: impl Into, - ) { - unsafe { - ffi::DrawBoundingBox(bbox.into(), color.into()); - } + fn draw_bounding_box(&self, bbox: BoundingBox, color: Color) { + unsafe { ffi::DrawBoundingBox(bbox, color) } } /// Draws a billboard texture. #[inline] fn draw_billboard( - &mut self, - camera: impl Into, + &self, + camera: Camera3D, texture: &Texture2D, - center: impl Into, + center: Vector3, size: f32, - tint: impl Into, + tint: Color, ) { - unsafe { - ffi::DrawBillboard(camera.into(), texture.0, center.into(), size, tint.into()); - } + unsafe { ffi::DrawBillboard(camera, texture.0, center, size, tint) } } /// Draws a billboard texture defined by `source_rec`. #[inline] fn draw_billboard_rec( - &mut self, + &self, camera: Camera3D, texture: &Texture2D, - source_rec: impl Into, - center: impl Into, - size: f32, - tint: impl Into, + source_rec: Rectangle, + center: Vector3, + size: impl Into, + tint: Color, ) { - unsafe { - ffi::DrawBillboardRec( - camera.into(), - texture.0, - source_rec.into(), - center.into(), - size, - tint.into(), - ); - } + unsafe { ffi::DrawBillboardRec(camera, texture.0, source_rec, center, size.into(), tint) } } } diff --git a/raylib/src/core/file.rs b/raylib/src/core/file.rs index 52055fa9..6238635a 100644 --- a/raylib/src/core/file.rs +++ b/raylib/src/core/file.rs @@ -1,10 +1,11 @@ //! File manipulation functions. Should be parity with std::fs except on emscripten -use crate::ffi; - -use crate::core::RaylibHandle; +use core::slice; use std::ffi::CStr; -impl RaylibHandle { +use super::RaylibHandle; +use crate::ffi; + +impl<'a> RaylibHandle<'a> { /// Checks if a file has been dropped into the window. #[inline] pub fn is_file_dropped(&self) -> bool { @@ -13,26 +14,17 @@ impl RaylibHandle { /// Gets dropped filenames. pub fn get_dropped_files(&self) -> Vec { - let mut v = Vec::new(); - unsafe { - let mut count: i32 = 0; - let dropfiles = ffi::GetDroppedFiles(&mut count); - for i in 0..count { - let filestr = CStr::from_ptr(*dropfiles.offset(i as isize)) - .to_str() - .unwrap(); - let file = String::from(filestr); - v.push(file); - } - } - v - } + let dropfiles = unsafe { ffi::LoadDroppedFiles() }; - /// Clears dropped files paths buffer. - #[inline] - pub fn clear_dropped_files(&mut self) { - unsafe { - ffi::ClearDroppedFiles(); - } + let v: Vec = + unsafe { slice::from_raw_parts(dropfiles.paths, dropfiles.count as usize) } + .iter() + .map(|p| unsafe { CStr::from_ptr(*p) }) + .map(|cstr| String::from(cstr.to_string_lossy())) + .collect(); + + unsafe { ffi::UnloadDroppedFiles(dropfiles) }; + + v } } diff --git a/raylib/src/core/input.rs b/raylib/src/core/input.rs index eb99f4a4..0bd2cc5a 100644 --- a/raylib/src/core/input.rs +++ b/raylib/src/core/input.rs @@ -1,39 +1,37 @@ //! Keyboard, Controller, and Mouse related functions -use crate::consts::Gestures; -use crate::core::math::Vector2; -use crate::core::RaylibHandle; -use crate::ffi; - use std::ffi::{CStr, CString}; -impl RaylibHandle { +use super::RaylibHandle; +use crate::ffi::{self, GamepadAxis, GamepadButton, Gesture, KeyboardKey, MouseButton, Vector2}; + +impl RaylibHandle<'_> { /// Detect if a key has been pressed once. #[inline] - pub fn is_key_pressed(&self, key: crate::consts::KeyboardKey) -> bool { + pub fn is_key_pressed(&self, key: KeyboardKey) -> bool { unsafe { ffi::IsKeyPressed((key as u32) as i32) } } /// Detect if a key is being pressed. #[inline] - pub fn is_key_down(&self, key: crate::consts::KeyboardKey) -> bool { + pub fn is_key_down(&self, key: KeyboardKey) -> bool { unsafe { ffi::IsKeyDown((key as u32) as i32) } } /// Detect if a key has been released once. #[inline] - pub fn is_key_released(&self, key: crate::consts::KeyboardKey) -> bool { + pub fn is_key_released(&self, key: KeyboardKey) -> bool { unsafe { ffi::IsKeyReleased((key as u32) as i32) } } /// Detect if a key is NOT being pressed. #[inline] - pub fn is_key_up(&self, key: crate::consts::KeyboardKey) -> bool { + pub fn is_key_up(&self, key: KeyboardKey) -> bool { unsafe { ffi::IsKeyUp((key as u32) as i32) } } /// Gets latest key pressed. #[inline] - pub fn get_key_pressed(&mut self) -> Option { + pub fn get_key_pressed(&self) -> Option { let key = unsafe { ffi::GetKeyPressed() }; if key > 0 { return key_from_i32(key); @@ -43,7 +41,7 @@ impl RaylibHandle { /// Gets latest key pressed. #[inline] - pub fn get_key_pressed_number(&mut self) -> Option { + pub fn get_key_pressed_number(&self) -> Option { let key = unsafe { ffi::GetKeyPressed() }; if key > 0 { return Some(key as u32); @@ -51,9 +49,19 @@ impl RaylibHandle { None } + /// Gets latest char (unicode) pressed + #[inline] + pub fn get_char_pressed(&self) -> Option { + let char_code = unsafe { ffi::GetCharPressed() }; + if char_code > 0 { + return char::from_u32(char_code as u32); + } + None + } + /// Sets a custom key to exit program (default is ESC). // #[inline] - pub fn set_exit_key(&mut self, key: Option) { + pub fn set_exit_key(&self, key: Option) { unsafe { match key { Some(k) => ffi::SetExitKey((k as u32) as i32), @@ -68,13 +76,6 @@ impl RaylibHandle { unsafe { ffi::IsGamepadAvailable(gamepad) } } - /// Checks gamepad name (if available). - #[inline] - pub fn is_gamepad_name(&self, gamepad: i32, name: &str) -> bool { - let c_name = CString::new(name).unwrap(); - unsafe { ffi::IsGamepadName(gamepad, c_name.as_ptr()) } - } - /// Returns gamepad internal name id. #[inline] pub fn get_gamepad_name(&self, gamepad: i32) -> Option { @@ -89,43 +90,31 @@ impl RaylibHandle { /// Detect if a gamepad button has been pressed once. #[inline] - pub fn is_gamepad_button_pressed( - &self, - gamepad: i32, - button: crate::consts::GamepadButton, - ) -> bool { + pub fn is_gamepad_button_pressed(&self, gamepad: i32, button: GamepadButton) -> bool { unsafe { ffi::IsGamepadButtonPressed(gamepad, (button as u32) as i32) } } /// Detect if a gamepad button is being pressed. #[inline] - pub fn is_gamepad_button_down( - &self, - gamepad: i32, - button: crate::consts::GamepadButton, - ) -> bool { + pub fn is_gamepad_button_down(&self, gamepad: i32, button: GamepadButton) -> bool { unsafe { ffi::IsGamepadButtonDown(gamepad, (button as u32) as i32) } } /// Detect if a gamepad button has been released once. #[inline] - pub fn is_gamepad_button_released( - &self, - gamepad: i32, - button: crate::consts::GamepadButton, - ) -> bool { + pub fn is_gamepad_button_released(&self, gamepad: i32, button: GamepadButton) -> bool { unsafe { ffi::IsGamepadButtonReleased(gamepad, (button as u32) as i32) } } /// Detect if a gamepad button is NOT being pressed. #[inline] - pub fn is_gamepad_button_up(&self, gamepad: i32, button: crate::consts::GamepadButton) -> bool { + pub fn is_gamepad_button_up(&self, gamepad: i32, button: GamepadButton) -> bool { unsafe { ffi::IsGamepadButtonUp(gamepad, (button as u32) as i32) } } /// Gets the last gamepad button pressed. #[inline] - pub fn get_gamepad_button_pressed(&self) -> Option { + pub fn get_gamepad_button_pressed(&self) -> Option { let button = unsafe { ffi::GetGamepadButtonPressed() }; if button >= 0 { return Some(unsafe { std::mem::transmute(button as u32) }); @@ -141,31 +130,37 @@ impl RaylibHandle { /// Returns axis movement value for a gamepad axis. #[inline] - pub fn get_gamepad_axis_movement(&self, gamepad: i32, axis: crate::consts::GamepadAxis) -> f32 { + pub fn get_gamepad_axis_movement(&self, gamepad: i32, axis: GamepadAxis) -> f32 { unsafe { ffi::GetGamepadAxisMovement(gamepad, axis as i32) } } + #[inline] + pub fn set_gamepad_mapping(&self, mapping: &str) -> bool { + let c_mapping = CString::new(mapping).unwrap(); + unsafe { ffi::SetGamepadMappings(c_mapping.as_ptr()) >= 0 } + } + /// Detect if a mouse button has been pressed once. #[inline] - pub fn is_mouse_button_pressed(&self, button: crate::consts::MouseButton) -> bool { + pub fn is_mouse_button_pressed(&self, button: MouseButton) -> bool { unsafe { ffi::IsMouseButtonPressed(button as i32) } } /// Detect if a mouse button is being pressed. #[inline] - pub fn is_mouse_button_down(&self, button: crate::consts::MouseButton) -> bool { + pub fn is_mouse_button_down(&self, button: MouseButton) -> bool { unsafe { ffi::IsMouseButtonDown(button as i32) } } /// Detect if a mouse button has been released once. #[inline] - pub fn is_mouse_button_released(&self, button: crate::consts::MouseButton) -> bool { + pub fn is_mouse_button_released(&self, button: MouseButton) -> bool { unsafe { ffi::IsMouseButtonReleased(button as i32) } } /// Detect if a mouse button is NOT being pressed. #[inline] - pub fn is_mouse_button_up(&self, button: crate::consts::MouseButton) -> bool { + pub fn is_mouse_button_up(&self, button: MouseButton) -> bool { unsafe { ffi::IsMouseButtonUp(button as i32) } } @@ -184,41 +179,53 @@ impl RaylibHandle { /// Returns mouse position. #[inline] pub fn get_mouse_position(&self) -> Vector2 { - unsafe { ffi::GetMousePosition().into() } + unsafe { ffi::GetMousePosition() } + } + + /// Returns mouse delta between frames. + #[inline] + pub fn get_mouse_delta(&self) -> Vector2 { + unsafe { ffi::GetMouseDelta() } } /// Sets mouse position. #[inline] - pub fn set_mouse_position(&mut self, position: impl Into) { + pub fn set_mouse_position(&self, position: Vector2) { unsafe { - let Vector2 { x, y } = position.into(); + let Vector2 { x, y } = position; ffi::SetMousePosition(x as i32, y as i32); } } /// Sets mouse offset. #[inline] - pub fn set_mouse_offset(&mut self, offset: impl Into) { + pub fn set_mouse_offset(&self, offset: Vector2) { unsafe { - let Vector2 { x, y } = offset.into(); + let Vector2 { x, y } = offset; ffi::SetMouseOffset(x as i32, y as i32); } } /// Sets mouse scaling. #[inline] - pub fn set_mouse_scale(&mut self, scale_x: f32, scale_y: f32) { + pub fn set_mouse_scale(&self, scale_x: f32, scale_y: f32) { unsafe { ffi::SetMouseScale(scale_x, scale_y); } } - /// Returns mouse wheel movement Y. + /// Get mouse wheel movement for X or Y, whichever is larger #[inline] pub fn get_mouse_wheel_move(&self) -> f32 { unsafe { ffi::GetMouseWheelMove() } } + // Get mouse wheel movement for both X and Y + #[inline] + pub fn get_mouse_wheel_move_v(&self) -> Vector2 { + unsafe { ffi::GetMouseWheelMoveV() } + } + /// Returns touch position X for touch point 0 (relative to screen size). #[inline] pub fn get_touch_x(&self) -> i32 { @@ -234,33 +241,39 @@ impl RaylibHandle { /// Returns touch position XY for a touch point index (relative to screen size). #[inline] pub fn get_touch_position(&self, index: u32) -> Vector2 { - unsafe { ffi::GetTouchPosition(index as i32).into() } + unsafe { ffi::GetTouchPosition(index as i32) } } /// Enables a set of gestures using flags. #[inline] pub fn set_gestures_enabled(&self, gesture_flags: u32) { unsafe { - ffi::SetGesturesEnabled(gesture_flags as u32); + ffi::SetGesturesEnabled(gesture_flags); } } /// Checks if a gesture have been detected. #[inline] - pub fn is_gesture_detected(&self, gesture: Gestures) -> bool { + pub fn is_gesture_detected(&self, gesture: Gesture) -> bool { unsafe { ffi::IsGestureDetected(gesture as i32) } } /// Gets latest detected gesture. #[inline] - pub fn get_gesture_detected(&self) -> Gestures { + pub fn get_gesture_detected(&self) -> Gesture { unsafe { std::mem::transmute(ffi::GetGestureDetected()) } } + /// Get touch point identifier for given index + #[inline] + pub fn get_touch_point_id(&self, index: u32) -> i32 { + unsafe { ffi::GetTouchPointId(index as i32) } + } + /// Gets touch points count. #[inline] - pub fn get_touch_points_count(&self) -> u32 { - unsafe { ffi::GetTouchPointsCount() as u32 } + pub fn get_touch_point_count(&self) -> u32 { + unsafe { ffi::GetTouchPointCount() as u32 } } /// Gets gesture hold time in milliseconds. @@ -272,7 +285,7 @@ impl RaylibHandle { /// Gets gesture drag vector. #[inline] pub fn get_gesture_drag_vector(&self) -> Vector2 { - unsafe { ffi::GetGestureDragVector().into() } + unsafe { ffi::GetGestureDragVector() } } /// Gets gesture drag angle. @@ -284,7 +297,7 @@ impl RaylibHandle { /// Gets gesture pinch delta. #[inline] pub fn get_gesture_pinch_vector(&self) -> Vector2 { - unsafe { ffi::GetGesturePinchVector().into() } + unsafe { ffi::GetGesturePinchVector() } } /// Gets gesture pinch angle. @@ -294,8 +307,8 @@ impl RaylibHandle { } } -pub fn key_from_i32(key: i32) -> Option { - use crate::consts::KeyboardKey::*; +pub fn key_from_i32(key: i32) -> Option { + use ffi::KeyboardKey::*; match key { 39 => Some(KEY_APOSTROPHE), 44 => Some(KEY_COMMA), diff --git a/raylib/src/core/logging.rs b/raylib/src/core/logging.rs index 3ee4be94..419a4c6b 100644 --- a/raylib/src/core/logging.rs +++ b/raylib/src/core/logging.rs @@ -1,15 +1,13 @@ ///! Functions to change the behavior of raylib logging. // TODO: refactor this entire thing to use log -use crate::consts::TraceLogLevel; -use crate::ffi; use std::ffi::CString; +use crate::ffi::{self, TraceLogLevel}; + /// Set the current threshold (minimum) log level #[inline] -pub fn set_trace_log(types: TraceLogLevel) { - unsafe { - ffi::SetTraceLogLevel((types as u32) as i32); - } +pub fn set_trace_log_level(types: TraceLogLevel) { + unsafe { ffi::SetTraceLogLevel((types as u32) as i32) } } /// Writes a trace log message (`Log::INFO`, `Log::WARNING`, `Log::ERROR`, `Log::DEBUG`). @@ -26,9 +24,9 @@ mod test_logging { use super::*; #[test] fn test_logs() { - use crate::consts::TraceLogLevel::*; - set_trace_log(LOG_ALL); + use ffi::TraceLogLevel::*; + set_trace_log_level(LOG_ALL); trace_log(LOG_DEBUG, "This Is From `test_logs`"); - set_trace_log(LOG_INFO); + set_trace_log_level(LOG_INFO); } } diff --git a/raylib/src/core/math.rs b/raylib/src/core/math.rs deleted file mode 100644 index 58394e3e..00000000 --- a/raylib/src/core/math.rs +++ /dev/null @@ -1,2139 +0,0 @@ -/* raylib-rs - raymath.rs - Structs and functions for game-related math and linear algebra - -Copyright (c) 2018-2019 Paul Clement (@deltaphc) - -This software is provided "as-is", without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source distribution. -*/ - -use crate::ffi; -use crate::misc::AsF32; -use std::f32::consts::PI; -use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssign}; - -#[cfg(feature = "with_serde")] -use serde::{Deserialize, Serialize}; -#[cfg(feature = "nalgebra_interop")] -use nalgebra as na; - -make_rslice!(RSliceVec4, Vector4, ffi::MemFree); - -macro_rules! optional_serde_struct { - ($def:item) => { - cfg_if::cfg_if! { - if #[cfg(feature = "with_serde")] { - #[repr(C)] - #[derive(Default, Debug, Copy, Clone, PartialEq, Serialize, Deserialize)] - $def - } else { - #[repr(C)] - #[derive(Default, Debug, Copy, Clone, PartialEq)] - $def - } - } - } -} - -optional_serde_struct! { - pub struct Vector2 { - pub x: f32, - pub y: f32, - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector2 { - fn from(v: na::Vector2) -> Vector2 { - Vector2 { - x: v.x, - y: v.y - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector2 { - fn from(v: na::base::coordinates::XY) -> Vector2 { - Vector2 { - x: v.x, - y: v.y - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl Into> for Vector2 { - fn into(self) -> na::Vector2 { - na::Vector2::new(self.x, self.y) - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector2 { - fn from(v: na::Vector2) -> Vector2 { - Vector2 { x: v.x, y: v.y } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector2 { - fn from(v: na::base::coordinates::XY) -> Vector2 { - Vector2 { x: v.x, y: v.y } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl Into> for Vector2 { - fn into(self) -> na::Vector2 { - na::Vector2::new(self.x, self.y) - } -} - -impl From for Vector2 { - fn from(v: ffi::Vector2) -> Vector2 { - unsafe { std::mem::transmute(v) } - } -} - -impl Into for Vector2 { - fn into(self) -> ffi::Vector2 { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Vector2 { - fn into(self) -> ffi::Vector2 { - ffi::Vector2 { - x: self.x, - y: self.y, - } - } -} - -/// A convenience function for linearly interpolating an `f32`. -#[inline] -pub fn lerp(v0: f32, v1: f32, amount: f32) -> f32 { - return v0 + amount * (v1 - v0); -} - -/// A convenience function for making a new `Vector2`. -#[inline] -pub fn rvec2(x: T1, y: T2) -> Vector2 { - Vector2::new(x.as_f32(), y.as_f32()) -} - -/// A convenience function for making a new `Vector3`. -#[inline] -pub fn rvec3(x: T1, y: T2, z: T3) -> Vector3 { - Vector3::new(x.as_f32(), y.as_f32(), z.as_f32()) -} - -/// A convenience function for making a new `Quaternion`. -#[inline] -pub fn rquat(x: T1, y: T2, z: T3, w: T4) -> Quaternion { - Quaternion::new(x.as_f32(), y.as_f32(), z.as_f32(), w.as_f32()) -} - -/// A convenience function for making a new `Rectangle`. -#[inline] -pub fn rrect( - x: T1, - y: T2, - width: T3, - height: T4, -) -> Rectangle { - Rectangle::new(x.as_f32(), y.as_f32(), width.as_f32(), height.as_f32()) -} - -impl Vector2 { - /// Returns a new `Vector2` with specified components. - pub const fn new(x: f32, y: f32) -> Vector2 { - Vector2 { x, y } - } - - /// Returns a new `Vector2` with both components set to zero. - pub fn zero() -> Vector2 { - Vector2 { x: 0.0, y: 0.0 } - } - - /// Returns a new `Vector2` with both components set to one. - pub fn one() -> Vector2 { - Vector2 { x: 1.0, y: 1.0 } - } - - /// Calculates the vector length. - pub fn length(&self) -> f32 { - ((self.x * self.x) + (self.y * self.y)).sqrt() - } - - /// Calculates the vector length square (**2); - pub fn length_sqr(&self) -> f32 { - ((self.x * self.x) + (self.y * self.y)) - } - - /// Calculates the dot product with vector `v`. - pub fn dot(&self, v: Vector2) -> f32 { - self.x * v.x + self.y * v.y - } - - /// Calculates the distance towards vector `v`. - pub fn distance_to(&self, v: Vector2) -> f32 { - ((self.x - v.x) * (self.x - v.x) + (self.y - v.y) * (self.y - v.y)).sqrt() - } - - /// Calculates the angle towards vector `v` in radians. - pub fn angle_to(&self, v: Vector2) -> f32 { - let mut result = (v.y - self.y).atan2(v.x - self.x); - if result < 0.0 { - result += 2.0 * PI; - } - result - } - - /// Scales the vector by multiplying both components by `scale`. - pub fn scale(&mut self, scale: f32) { - *self *= scale; - } - - /// Returns a new `Vector2` with components scaled by `scale`. - pub fn scale_by(&self, scale: f32) -> Vector2 { - *self * scale - } - - /// Normalizes the vector. - pub fn normalize(&mut self) { - *self = self.normalized(); - } - - /// Returns a new `Vector2` with normalized components from the current vector. - pub fn normalized(&self) -> Vector2 { - let length_sqr = self.length_sqr(); - if length_sqr == 0.0 { - return *self; - } - *self / length_sqr.sqrt() - } - - /// Returns a new `Vector2` with componenets linearly interpolated by `amount` towards vector `v`. - pub fn lerp(&self, v: Vector2, amount: f32) -> Vector2 { - Vector2 { - x: self.x + amount * (v.x - self.x), - y: self.y + amount * (v.y - self.y), - } - } - - /// Returns a new `Vector2` with componenets clamp to a certain interval. - pub fn clamp(&self, min: f32, max: f32) -> Vector2 { - Vector2 { - x: self.x.clamp(min, max), - y: self.y.clamp(min, max), - } - } -} - -impl From<(f32, f32)> for Vector2 { - #[inline] - fn from((x, y): (f32, f32)) -> Vector2 { - Vector2 { x, y } - } -} - -impl Add for Vector2 { - type Output = Vector2; - fn add(self, v: Vector2) -> Self { - Vector2 { - x: self.x + v.x, - y: self.y + v.y, - } - } -} - -impl Add for Vector2 { - type Output = Vector2; - fn add(self, value: f32) -> Self { - Vector2 { - x: self.x + value, - y: self.y + value, - } - } -} - -impl AddAssign for Vector2 { - fn add_assign(&mut self, v: Vector2) { - *self = *self + v; - } -} - -impl AddAssign for Vector2 { - fn add_assign(&mut self, value: f32) { - *self = *self + value; - } -} - -impl Sub for Vector2 { - type Output = Vector2; - fn sub(self, v: Vector2) -> Self { - Vector2 { - x: self.x - v.x, - y: self.y - v.y, - } - } -} - -impl Sub for Vector2 { - type Output = Vector2; - fn sub(self, value: f32) -> Self { - Vector2 { - x: self.x - value, - y: self.y - value, - } - } -} - -impl SubAssign for Vector2 { - fn sub_assign(&mut self, v: Vector2) { - *self = *self - v; - } -} - -impl SubAssign for Vector2 { - fn sub_assign(&mut self, value: f32) { - *self = *self - value; - } -} - -impl Mul for Vector2 { - type Output = Vector2; - fn mul(self, v: Vector2) -> Self { - Vector2 { - x: self.x * v.x, - y: self.y * v.y, - } - } -} - -impl Mul for Vector2 { - type Output = Vector2; - fn mul(self, value: f32) -> Self { - Vector2 { - x: self.x * value, - y: self.y * value, - } - } -} - -impl MulAssign for Vector2 { - fn mul_assign(&mut self, v: Vector2) { - *self = *self * v; - } -} - -impl MulAssign for Vector2 { - fn mul_assign(&mut self, value: f32) { - *self = *self * value; - } -} - -impl Div for Vector2 { - type Output = Vector2; - fn div(self, v: Vector2) -> Self { - Vector2 { - x: self.x / v.x, - y: self.y / v.y, - } - } -} - -impl Div for Vector2 { - type Output = Vector2; - fn div(self, value: f32) -> Self { - Vector2 { - x: self.x / value, - y: self.y / value, - } - } -} - -impl DivAssign for Vector2 { - fn div_assign(&mut self, v: Vector2) { - *self = *self / v; - } -} - -impl DivAssign for Vector2 { - fn div_assign(&mut self, value: f32) { - *self = *self / value; - } -} - -impl Neg for Vector2 { - type Output = Vector2; - fn neg(self) -> Self { - Vector2 { - x: -self.x, - y: -self.y, - } - } -} - -optional_serde_struct! { - pub struct Vector3 { - pub x: f32, - pub y: f32, - pub z: f32, - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector3 { - fn from(v: na::Vector3) -> Vector3 { - Vector3 { - x: v.x, - y: v.y, - z: v.z - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector3 { - fn from(v: na::base::coordinates::XYZ) -> Vector3 { - Vector3 { - x: v.x, - y: v.y, - z: v.z - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl Into> for Vector3 { - fn into(self) -> na::Vector3 { - na::Vector3::new(self.x, self.y, self.z) - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector3 { - fn from(v: na::Vector3) -> Vector3 { - Vector3 { - x: v.x, - y: v.y, - z: v.z, - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector3 { - fn from(v: na::base::coordinates::XYZ) -> Vector3 { - Vector3 { - x: v.x, - y: v.y, - z: v.z, - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl Into> for Vector3 { - fn into(self) -> na::Vector3 { - na::Vector3::new(self.x, self.y, self.z) - } -} - -impl From for Vector3 { - fn from(v: ffi::Vector3) -> Vector3 { - unsafe { std::mem::transmute(v) } - } -} - -impl Into for Vector3 { - fn into(self) -> ffi::Vector3 { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Vector3 { - fn into(self) -> ffi::Vector3 { - ffi::Vector3 { - x: self.x, - y: self.y, - z: self.z, - } - } -} - -impl Vector3 { - /// Returns a new `Vector3` with specified components. - pub const fn new(x: f32, y: f32, z: f32) -> Vector3 { - Vector3 { x, y, z } - } - - pub fn up() -> Vector3 { - Vector3::new(0.0, 1.0, 0.0) - } - - pub fn forward() -> Vector3 { - Vector3::new(0.0, 0.0, 1.0) - } - - pub fn right() -> Vector3 { - Vector3::new(1.0, 0.0, 0.0) - } - - pub fn left() -> Vector3 { - Vector3::new(-1.0, 0.0, 0.0) - } - - /// Returns a new `Vector3` with all components set to zero. - pub fn zero() -> Vector3 { - Vector3 { - x: 0.0, - y: 0.0, - z: 0.0, - } - } - - /// Returns a new `Vector3` with all components set to one. - pub fn one() -> Vector3 { - Vector3 { - x: 1.0, - y: 1.0, - z: 1.0, - } - } - - /// Returns a new `Vector3` containing the cross product between `self` and vector `v`. - pub fn cross(&self, v: Vector3) -> Vector3 { - Vector3 { - x: self.y * v.z - self.z * v.y, - y: self.z * v.x - self.x * v.z, - z: self.x * v.y - self.y * v.x, - } - } - - /// Returns a new `Vector3` perpendicular to `self`. - pub fn perpendicular(&self) -> Vector3 { - let mut min = self.x.abs(); - let mut cardinal_axis = Vector3 { - x: 1.0, - y: 0.0, - z: 0.0, - }; - - if self.y.abs() < min { - min = self.y.abs(); - cardinal_axis = Vector3 { - x: 0.0, - y: 1.0, - z: 0.0, - }; - } - - if self.z.abs() < min { - cardinal_axis = Vector3 { - x: 0.0, - y: 0.0, - z: 1.0, - }; - } - - self.cross(cardinal_axis) - } - - /// Calculates the vector length. - pub fn length(&self) -> f32 { - (self.x * self.x + self.y * self.y + self.z * self.z).sqrt() - } - - /// Calculates the dot product with vector `v`. - pub fn dot(&self, v: Vector3) -> f32 { - self.x * v.x + self.y * v.y + self.z * v.z - } - - /// Calculates the distance towards vector `v`. - pub fn distance_to(&self, v: Vector3) -> f32 { - let dx = v.x - self.x; - let dy = v.y - self.y; - let dz = v.z - self.z; - (dx * dx + dy * dy + dz * dz).sqrt() - } - - /// Scales the vector by multiplying both components by `scale`. - pub fn scale(&mut self, scale: f32) { - *self *= scale; - } - - /// Returns a new `Vector3` with components scaled by `scale`. - pub fn scale_by(&self, scale: f32) -> Vector3 { - *self * scale - } - - /// Normalizes the current vector. - pub fn normalize(&mut self) { - *self = self.normalized(); - } - - /// Returns a new `Vector3` with normalized components from the current vector. - pub fn normalized(&self) -> Vector3 { - let mut length = self.length(); - if length == 0.0 { - length = 1.0; - } - let ilength = 1.0 / length; - - Vector3 { - x: self.x * ilength, - y: self.y * ilength, - z: self.z * ilength, - } - } - - /// Normalizes and changes both `self` and `v` to be orthogonal to eachother. - pub fn ortho_normalize(&mut self, v: &mut Vector3) { - *self = self.normalized(); - let vn = self.cross(*v).normalized(); - *v = vn.cross(*self); - } - - /// Transforms the current vector using Matrix `mat`. - pub fn transform(&mut self, mat: Matrix) { - *self = self.transform_with(mat); - } - - /// Returns a new `Vector3` containing components transformed by Matrix `mat`. - pub fn transform_with(&self, mat: Matrix) -> Vector3 { - Vector3 { - x: mat.m0 * self.x + mat.m4 * self.y + mat.m8 * self.z + mat.m12, - y: mat.m1 * self.x + mat.m5 * self.y + mat.m9 * self.z + mat.m13, - z: mat.m2 * self.x + mat.m6 * self.y + mat.m10 * self.z + mat.m14, - } - } - - /// Rotates the current vector using Quaternion `q`. - pub fn rotate(&mut self, q: Quaternion) { - *self = self.rotate_by(q); - } - - /// Returns a new `Vector3` with components rotated by Quaternion `q`. - pub fn rotate_by(&self, q: Quaternion) -> Vector3 { - Vector3 { - x: self.x * (q.x * q.x + q.w * q.w - q.y * q.y - q.z * q.z) - + self.y * (2.0 * q.x * q.y - 2.0 * q.w * q.z) - + self.z * (2.0 * q.x * q.z + 2.0 * q.w * q.y), - y: self.x * (2.0 * q.w * q.z + 2.0 * q.x * q.y) - + self.y * (q.w * q.w - q.x * q.x + q.y * q.y - q.z * q.z) - + self.z * (-2.0 * q.w * q.x + 2.0 * q.y * q.z), - z: self.x * (-2.0 * q.w * q.y + 2.0 * q.x * q.z) - + self.y * (2.0 * q.w * q.x + 2.0 * q.y * q.z) - + self.z * (q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z), - } - } - - /// Returns a new `Vector3` with componenets linearly interpolated by `amount` towards vector `v`. - pub fn lerp(&self, v: Vector3, amount: f32) -> Vector3 { - Vector3 { - x: self.x + amount * (v.x - self.x), - y: self.y + amount * (v.y - self.y), - z: self.z + amount * (v.z - self.z), - } - } - - /// Reflects the current vector from `normal`. - pub fn reflect(&mut self, normal: Vector3) { - *self = self.reflect_from(normal); - } - - /// Returns a new `Vector3` reflected from the current vector using `normal`. - pub fn reflect_from(&self, normal: Vector3) -> Vector3 { - let dot_product = self.dot(normal); - Vector3 { - x: self.x - (2.0 * normal.x) * dot_product, - y: self.y - (2.0 * normal.y) * dot_product, - z: self.z - (2.0 * normal.z) * dot_product, - } - } - - /// Returns a new `Vector3` containing the minimum of each corresponding component. - pub fn min(&self, v: Vector3) -> Vector3 { - Vector3 { - x: self.x.min(v.x), - y: self.y.min(v.y), - z: self.z.min(v.z), - } - } - - /// Returns a new `Vector3` containing the maximum of each corresponding component. - pub fn max(&self, v: Vector3) -> Vector3 { - Vector3 { - x: self.x.max(v.x), - y: self.y.max(v.y), - z: self.z.max(v.z), - } - } - - /// Returns barycenter coordinates (u, v, w) from point p (current vector) with respect to triangle (`a`, `b`, `c`). - pub fn barycenter(&self, a: Vector3, b: Vector3, c: Vector3) -> Vector3 { - let v0 = b - a; - let v1 = c - a; - let v2 = *self - a; - let d00 = v0.dot(v0); - let d01 = v0.dot(v1); - let d11 = v1.dot(v1); - let d20 = v2.dot(v0); - let d21 = v2.dot(v1); - let denom = d00 * d11 - d01 * d01; - - let y = (d11 * d20 - d01 * d21) / denom; - let z = (d00 * d21 - d01 * d20) / denom; - Vector3 { - x: 1.0 - (z + y), - y, - z, - } - } - - /// Returns a 3-length `f32` array containing components `[x, y, z]` of the current vector. - pub fn to_array(&self) -> [f32; 3] { - [self.x, self.y, self.z] - } - - /// Returns a new `Vector3` with componenets clamp to a certain interval. - pub fn clamp(&self, min: f32, max: f32) -> Vector3 { - Vector3 { - x: self.x.clamp(min, max), - y: self.y.clamp(min, max), - z: self.z.clamp(min, max), - } - } -} - -impl From<(f32, f32, f32)> for Vector3 { - #[inline] - fn from((x, y, z): (f32, f32, f32)) -> Vector3 { - Vector3 { x, y, z } - } -} - -impl Add for Vector3 { - type Output = Vector3; - fn add(self, v: Vector3) -> Self { - Vector3 { - x: self.x + v.x, - y: self.y + v.y, - z: self.z + v.z, - } - } -} - -impl Add for Vector3 { - type Output = Vector3; - fn add(self, value: f32) -> Self { - Vector3 { - x: self.x + value, - y: self.y + value, - z: self.z + value, - } - } -} - -impl AddAssign for Vector3 { - fn add_assign(&mut self, v: Vector3) { - *self = *self + v; - } -} - -impl AddAssign for Vector3 { - fn add_assign(&mut self, value: f32) { - *self = *self + value; - } -} - -impl Sub for Vector3 { - type Output = Vector3; - fn sub(self, v: Vector3) -> Self { - Vector3 { - x: self.x - v.x, - y: self.y - v.y, - z: self.z - v.z, - } - } -} - -impl Sub for Vector3 { - type Output = Vector3; - fn sub(self, value: f32) -> Self { - Vector3 { - x: self.x - value, - y: self.y - value, - z: self.z - value, - } - } -} - -impl SubAssign for Vector3 { - fn sub_assign(&mut self, v: Vector3) { - *self = *self - v; - } -} - -impl SubAssign for Vector3 { - fn sub_assign(&mut self, value: f32) { - *self = *self - value; - } -} - -impl Mul for Vector3 { - type Output = Vector3; - fn mul(self, v: Vector3) -> Self { - Vector3 { - x: self.x * v.x, - y: self.y * v.y, - z: self.z * v.z, - } - } -} - -impl Mul for Vector3 { - type Output = Vector3; - fn mul(self, value: f32) -> Self { - Vector3 { - x: self.x * value, - y: self.y * value, - z: self.z * value, - } - } -} - -impl MulAssign for Vector3 { - fn mul_assign(&mut self, v: Vector3) { - *self = *self * v; - } -} - -impl MulAssign for Vector3 { - fn mul_assign(&mut self, value: f32) { - *self = *self * value; - } -} - -impl Div for Vector3 { - type Output = Vector3; - fn div(self, v: Vector3) -> Self { - Vector3 { - x: self.x / v.x, - y: self.y / v.y, - z: self.z / v.z, - } - } -} - -impl Div for Vector3 { - type Output = Vector3; - fn div(self, value: f32) -> Self { - Vector3 { - x: self.x / value, - y: self.y / value, - z: self.z / value, - } - } -} - -impl DivAssign for Vector3 { - fn div_assign(&mut self, v: Vector3) { - *self = *self / v; - } -} - -impl DivAssign for Vector3 { - fn div_assign(&mut self, value: f32) { - *self = *self / value; - } -} - -impl Neg for Vector3 { - type Output = Vector3; - fn neg(self) -> Self { - Vector3 { - x: -self.x, - y: -self.y, - z: -self.z, - } - } -} - -optional_serde_struct! { - pub struct Vector4 { - pub x: f32, - pub y: f32, - pub z: f32, - pub w: f32, - } -} - -pub type Quaternion = Vector4; - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector4 { - fn from(v: na::Vector4) -> Vector4 { - Vector4 { - x: v.x, - y: v.y, - z: v.z, - w: v.w - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Vector4 { - fn from(v: na::base::coordinates::XYZW) -> Vector4 { - Vector4 { - x: v.x, - y: v.y, - z: v.z, - w: v.w - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl Into> for Vector4 { - fn into(self) -> na::Vector4 { - na::Vector4::new(self.x, self.y, self.z, self.w) - } -} - -impl From for Vector4 { - fn from(v: ffi::Vector4) -> Vector4 { - unsafe { std::mem::transmute(v) } - } -} - -impl Into for Vector4 { - fn into(self) -> ffi::Vector4 { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Vector4 { - fn into(self) -> ffi::Vector4 { - ffi::Vector4 { - x: self.x, - y: self.y, - z: self.z, - w: self.w, - } - } -} - -impl Quaternion { - /// Returns a new `Quaternion` with specified components. - pub const fn new(x: f32, y: f32, z: f32, w: f32) -> Quaternion { - Quaternion { x, y, z, w } - } - - /// Returns the identity quaternion. - pub fn identity() -> Quaternion { - Quaternion { - x: 0.0, - y: 0.0, - z: 0.0, - w: 1.0, - } - } - - /// Returns quaternion based on the rotation from one vector to another. - pub fn from_vec3_pair(from: Vector3, to: Vector3) -> Quaternion { - let cross = from.cross(to); - Quaternion { - x: cross.x, - y: cross.y, - z: cross.y, - w: 1.0 + from.dot(to), - } - .normalized() - } - - /// Returns a quaternion for a given rotation matrix. - pub fn from_matrix(mat: Matrix) -> Quaternion { - let trace = mat.trace(); - - if trace > 0.0 { - let s = (trace + 1.0).sqrt() * 2.0; - let inv_s = 1.0 / s; - - Quaternion { - w: s * 0.25, - x: (mat.m6 - mat.m9) * inv_s, - y: (mat.m8 - mat.m2) * inv_s, - z: (mat.m1 - mat.m4) * inv_s, - } - } else { - let m00 = mat.m0; - let m11 = mat.m5; - let m22 = mat.m10; - - if m00 > m11 && m00 > m22 { - let s = (1.0 + m00 - m11 - m22).sqrt() * 2.0; - let inv_s = 1.0 / s; - - Quaternion { - w: (mat.m6 - mat.m9) * inv_s, - x: s * 0.25, - y: (mat.m4 + mat.m1) * inv_s, - z: (mat.m8 + mat.m2) * inv_s, - } - } else if m11 > m22 { - let s = (1.0 + m11 - m00 - m22).sqrt() * 2.0; - let inv_s = 1.0 / s; - - Quaternion { - w: (mat.m8 - mat.m2) * inv_s, - x: (mat.m4 + mat.m1) * inv_s, - y: s * 0.25, - z: (mat.m9 + mat.m6) * inv_s, - } - } else { - let s = (1.0 + m22 - m00 - m11).sqrt() * 2.0; - let inv_s = 1.0 / s; - - Quaternion { - w: (mat.m1 - mat.m4) * inv_s, - x: (mat.m8 + mat.m2) * inv_s, - y: (mat.m9 + mat.m6) * inv_s, - z: s * 0.25, - } - } - } - } - - /// Returns a rotation matrix for the current quaternion. - pub fn to_matrix(&self) -> Matrix { - let x = self.x; - let y = self.y; - let z = self.z; - let w = self.w; - - let x2 = x + x; - let y2 = y + y; - let z2 = z + z; - - let length = self.length(); - let length_squared = length * length; - - let xx = x * x2 / length_squared; - let xy = x * y2 / length_squared; - let xz = x * z2 / length_squared; - - let yy = y * y2 / length_squared; - let yz = y * z2 / length_squared; - let zz = z * z2 / length_squared; - - let wx = w * x2 / length_squared; - let wy = w * y2 / length_squared; - let wz = w * z2 / length_squared; - - Matrix { - m0: 1.0 - (yy + zz), - m1: xy - wz, - m2: xz + wy, - m3: 0.0, - m4: xy + wz, - m5: 1.0 - (xx + zz), - m6: yz - wx, - m7: 0.0, - m8: xz - wy, - m9: yz + wx, - m10: 1.0 - (xx + yy), - m11: 0.0, - m12: 0.0, - m13: 0.0, - m14: 0.0, - m15: 1.0, - } - } - - /// Returns a quaternion equivalent to Euler angles. - pub fn from_euler(roll: f32, pitch: f32, yaw: f32) -> Quaternion { - let x0 = (roll * 0.5).cos(); - let x1 = (roll * 0.5).sin(); - let y0 = (pitch * 0.5).cos(); - let y1 = (pitch * 0.5).sin(); - let z0 = (yaw * 0.5).cos(); - let z1 = (yaw * 0.5).sin(); - - Quaternion { - x: (x1 * y0 * z0) - (x0 * y1 * z1), - y: (x0 * y1 * z0) + (x1 * y0 * z1), - z: (x0 * y0 * z1) - (x1 * y1 * z0), - w: (x0 * y0 * z0) + (x1 * y1 * z1), - } - } - - /// Returns a vector containing Euler angles in radians (roll, pitch, yaw), based on the current quaternion. - pub fn to_euler(&self) -> Vector3 { - // roll (x-axis rotation) - let x0 = 2.0 * (self.w * self.x + self.y * self.z); - let x1 = 1.0 - 2.0 * (self.x * self.x + self.y * self.y); - - // pitch (y-axis rotation) - let mut y0 = 2.0 * (self.w * self.y - self.z * self.x); - y0 = if y0 > 1.0 { 1.0 } else { y0 }; - y0 = if y0 < -1.0 { -1.0 } else { y0 }; - - // yaw (z-axis rotation) - let z0 = 2.0 * (self.w * self.z + self.x * self.y); - let z1 = 1.0 - 2.0 * (self.y * self.y + self.z * self.z); - - Vector3 { - x: x0.atan2(x1), - y: y0.asin(), - z: z0.atan2(z1), - } - } - - /// Returns rotation quaternion for an `axis` and `angle` (in radians). - pub fn from_axis_angle(axis: Vector3, angle: f32) -> Quaternion { - let mut result = Quaternion::identity(); - let mut axis = axis; - let mut angle = angle; - - if axis.length() != 0.0 { - angle *= 0.5; - } - - axis.normalize(); - - let sinres = angle.sin(); - let cosres = angle.cos(); - - result.x = axis.x * sinres; - result.y = axis.y * sinres; - result.z = axis.z * sinres; - result.w = cosres; - result.normalized() - } - - /// Returns a 2-tuple containing the axis (`Vector3`) and angle (`f32` in radians) for the current quaternion. - pub fn to_axis_angle(&self) -> (Vector3, f32) { - let mut q = *self; - if q.w.abs() > 1.0 { - q = q.normalized(); - } - - let mut res_axis = Vector3::zero(); - let res_angle = 2.0 * q.w.acos(); - let den = (1.0 - q.w * q.w).sqrt(); - - if den > 0.0001 { - res_axis.x = q.x / den; - res_axis.y = q.y / den; - res_axis.z = q.z / den; - } else { - // This occurs when the angle is zero. - // Not a problem: just set an arbitrary normalized axis. - res_axis.x = 1.0; - } - - (res_axis, res_angle) - } - - /// Computes the length of the current quaternion. - pub fn length(&self) -> f32 { - (self.x * self.x + self.y * self.y + self.z * self.z + self.w * self.w).sqrt() - } - - /// Returns a normalized version of the current quaternion. - pub fn normalized(&self) -> Quaternion { - let mut length = self.length(); - if length == 0.0 { - length = 1.0; - } - let ilength = 1.0 / length; - - Quaternion { - x: self.x * ilength, - y: self.y * ilength, - z: self.z * ilength, - w: self.w * ilength, - } - } - - /// Returns an inverted version of the current quaternion. - pub fn inverted(&self) -> Quaternion { - let mut result = *self; - let length = self.length(); - let length_sq = length * length; - - if length_sq != 0.0 { - let i = 1.0 / length_sq; - result.x *= -i; - result.y *= -i; - result.z *= -i; - result.w *= i; - } - result - } - - /// Calculates linear interpolation between current and `q` quaternions. - pub fn lerp(&self, q: Quaternion, amount: f32) -> Quaternion { - Quaternion { - x: self.x + amount * (q.x - self.x), - y: self.y + amount * (q.y - self.y), - z: self.z + amount * (q.z - self.z), - w: self.w + amount * (q.w - self.w), - } - } - - /// Calculates slerp-optimized interpolation between current and `q` quaternions. - pub fn nlerp(&self, q: Quaternion, amount: f32) -> Quaternion { - self.lerp(q, amount).normalized() - } - - /// Calculates spherical linear interpolation between current and `q` quaternions. - pub fn slerp(&self, q: Quaternion, amount: f32) -> Quaternion { - let cos_half_theta = self.x * q.x + self.y * q.y + self.z * q.z + self.w * q.w; - - if cos_half_theta.abs() >= 1.0 { - *self - } else if cos_half_theta > 0.95 { - self.nlerp(q, amount) - } else { - let half_theta = cos_half_theta.acos(); - let sin_half_theta = (1.0 - cos_half_theta * cos_half_theta).sqrt(); - - if sin_half_theta.abs() < 0.001 { - Quaternion { - x: (self.x * 0.5 + q.x * 0.5), - y: (self.y * 0.5 + q.y * 0.5), - z: (self.z * 0.5 + q.z * 0.5), - w: (self.w * 0.5 + q.w * 0.5), - } - } else { - let ratio_a = ((1.0 - amount) * half_theta).sin() / sin_half_theta; - let ratio_b = (amount * half_theta).sin() / sin_half_theta; - - Quaternion { - x: (self.x * ratio_a + q.x * ratio_b), - y: (self.y * ratio_a + q.y * ratio_b), - z: (self.z * ratio_a + q.z * ratio_b), - w: (self.w * ratio_a + q.w * ratio_b), - } - } - } - } - - /// Returns a transformed version of the current quaternion given a transformation matrix. - pub fn transform(&self, mat: Matrix) -> Quaternion { - Quaternion { - x: mat.m0 * self.x + mat.m4 * self.y + mat.m8 * self.z + mat.m12 * self.w, - y: mat.m1 * self.x + mat.m5 * self.y + mat.m9 * self.z + mat.m13 * self.w, - z: mat.m2 * self.x + mat.m6 * self.y + mat.m10 * self.z + mat.m14 * self.w, - w: mat.m3 * self.x + mat.m7 * self.y + mat.m11 * self.z + mat.m15 * self.w, - } - } - - /// Returns a new `Quaternion` with componenets clamp to a certain interval. - pub fn clamp(&self, min: f32, max: f32) -> Quaternion { - Quaternion { - x: self.x.clamp(min, max), - y: self.y.clamp(min, max), - z: self.z.clamp(min, max), - w: self.w.clamp(min, max), - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Quaternion { - fn from(q: na::geometry::Quaternion) -> Quaternion { - Quaternion { - x: q.coords.x, - y: q.coords.y, - z: q.coords.z, - w: q.coords.w, - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl Into> for Quaternion { - fn into(self) -> na::geometry::Quaternion { - na::geometry::Quaternion::new(self.x, self.y, self.z, self.w) - } -} - -#[cfg(feature = "nalgebra_interop")] -impl From> for Quaternion { - fn from(q: na::geometry::Quaternion) -> Quaternion { - Quaternion { - x: q.coords.x, - y: q.coords.y, - z: q.coords.z, - w: q.coords.w - } - } -} - -#[cfg(feature = "nalgebra_interop")] -impl Into> for Quaternion { - fn into(self) -> na::geometry::Quaternion { - na::geometry::Quaternion::new(self.x, self.y, self.z, self.w) - } -} - -impl From<(f32, f32, f32, f32)> for Quaternion { - #[inline] - fn from((x, y, z, w): (f32, f32, f32, f32)) -> Quaternion { - Quaternion { x, y, z, w } - } -} - -impl Mul for Quaternion { - type Output = Quaternion; - fn mul(self, q: Quaternion) -> Quaternion { - let qax = self.x; - let qay = self.y; - let qaz = self.z; - let qaw = self.w; - let qbx = q.x; - let qby = q.y; - let qbz = q.z; - let qbw = q.w; - - Quaternion { - x: (qax * qbw) + (qaw * qbx) + (qay * qbz) - (qaz * qby), - y: (qay * qbw) + (qaw * qby) + (qaz * qbx) - (qax * qbz), - z: (qaz * qbw) + (qaw * qbz) + (qax * qby) - (qay * qbx), - w: (qaw * qbw) - (qax * qbx) - (qay * qby) - (qaz * qbz), - } - } -} - -impl MulAssign for Quaternion { - fn mul_assign(&mut self, q: Quaternion) { - *self = *self * q; - } -} - -optional_serde_struct! { - pub struct Matrix { - pub m0: f32, - pub m4: f32, - pub m8: f32, - pub m12: f32, - pub m1: f32, - pub m5: f32, - pub m9: f32, - pub m13: f32, - pub m2: f32, - pub m6: f32, - pub m10: f32, - pub m14: f32, - pub m3: f32, - pub m7: f32, - pub m11: f32, - pub m15: f32, - } -} - -impl From for Matrix { - fn from(r: ffi::Matrix) -> Matrix { - unsafe { std::mem::transmute(r) } - } -} - -impl Into for Matrix { - fn into(self) -> ffi::Matrix { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Matrix { - fn into(self) -> ffi::Matrix { - ffi::Matrix { - m0: self.m0, - m4: self.m4, - m8: self.m8, - m12: self.m12, - m1: self.m1, - m5: self.m5, - m9: self.m9, - m13: self.m13, - m2: self.m2, - m6: self.m6, - m10: self.m10, - m14: self.m14, - m3: self.m3, - m7: self.m7, - m11: self.m11, - m15: self.m15, - } - } -} - -impl Matrix { - /// Returns the identity matrix. - pub fn identity() -> Matrix { - Matrix { - m0: 1.0, - m4: 0.0, - m8: 0.0, - m12: 0.0, - m1: 0.0, - m5: 1.0, - m9: 0.0, - m13: 0.0, - m2: 0.0, - m6: 0.0, - m10: 1.0, - m14: 0.0, - m3: 0.0, - m7: 0.0, - m11: 0.0, - m15: 1.0, - } - } - - /// Returns the zero matriz. - pub fn zero() -> Matrix { - Matrix { - m0: 0.0, - m4: 0.0, - m8: 0.0, - m12: 0.0, - m1: 0.0, - m5: 0.0, - m9: 0.0, - m13: 0.0, - m2: 0.0, - m6: 0.0, - m10: 0.0, - m14: 0.0, - m3: 0.0, - m7: 0.0, - m11: 0.0, - m15: 0.0, - } - } - - /// Returns a translation matrix. - pub fn translate(x: f32, y: f32, z: f32) -> Matrix { - Matrix { - m0: 1.0, - m4: 0.0, - m8: 0.0, - m12: x, - m1: 0.0, - m5: 1.0, - m9: 0.0, - m13: y, - m2: 0.0, - m6: 0.0, - m10: 1.0, - m14: z, - m3: 0.0, - m7: 0.0, - m11: 0.0, - m15: 1.0, - } - } - - /// Returns a rotation matrix. - pub fn rotate(axis: Vector3, angle: f32) -> Matrix { - let mut x = axis.x; - let mut y = axis.y; - let mut z = axis.z; - let mut length = (x * x + y * y + z * z).sqrt(); - - if (length != 1.0) && (length != 0.0) { - length = 1.0 / length; - x *= length; - y *= length; - z *= length; - } - - let sinres = angle.sin(); - let cosres = angle.cos(); - let t = 1.0 - cosres; - - Matrix { - m0: (x * x * t) + cosres, - m1: (y * x * t) + (z * sinres), - m2: (z * x * t) - (y * sinres), - m3: 0.0, - - m4: (x * y * t) - (z * sinres), - m5: (y * y * t) + cosres, - m6: (z * y * t) + (x * sinres), - m7: 0.0, - - m8: (x * z * t) + (y * sinres), - m9: (y * z * t) - (x * sinres), - m10: (z * z * t) + cosres, - m11: 0.0, - - m12: 0.0, - m13: 0.0, - m14: 0.0, - m15: 1.0, - } - } - - /// Returns a translation matrix around the X axis. - pub fn rotate_x(angle: f32) -> Matrix { - let mut result = Matrix::identity(); - - let cosres = angle.cos(); - let sinres = angle.sin(); - - result.m5 = cosres; - result.m6 = -sinres; - result.m9 = sinres; - result.m10 = cosres; - result - } - - /// Returns a translation matrix around the Y axis. - pub fn rotate_y(angle: f32) -> Matrix { - let mut result = Matrix::identity(); - - let cosres = angle.cos(); - let sinres = angle.sin(); - - result.m0 = cosres; - result.m2 = sinres; - result.m8 = -sinres; - result.m10 = cosres; - result - } - - /// Returns a translation matrix around the Z axis. - pub fn rotate_z(angle: f32) -> Matrix { - let mut result = Matrix::identity(); - - let cosres = angle.cos(); - let sinres = angle.sin(); - - result.m0 = cosres; - result.m1 = -sinres; - result.m4 = sinres; - result.m5 = cosres; - result - } - - /// Returns xyz-rotation matrix (angles in radians) - pub fn rotate_xyz(ang: Vector3) -> Self { - let mut result = Self::identity(); - - let cosz = -ang.z.cos(); - let sinz = -ang.z.sin(); - let cosy = -ang.y.cos(); - let siny = -ang.y.sin(); - let cosx = -ang.x.cos(); - let sinx = -ang.x.sin(); - - result.m0 = cosz * cosy; - result.m4 = (cosz * siny * sinx) - (sinz * cosx); - result.m8 = (cosz * siny * cosx) + (sinz * sinx); - - result.m1 = sinz * cosy; - result.m5 = (sinz * siny * sinx) + (cosz * cosx); - result.m9 = (sinz * siny * cosx) - (cosz * sinx); - - result.m2 = -siny; - result.m6 = cosy * sinx; - result.m10 = cosy * cosx; - - result - } - - /// Returns a scaling matrix. - pub fn scale(x: f32, y: f32, z: f32) -> Matrix { - Matrix { - m0: x, - m4: 0.0, - m8: 0.0, - m12: 0.0, - m1: 0.0, - m5: y, - m9: 0.0, - m13: 0.0, - m2: 0.0, - m6: 0.0, - m10: z, - m14: 0.0, - m3: 0.0, - m7: 0.0, - m11: 0.0, - m15: 1.0, - } - } - - /// Returns perspective projection matrix based on frustum parameters. - pub fn frustum(left: f32, right: f32, bottom: f32, top: f32, near: f32, far: f32) -> Matrix { - let rl = right - left; - let tb = top - bottom; - let fne = far - near; - - Matrix { - m0: (near * 2.0) / rl, - m1: 0.0, - m2: 0.0, - m3: 0.0, - - m4: 0.0, - m5: (near * 2.0) / tb, - m6: 0.0, - m7: 0.0, - - m8: (right + left) / rl, - m9: (top + bottom) / tb, - m10: -(far + near) / fne, - m11: -1.0, - - m12: 0.0, - m13: 0.0, - m14: -(far * near * 2.0) / fne, - m15: 0.0, - } - } - - /// Returns perspective projection matrix. - pub fn perspective(fovy: f32, aspect: f32, near: f32, far: f32) -> Matrix { - let top = near * (fovy * 0.5).tan(); - let right = top * aspect; - Matrix::frustum(-right, right, -top, top, near, far) - } - - /// Returns orthographic projection matrix. - pub fn ortho(left: f32, right: f32, bottom: f32, top: f32, near: f32, far: f32) -> Matrix { - let rl = right - left; - let tb = top - bottom; - let fne = far - near; - - Matrix { - m0: 2.0 / rl, - m1: 0.0, - m2: 0.0, - m3: 0.0, - m4: 0.0, - m5: 2.0 / tb, - m6: 0.0, - m7: 0.0, - m8: 0.0, - m9: 0.0, - m10: -2.0 / fne, - m11: 0.0, - m12: -(left + right) / rl, - m13: -(top + bottom) / tb, - m14: -(far + near) / fne, - m15: 1.0, - } - } - - /// Returns camera look-at matrix (view matrix). - pub fn look_at(eye: Vector3, target: Vector3, up: Vector3) -> Matrix { - let z = (eye - target).normalized(); - let x = up.cross(z).normalized(); - let y = z.cross(x).normalized(); - - Matrix { - m0: x.x, - m1: x.y, - m2: x.z, - m3: 0.0, - m4: y.x, - m5: y.y, - m6: y.z, - m7: 0.0, - m8: z.x, - m9: z.y, - m10: z.z, - m11: 0.0, - m12: eye.x, - m13: eye.y, - m14: eye.z, - m15: 1.0, - } - .inverted() - } - - /// Calculates the determinant of the current matrix. - pub fn determinant(&self) -> f32 { - let a00 = self.m0; - let a01 = self.m1; - let a02 = self.m2; - let a03 = self.m3; - let a10 = self.m4; - let a11 = self.m5; - let a12 = self.m6; - let a13 = self.m7; - let a20 = self.m8; - let a21 = self.m9; - let a22 = self.m10; - let a23 = self.m11; - let a30 = self.m12; - let a31 = self.m13; - let a32 = self.m14; - let a33 = self.m15; - - a30 * a21 * a12 * a03 - a20 * a31 * a12 * a03 - a30 * a11 * a22 * a03 - + a10 * a31 * a22 * a03 - + a20 * a11 * a32 * a03 - - a10 * a21 * a32 * a03 - - a30 * a21 * a02 * a13 - + a20 * a31 * a02 * a13 - + a30 * a01 * a22 * a13 - - a00 * a31 * a22 * a13 - - a20 * a01 * a32 * a13 - + a00 * a21 * a32 * a13 - + a30 * a11 * a02 * a23 - - a10 * a31 * a02 * a23 - - a30 * a01 * a12 * a23 - + a00 * a31 * a12 * a23 - + a10 * a01 * a32 * a23 - - a00 * a11 * a32 * a23 - - a20 * a11 * a02 * a33 - + a10 * a21 * a02 * a33 - + a20 * a01 * a12 * a33 - - a00 * a21 * a12 * a33 - - a10 * a01 * a22 * a33 - + a00 * a11 * a22 * a33 - } - - /// Calculates the trace of the matrix (sum of the values along the diagonal). - pub fn trace(&self) -> f32 { - self.m0 + self.m5 + self.m10 + self.m15 - } - - /// Returns a new `Matrix` transposed from the current one. - pub fn transposed(&self) -> Matrix { - Matrix { - m0: self.m0, - m1: self.m4, - m2: self.m8, - m3: self.m12, - m4: self.m1, - m5: self.m5, - m6: self.m9, - m7: self.m13, - m8: self.m2, - m9: self.m6, - m10: self.m10, - m11: self.m14, - m12: self.m3, - m13: self.m7, - m14: self.m11, - m15: self.m15, - } - } - - /// Returns a new `Matrix` inverted from the current one. - pub fn inverted(&self) -> Matrix { - let a00 = self.m0; - let a01 = self.m1; - let a02 = self.m2; - let a03 = self.m3; - let a10 = self.m4; - let a11 = self.m5; - let a12 = self.m6; - let a13 = self.m7; - let a20 = self.m8; - let a21 = self.m9; - let a22 = self.m10; - let a23 = self.m11; - let a30 = self.m12; - let a31 = self.m13; - let a32 = self.m14; - let a33 = self.m15; - - let b00 = (a00 * a11) - (a01 * a10); - let b01 = (a00 * a12) - (a02 * a10); - let b02 = (a00 * a13) - (a03 * a10); - let b03 = (a01 * a12) - (a02 * a11); - let b04 = (a01 * a13) - (a03 * a11); - let b05 = (a02 * a13) - (a03 * a12); - let b06 = (a20 * a31) - (a21 * a30); - let b07 = (a20 * a32) - (a22 * a30); - let b08 = (a20 * a33) - (a23 * a30); - let b09 = (a21 * a32) - (a22 * a31); - let b10 = (a21 * a33) - (a23 * a31); - let b11 = (a22 * a33) - (a23 * a32); - - let inv_det = 1.0 - / ((b00 * b11) - (b01 * b10) + (b02 * b09) + (b03 * b08) - (b04 * b07) + (b05 * b06)); - - Matrix { - m0: ((a11 * b11) - (a12 * b10) + (a13 * b09)) * inv_det, - m1: ((-a01 * b11) + (a02 * b10) - (a03 * b09)) * inv_det, - m2: ((a31 * b05) - (a32 * b04) + (a33 * b03)) * inv_det, - m3: ((-a21 * b05) + (a22 * b04) - (a23 * b03)) * inv_det, - m4: ((-a10 * b11) + (a12 * b08) - (a13 * b07)) * inv_det, - m5: ((a00 * b11) - (a02 * b08) + (a03 * b07)) * inv_det, - m6: ((-a30 * b05) + (a32 * b02) - (a33 * b01)) * inv_det, - m7: ((a20 * b05) - (a22 * b02) + (a23 * b01)) * inv_det, - m8: ((a10 * b10) - (a11 * b08) + (a13 * b06)) * inv_det, - m9: ((-a00 * b10) + (a01 * b08) - (a03 * b06)) * inv_det, - m10: ((a30 * b04) - (a31 * b02) + (a33 * b00)) * inv_det, - m11: ((-a20 * b04) + (a21 * b02) - (a23 * b00)) * inv_det, - m12: ((-a10 * b09) + (a11 * b07) - (a12 * b06)) * inv_det, - m13: ((a00 * b09) - (a01 * b07) + (a02 * b06)) * inv_det, - m14: ((-a30 * b03) + (a31 * b01) - (a32 * b00)) * inv_det, - m15: ((a20 * b03) - (a21 * b01) + (a22 * b00)) * inv_det, - } - } - - /// Returns a new `Matrix` normalized from the current one. - pub fn normalized(&self) -> Matrix { - let det = self.determinant(); - Matrix { - m0: self.m0 / det, - m1: self.m1 / det, - m2: self.m2 / det, - m3: self.m3 / det, - m4: self.m4 / det, - m5: self.m5 / det, - m6: self.m6 / det, - m7: self.m7 / det, - m8: self.m8 / det, - m9: self.m9 / det, - m10: self.m10 / det, - m11: self.m11 / det, - m12: self.m12 / det, - m13: self.m13 / det, - m14: self.m14 / det, - m15: self.m15 / det, - } - } - - /// Returns a 16-length `f32` array containing the current matrix data. - pub fn to_array(&self) -> [f32; 16] { - [ - self.m0, self.m1, self.m2, self.m3, self.m4, self.m5, self.m6, self.m7, self.m8, - self.m9, self.m10, self.m11, self.m12, self.m13, self.m14, self.m15, - ] - } -} - -impl Add for Matrix { - type Output = Matrix; - fn add(self, mat: Matrix) -> Matrix { - Matrix { - m0: self.m0 + mat.m0, - m1: self.m1 + mat.m1, - m2: self.m2 + mat.m2, - m3: self.m3 + mat.m3, - m4: self.m4 + mat.m4, - m5: self.m5 + mat.m5, - m6: self.m6 + mat.m6, - m7: self.m7 + mat.m7, - m8: self.m8 + mat.m8, - m9: self.m9 + mat.m9, - m10: self.m10 + mat.m10, - m11: self.m11 + mat.m11, - m12: self.m12 + mat.m12, - m13: self.m13 + mat.m13, - m14: self.m14 + mat.m14, - m15: self.m15 + mat.m15, - } - } -} - -impl AddAssign for Matrix { - fn add_assign(&mut self, mat: Matrix) { - *self = *self + mat; - } -} - -impl Sub for Matrix { - type Output = Matrix; - fn sub(self, mat: Matrix) -> Matrix { - Matrix { - m0: self.m0 - mat.m0, - m1: self.m1 - mat.m1, - m2: self.m2 - mat.m2, - m3: self.m3 - mat.m3, - m4: self.m4 - mat.m4, - m5: self.m5 - mat.m5, - m6: self.m6 - mat.m6, - m7: self.m7 - mat.m7, - m8: self.m8 - mat.m8, - m9: self.m9 - mat.m9, - m10: self.m10 - mat.m10, - m11: self.m11 - mat.m11, - m12: self.m12 - mat.m12, - m13: self.m13 - mat.m13, - m14: self.m14 - mat.m14, - m15: self.m15 - mat.m15, - } - } -} - -impl SubAssign for Matrix { - fn sub_assign(&mut self, mat: Matrix) { - *self = *self - mat; - } -} - -impl Mul for Matrix { - type Output = Matrix; - fn mul(self, mat: Matrix) -> Matrix { - Matrix { - m0: self.m0 * mat.m0 + self.m1 * mat.m4 + self.m2 * mat.m8 + self.m3 * mat.m12, - m1: self.m0 * mat.m1 + self.m1 * mat.m5 + self.m2 * mat.m9 + self.m3 * mat.m13, - m2: self.m0 * mat.m2 + self.m1 * mat.m6 + self.m2 * mat.m10 + self.m3 * mat.m14, - m3: self.m0 * mat.m3 + self.m1 * mat.m7 + self.m2 * mat.m11 + self.m3 * mat.m15, - m4: self.m4 * mat.m0 + self.m5 * mat.m4 + self.m6 * mat.m8 + self.m7 * mat.m12, - m5: self.m4 * mat.m1 + self.m5 * mat.m5 + self.m6 * mat.m9 + self.m7 * mat.m13, - m6: self.m4 * mat.m2 + self.m5 * mat.m6 + self.m6 * mat.m10 + self.m7 * mat.m14, - m7: self.m4 * mat.m3 + self.m5 * mat.m7 + self.m6 * mat.m11 + self.m7 * mat.m15, - m8: self.m8 * mat.m0 + self.m9 * mat.m4 + self.m10 * mat.m8 + self.m11 * mat.m12, - m9: self.m8 * mat.m1 + self.m9 * mat.m5 + self.m10 * mat.m9 + self.m11 * mat.m13, - m10: self.m8 * mat.m2 + self.m9 * mat.m6 + self.m10 * mat.m10 + self.m11 * mat.m14, - m11: self.m8 * mat.m3 + self.m9 * mat.m7 + self.m10 * mat.m11 + self.m11 * mat.m15, - m12: self.m12 * mat.m0 + self.m13 * mat.m4 + self.m14 * mat.m8 + self.m15 * mat.m12, - m13: self.m12 * mat.m1 + self.m13 * mat.m5 + self.m14 * mat.m9 + self.m15 * mat.m13, - m14: self.m12 * mat.m2 + self.m13 * mat.m6 + self.m14 * mat.m10 + self.m15 * mat.m14, - m15: self.m12 * mat.m3 + self.m13 * mat.m7 + self.m14 * mat.m11 + self.m15 * mat.m15, - } - } -} - -impl MulAssign for Matrix { - fn mul_assign(&mut self, mat: Matrix) { - *self = *self * mat; - } -} - -optional_serde_struct! { - pub struct Ray { - pub position: Vector3, - pub direction: Vector3, - } -} - -impl From for Ray { - fn from(r: ffi::Ray) -> Ray { - unsafe { std::mem::transmute(r) } - } -} - -impl Into for Ray { - fn into(self) -> ffi::Ray { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Ray { - fn into(self) -> ffi::Ray { - ffi::Ray { - position: self.position.into(), - direction: self.direction.into(), - } - } -} - -optional_serde_struct! { - pub struct Rectangle { - pub x: f32, - pub y: f32, - pub width: f32, - pub height: f32, - } -} - -impl From for Rectangle { - fn from(r: ffi::Rectangle) -> Rectangle { - unsafe { std::mem::transmute(r) } - } -} - -impl Into for Rectangle { - fn into(self) -> ffi::Rectangle { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Rectangle { - fn into(self) -> ffi::Rectangle { - ffi::Rectangle { - x: self.x, - y: self.y, - width: self.width, - height: self.height, - } - } -} - -impl Rectangle { - pub const EMPTY: Rectangle = Rectangle::new(0.0, 0.0, 0.0, 0.0); - pub const fn new(x: f32, y: f32, width: f32, height: f32) -> Self { - Self { - x, - y, - width, - height, - } - } -} - -optional_serde_struct! { - pub struct BoundingBox { - pub min: Vector3, - pub max: Vector3, - } -} - -impl BoundingBox { - pub fn new(min: Vector3, max: Vector3) -> BoundingBox { - BoundingBox { min, max } - } -} - -impl From for BoundingBox { - fn from(r: ffi::BoundingBox) -> BoundingBox { - unsafe { std::mem::transmute(r) } - } -} - -impl Into for BoundingBox { - fn into(self) -> ffi::BoundingBox { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &BoundingBox { - fn into(self) -> ffi::BoundingBox { - ffi::BoundingBox { - min: self.min.into(), - max: self.max.into(), - } - } -} - -optional_serde_struct! { - pub struct RayHitInfo { - pub hit: bool, - pub distance: f32, - pub position: Vector3, - pub normal: Vector3, - } -} - -impl From for RayHitInfo { - fn from(r: ffi::RayHitInfo) -> RayHitInfo { - unsafe { std::mem::transmute(r) } - } -} - -impl Into for RayHitInfo { - fn into(self) -> ffi::RayHitInfo { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &RayHitInfo { - fn into(self) -> ffi::RayHitInfo { - ffi::RayHitInfo { - hit: self.hit, - distance: self.distance, - position: self.position.into(), - normal: self.normal.into(), - } - } -} - -optional_serde_struct! { - pub struct Transform { - pub translation: Vector3, - pub rotation: Quaternion, - pub scale: Vector3, - } -} - -impl From for Transform { - fn from(r: ffi::Transform) -> Transform { - unsafe { std::mem::transmute(r) } - } -} - -impl Into for Transform { - fn into(self) -> ffi::Transform { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &Transform { - fn into(self) -> ffi::Transform { - ffi::Transform { - translation: self.translation.into(), - rotation: self.rotation.into(), - scale: self.scale.into(), - } - } -} - -#[cfg(test)] -mod math_test { - use super::{Ray, Vector2, Vector3, Vector4}; - use crate::ffi; - - #[test] - fn test_into() { - let v2: ffi::Vector2 = (Vector2 { x: 1.0, y: 2.0 }).into(); - assert!(v2.x == 1.0 && v2.y == 2.0, "bad memory transmutation"); - - let v3: ffi::Vector3 = (Vector3 { - x: 1.0, - y: 2.0, - z: 3.0, - }) - .into(); - assert!( - v3.x == 1.0 && v3.y == 2.0 && v3.z == 3.0, - "bad memory transmutation" - ); - - let v4: ffi::Vector4 = (Vector4 { - x: 1.0, - y: 2.0, - z: 3.0, - w: 4.0, - }) - .into(); - assert!( - v4.x == 1.0 && v4.y == 2.0 && v4.z == 3.0 && v4.w == 4.0, - "bad memory transmutation" - ); - - let r: ffi::Ray = (Ray { - position: v3.into(), - direction: Vector3 { - x: 3.0, - y: 2.0, - z: 1.0, - }, - }) - .into(); - assert!( - r.position.x == 1.0 - && r.position.y == 2.0 - && r.position.z == 3.0 - && r.direction.x == 3.0 - && r.direction.y == 2.0 - && r.direction.z == 1.0, - "bad memory transmutation" - ) - } -} diff --git a/raylib/src/core/misc.rs b/raylib/src/core/misc.rs index efc6c3b4..74ec9850 100644 --- a/raylib/src/core/misc.rs +++ b/raylib/src/core/misc.rs @@ -1,18 +1,20 @@ //! Useful functions that don't fit anywhere else -use crate::core::texture::Image; -use crate::core::{RaylibHandle, RaylibThread}; -use crate::ffi; use std::ffi::CString; +use crate::{ + core::{texture::Image, RaylibHandle, RaylibThread}, + ffi, +}; + /// Returns a random value between min and max (both included) /// ```rust /// use raylib::*; /// fn main() { -/// let r = get_random_value(0, 10); +/// let r = get_random_value::(0, 10); /// println!("random value: {}", r); /// } pub fn get_random_value>(min: i32, max: i32) -> T { - unsafe { (ffi::GetRandomValue(min, max) as i32).into() } + unsafe { ffi::GetRandomValue(min, max).into() } } /// Open URL with default system browser (if available) @@ -28,17 +30,47 @@ pub fn open_url(url: &str) { } } -impl RaylibHandle { - pub fn get_screen_data(&mut self, _: &RaylibThread) -> Image { - unsafe { Image(ffi::GetScreenData()) } +/* +pub unsafe extern "C" fn trace_log_trampoline( + log_type: core::ffi::c_int, + text: *const core::ffi::c_char, + variadic: *mut c_void, //NOTE: Look for the stabilization of https://github.com/rust-lang/rust/issues/44930 +) { + +} + +pub fn set_trace_log_callback(callback: C) {} +*/ + +impl RaylibHandle<'_> { + /// Load pixels from the screen into a CPU image + pub fn load_image_from_screen(&self, _: &RaylibThread) -> Image { + unsafe { Image(ffi::LoadImageFromScreen()) } } /// Takes a screenshot of current screen (saved a .png) - pub fn take_screenshot(&mut self, _: &RaylibThread, filename: &str) { + pub fn take_screenshot(&self, _: &RaylibThread, filename: &str) { let c_filename = CString::new(filename).unwrap(); - unsafe { - ffi::TakeScreenshot(c_filename.as_ptr()); - } + unsafe { ffi::TakeScreenshot(c_filename.as_ptr()) } + } +} + +impl RaylibHandle<'_> { + /// Returns a random value between min and max (both included) + /// ```rust + /// use raylib::*; + /// fn main() { + /// let (mut rl, thread) = ...; + /// let r = rl.get_random_value(0, 10); + /// println!("random value: {}", r); + /// } + pub fn get_random_value>(&self, min: i32, max: i32) -> T { + unsafe { ffi::GetRandomValue(min, max).into() } + } + + /// Set the seed for random number generation + pub fn set_random_seed(&self, seed: u32) { + unsafe { ffi::SetRandomSeed(seed) } } } diff --git a/raylib/src/core/mod.rs b/raylib/src/core/mod.rs index ce84e4d3..eb77ee1d 100644 --- a/raylib/src/core/mod.rs +++ b/raylib/src/core/mod.rs @@ -1,16 +1,10 @@ -#[macro_use] -mod macros; - -pub mod audio; pub mod camera; pub mod collision; -pub mod color; pub mod data; pub mod drawing; pub mod file; pub mod input; pub mod logging; -pub mod math; pub mod misc; pub mod models; pub mod shaders; @@ -20,10 +14,14 @@ pub mod vr; pub mod window; use crate::ffi; + +use std::cell::{Cell, RefCell, RefMut}; use std::ffi::CString; use std::marker::PhantomData; use std::sync::atomic::{AtomicBool, Ordering}; +use self::drawing::RaylibDrawHandle; + // shamelessly stolen from imgui #[macro_export] macro_rules! rstr { @@ -56,10 +54,25 @@ pub struct RaylibThread(PhantomData<*const ()>); /// [`init_window`]: fn.init_window.html /// [`RaylibBuilder`]: struct.RaylibBuilder.html /// [`init`]: fn.init.html -#[derive(Debug)] -pub struct RaylibHandle(()); // inner field is private, preventing manual construction +pub struct RaylibHandle<'rl>(RefCell>); // inner field is private, preventing manual construction + +impl<'th, 'a: 'th> RaylibHandle<'a> { + /// Renders a frame. + /// Returns the frame_fn return value unmodifed. + pub fn begin_drawing) -> R>( + &self, + _: &'th RaylibThread, + frame_fn: F, + ) -> R { + unsafe { ffi::BeginDrawing() }; + let ret = frame_fn(self.0.borrow_mut()); + unsafe { ffi::EndDrawing() }; + + ret + } +} -impl Drop for RaylibHandle { +impl Drop for RaylibHandle<'_> { fn drop(&mut self) { if IS_INITIALIZED.load(Ordering::Relaxed) { unsafe { @@ -161,8 +174,8 @@ impl RaylibBuilder { /// # Panics /// /// Attempting to initialize Raylib more than once will result in a panic. - pub fn build(&self) -> (RaylibHandle, RaylibThread) { - use crate::consts::ConfigFlags::*; + pub fn build(&self) -> (RaylibHandle<'static>, RaylibThread) { + use ffi::ConfigFlags::*; let mut flags = 0u32; if self.fullscreen_mode { flags |= FLAG_FULLSCREEN_MODE as u32; @@ -184,7 +197,7 @@ impl RaylibBuilder { } unsafe { - ffi::SetConfigFlags(flags as u32); + ffi::SetConfigFlags(flags); } let rl = init_window(self.width, self.height, &self.title); (rl, RaylibThread(PhantomData)) @@ -196,7 +209,7 @@ impl RaylibBuilder { /// # Panics /// /// Attempting to initialize Raylib more than once will result in a panic. -fn init_window(width: i32, height: i32, title: &str) -> RaylibHandle { +fn init_window(width: i32, height: i32, title: &str) -> RaylibHandle<'static> { if IS_INITIALIZED.load(Ordering::Relaxed) { panic!("Attempted to initialize raylib-rs more than once!"); } else { @@ -208,6 +221,7 @@ fn init_window(width: i32, height: i32, title: &str) -> RaylibHandle { panic!("Attempting to create window failed!"); } IS_INITIALIZED.store(true, Ordering::Relaxed); - RaylibHandle(()) + + RaylibHandle(RefCell::new(RaylibDrawHandle(PhantomData, Cell::default()))) } } diff --git a/raylib/src/core/models.rs b/raylib/src/core/models.rs index 40189c20..6ab590e5 100644 --- a/raylib/src/core/models.rs +++ b/raylib/src/core/models.rs @@ -1,92 +1,75 @@ //! 3D Model, Mesh, and Animation -use crate::core::math::{BoundingBox, Vector3}; -use crate::core::texture::Image; -use crate::core::{RaylibHandle, RaylibThread}; -use crate::ffi; -use std::ffi::CString; + +use core::slice; +use std::{ffi::CString, mem}; + +use super::{ + shaders::Shader, + texture::{Image, Texture2D}, + RaylibHandle, RaylibThread, +}; +use crate::{ + ffi::{self, BoundingBox, Color, Vector3}, + make_bound_thin_wrapper, make_thin_wrapper, +}; fn no_drop(_thing: T) {} -make_thin_wrapper!(Model, ffi::Model, ffi::UnloadModel); -make_thin_wrapper!(WeakModel, ffi::Model, no_drop); + make_thin_wrapper!(Mesh, ffi::Mesh, |mesh: ffi::Mesh| ffi::UnloadMesh(mesh)); -make_thin_wrapper!(WeakMesh, ffi::Mesh, no_drop); +make_bound_thin_wrapper!(Model, ffi::Model, ffi::UnloadModel, RaylibHandle<'bind>); make_thin_wrapper!(Material, ffi::Material, ffi::UnloadMaterial); -make_thin_wrapper!(WeakMaterial, ffi::Material, no_drop); make_thin_wrapper!(BoneInfo, ffi::BoneInfo, no_drop); make_thin_wrapper!( ModelAnimation, ffi::ModelAnimation, ffi::UnloadModelAnimation ); -make_thin_wrapper!(WeakModelAnimation, ffi::ModelAnimation, no_drop); make_thin_wrapper!(MaterialMap, ffi::MaterialMap, no_drop); -// Weak things can be clone -impl Clone for WeakModel { - fn clone(&self) -> WeakModel { - WeakModel(self.0) - } -} - -// Weak things can be clone -impl Clone for WeakMesh { - fn clone(&self) -> WeakMesh { - WeakMesh(self.0) - } -} - -// Weak things can be clone -impl Clone for WeakMaterial { - fn clone(&self) -> WeakMaterial { - WeakMaterial(self.0) - } -} - -// Weak things can be clone -impl Clone for WeakModelAnimation { - fn clone(&self) -> WeakModelAnimation { - WeakModelAnimation(self.0) - } -} - -impl RaylibHandle { +impl<'bind, 'a> RaylibHandle<'a> { /// Loads model from files (mesh and material). // #[inline] - pub fn load_model(&mut self, _: &RaylibThread, filename: &str) -> Result { + pub fn load_model( + &'bind self, + _: &RaylibThread, + filename: &str, + ) -> Result, String> { let c_filename = CString::new(filename).unwrap(); let m = unsafe { ffi::LoadModel(c_filename.as_ptr()) }; + if m.meshes.is_null() && m.materials.is_null() && m.bones.is_null() && m.bindPose.is_null() { return Err(format!("could not load model {}", filename)); } + // TODO check if null pointer checks are necessary. - Ok(Model(m)) + Ok(unsafe { Model::from_raw(m) }) } // Loads model from a generated mesh pub fn load_model_from_mesh( - &mut self, + &'bind self, _: &RaylibThread, - mesh: WeakMesh, - ) -> Result { + mesh: &Mesh, + ) -> Result, String> { let m = unsafe { ffi::LoadModelFromMesh(mesh.0) }; if m.meshes.is_null() || m.materials.is_null() { return Err("Could not load model from mesh".to_owned()); } - Ok(Model(m)) + Ok(unsafe { Model::from_raw(m) }) } pub fn load_model_animations( - &mut self, + &self, _: &RaylibThread, filename: &str, ) -> Result, String> { let c_filename = CString::new(filename).unwrap(); let mut m_size = 0; let m_ptr = unsafe { ffi::LoadModelAnimations(c_filename.as_ptr(), &mut m_size) }; - if m_size <= 0 { + if m_size == 0 { return Err(format!("No model animations loaded from {}", filename)); } let mut m_vec = Vec::with_capacity(m_size as usize); @@ -102,7 +85,7 @@ impl RaylibHandle { } pub fn update_model_animation( - &mut self, + &self, _: &RaylibThread, mut model: impl AsMut, anim: impl AsRef, @@ -114,55 +97,41 @@ impl RaylibHandle { } } -impl RaylibModel for WeakModel {} -impl RaylibModel for Model {} - -impl Model { - pub unsafe fn make_weak(self) -> WeakModel { - let m = WeakModel(self.0); - std::mem::forget(self); - m - } -} +impl<'bind, 'a> RaylibModel for Model<'bind, 'a> {} pub trait RaylibModel: AsRef + AsMut { - fn transform(&self) -> &crate::math::Matrix { - unsafe { std::mem::transmute(&self.as_ref().transform) } - } - - fn set_transform(&mut self, mat: &crate::math::Matrix) { - self.as_mut().transform = mat.into(); - } - - fn meshes(&self) -> &[WeakMesh] { + fn meshes(&self) -> &[Mesh] { unsafe { - std::slice::from_raw_parts( - self.as_ref().meshes as *const WeakMesh, + slice::from_raw_parts( + self.as_ref().meshes as *const Mesh, self.as_ref().meshCount as usize, ) } } - fn meshes_mut(&mut self) -> &mut [WeakMesh] { + + fn meshes_mut(&mut self) -> &mut [Mesh] { unsafe { - std::slice::from_raw_parts_mut( - self.as_mut().meshes as *mut WeakMesh, - self.as_mut().meshCount as usize, + slice::from_raw_parts_mut( + self.as_ref().meshes as *mut Mesh, + self.as_ref().meshCount as usize, ) } } - fn materials(&self) -> &[WeakMaterial] { + + fn materials(&self) -> &[Material] { unsafe { - std::slice::from_raw_parts( - self.as_ref().materials as *const WeakMaterial, + slice::from_raw_parts( + self.as_ref().materials as *const Material, self.as_ref().materialCount as usize, ) } } - fn materials_mut(&mut self) -> &mut [WeakMaterial] { + + fn materials_mut(&mut self) -> &mut [Material] { unsafe { - std::slice::from_raw_parts_mut( - self.as_mut().materials as *mut WeakMaterial, - self.as_mut().materialCount as usize, + slice::from_raw_parts_mut( + self.as_ref().materials as *mut Material, + self.as_ref().materialCount as usize, ) } } @@ -173,36 +142,40 @@ pub trait RaylibModel: AsRef + AsMut { } Some(unsafe { - std::slice::from_raw_parts( + slice::from_raw_parts( self.as_ref().bones as *const BoneInfo, self.as_ref().boneCount as usize, ) }) } + fn bones_mut(&mut self) -> Option<&mut [BoneInfo]> { if self.as_ref().bones.is_null() { return None; } Some(unsafe { - std::slice::from_raw_parts_mut( - self.as_mut().bones as *mut BoneInfo, - self.as_mut().boneCount as usize, + slice::from_raw_parts_mut( + self.as_ref().bones as *mut BoneInfo, + self.as_ref().boneCount as usize, ) }) } - fn bind_pose(&self) -> Option<&crate::math::Transform> { + + fn bind_pose(&self) -> Option<&ffi::Transform> { if self.as_ref().bindPose.is_null() { return None; } - Some(unsafe { std::mem::transmute(self.as_ref().bindPose) }) + + Some(unsafe { &*self.as_ref().bindPose }) } - fn bind_pose_mut(&mut self) -> Option<&mut crate::math::Transform> { + fn bind_pose_mut(&mut self) -> Option<&mut ffi::Transform> { if self.as_ref().bindPose.is_null() { return None; } - Some(unsafe { std::mem::transmute(self.as_mut().bindPose) }) + + Some(unsafe { &mut *self.as_mut().bindPose }) } /// Check model animation skeleton match @@ -212,16 +185,8 @@ pub trait RaylibModel: AsRef + AsMut { } } -impl RaylibMesh for WeakMesh {} impl RaylibMesh for Mesh {} -impl Mesh { - pub unsafe fn make_weak(self) -> WeakMesh { - let m = WeakMesh(self.0); - std::mem::forget(self); - m - } -} pub trait RaylibMesh: AsRef + AsMut { fn vertices(&self) -> &[Vector3] { unsafe { @@ -271,18 +236,18 @@ pub trait RaylibMesh: AsRef + AsMut { ) } } - fn colors(&self) -> &[crate::color::Color] { + fn colors(&self) -> &[Color] { unsafe { std::slice::from_raw_parts( - self.as_ref().colors as *const crate::color::Color, + self.as_ref().colors as *const Color, self.as_ref().vertexCount as usize, ) } } - fn colors_mut(&mut self) -> &mut [crate::color::Color] { + fn colors_mut(&mut self) -> &mut [Color] { unsafe { std::slice::from_raw_parts_mut( - self.as_mut().colors as *mut crate::color::Color, + self.as_mut().colors as *mut Color, self.as_mut().vertexCount as usize, ) } @@ -354,44 +319,28 @@ pub trait RaylibMesh: AsRef + AsMut { /// Generates heightmap mesh from image data. #[inline] - fn gen_mesh_heightmap( - _: &RaylibThread, - heightmap: &Image, - size: impl Into, - ) -> Mesh { - unsafe { Mesh(ffi::GenMeshHeightmap(heightmap.0, size.into())) } + fn gen_mesh_heightmap(_: &RaylibThread, heightmap: &Image, size: Vector3) -> Mesh { + unsafe { Mesh(ffi::GenMeshHeightmap(heightmap.0, size)) } } /// Generates cubes-based map mesh from image data. #[inline] - fn gen_mesh_cubicmap( - _: &RaylibThread, - cubicmap: &Image, - cube_size: impl Into, - ) -> Mesh { - unsafe { Mesh(ffi::GenMeshCubicmap(cubicmap.0, cube_size.into())) } + fn gen_mesh_cubicmap(_: &RaylibThread, cubicmap: &Image, cube_size: Vector3) -> Mesh { + unsafe { Mesh(ffi::GenMeshCubicmap(cubicmap.0, cube_size)) } } /// Computes mesh bounding box limits. #[inline] - fn mesh_bounding_box(&self) -> BoundingBox { - unsafe { ffi::MeshBoundingBox(*self.as_ref()).into() } + fn get_mesh_bounding_box(&self) -> BoundingBox { + unsafe { ffi::GetMeshBoundingBox(*self.as_ref()) } } /// Computes mesh tangents. // NOTE: New VBO for tangents is generated at default location and also binded to mesh VAO #[inline] - fn mesh_tangents(&mut self, _: &RaylibThread) { + fn gen_mesh_tangents(&mut self, _: &RaylibThread) { unsafe { - ffi::MeshTangents(self.as_mut()); - } - } - - /// Computes mesh binormals. - #[inline] - fn mesh_binormals(&mut self) { - unsafe { - ffi::MeshBinormals(self.as_mut()); + ffi::GenMeshTangents(self.as_mut()); } } @@ -406,12 +355,6 @@ pub trait RaylibMesh: AsRef + AsMut { } impl Material { - pub unsafe fn make_weak(self) -> WeakMaterial { - let m = WeakMaterial(self.0); - std::mem::forget(self); - m - } - pub fn load_materials(filename: &str) -> Result, String> { let c_filename = CString::new(filename).unwrap(); let mut m_size = 0; @@ -432,16 +375,15 @@ impl Material { } } -impl RaylibMaterial for WeakMaterial {} impl RaylibMaterial for Material {} pub trait RaylibMaterial: AsRef + AsMut { - fn shader(&self) -> &crate::shaders::WeakShader { - unsafe { std::mem::transmute(&self.as_ref().shader) } + fn shader(&self) -> &Shader { + unsafe { mem::transmute(&self.as_ref().shader) } } - fn shader_mut(&mut self) -> &mut crate::shaders::WeakShader { - unsafe { std::mem::transmute(&mut self.as_mut().shader) } + fn shader_mut(&mut self) -> &mut Shader { + unsafe { mem::transmute(&mut self.as_mut().shader) } } fn maps(&self) -> &[MaterialMap] { @@ -464,7 +406,7 @@ pub trait RaylibMaterial: AsRef + AsMut { fn set_material_texture( &mut self, - map_type: crate::consts::MaterialMapIndex, + map_type: ffi::MaterialMapIndex, texture: impl AsRef, ) { unsafe { @@ -474,15 +416,6 @@ pub trait RaylibMaterial: AsRef + AsMut { } impl RaylibModelAnimation for ModelAnimation {} -impl RaylibModelAnimation for WeakModelAnimation {} - -impl ModelAnimation { - pub unsafe fn make_weak(self) -> WeakModelAnimation { - let m = WeakModelAnimation(self.0); - std::mem::forget(self); - m - } -} pub trait RaylibModelAnimation: AsRef + AsMut { fn bones(&self) -> &[BoneInfo] { @@ -503,14 +436,15 @@ pub trait RaylibModelAnimation: AsRef + AsMut Vec<&[crate::math::Transform]> { + fn frame_poses(&self) -> Vec<&[ffi::Transform]> { let anim = self.as_ref(); + let mut top = Vec::with_capacity(anim.frameCount as usize); for i in 0..anim.frameCount { top.push(unsafe { std::slice::from_raw_parts( - *(anim.framePoses.offset(i as isize) as *const *const crate::math::Transform), + *(anim.framePoses.offset(i as isize) as *const *const ffi::Transform), anim.boneCount as usize, ) }); @@ -519,14 +453,14 @@ pub trait RaylibModelAnimation: AsRef + AsMut Vec<&mut [crate::math::Transform]> { + fn frame_poses_mut(&mut self) -> Vec<&mut [ffi::Transform]> { let anim = self.as_ref(); let mut top = Vec::with_capacity(anim.frameCount as usize); for i in 0..anim.frameCount { top.push(unsafe { std::slice::from_raw_parts_mut( - *(anim.framePoses.offset(i as isize) as *mut *mut crate::math::Transform), + *(anim.framePoses.offset(i as isize) as *mut *mut ffi::Transform), anim.boneCount as usize, ) }); @@ -537,66 +471,30 @@ pub trait RaylibModelAnimation: AsRef + AsMut &crate::texture::WeakTexture2D { - unsafe { std::mem::transmute(&self.0.texture) } + pub fn texture(&self) -> &Texture2D { + unsafe { mem::transmute(&self.0.texture) } } - pub fn texture_mut(&mut self) -> &mut crate::texture::WeakTexture2D { - unsafe { std::mem::transmute(&mut self.0.texture) } + pub fn texture_mut(&mut self) -> &mut Texture2D { + unsafe { mem::transmute(&mut self.0.texture) } } - pub fn color(&self) -> &crate::color::Color { - unsafe { std::mem::transmute(&self.0.color) } + pub fn color(&self) -> &Color { + unsafe { mem::transmute(&self.0.color) } } - pub fn color_mut(&mut self) -> &mut crate::color::Color { - unsafe { std::mem::transmute(&mut self.0.color) } + pub fn color_mut(&mut self) -> &mut Color { + unsafe { mem::transmute(&mut self.0.color) } } pub fn value(&self) -> &f32 { - unsafe { std::mem::transmute(&self.0.value) } + unsafe { mem::transmute(&self.0.value) } } pub fn value_mut(&mut self) -> &mut f32 { - unsafe { std::mem::transmute(&mut self.0.value) } + unsafe { mem::transmute(&mut self.0.value) } } } -impl RaylibHandle { - pub fn load_material_default(&self, _: &RaylibThread) -> WeakMaterial { - WeakMaterial(unsafe { ffi::LoadMaterialDefault() }) - } - - /// Weak materials will leak memeory if they are not unlaoded - /// Unload material from GPU memory (VRAM) - pub unsafe fn unload_material(&mut self, _: &RaylibThread, material: WeakMaterial) { - { - ffi::UnloadMaterial(*material.as_ref()) - } - } - - /// Weak models will leak memeory if they are not unlaoded - /// Unload model from GPU memory (VRAM) - pub unsafe fn unload_model(&mut self, _: &RaylibThread, model: WeakModel) { - { - ffi::UnloadModel(*model.as_ref()) - } - } - - /// Weak model_animations will leak memeory if they are not unlaoded - /// Unload model_animation from GPU memory (VRAM) - pub unsafe fn unload_model_animation( - &mut self, - _: &RaylibThread, - model_animation: WeakModelAnimation, - ) { - { - ffi::UnloadModelAnimation(*model_animation.as_ref()) - } - } - - /// Weak meshs will leak memeory if they are not unlaoded - /// Unload mesh from GPU memory (VRAM) - pub unsafe fn unload_mesh(&mut self, _: &RaylibThread, mesh: WeakMesh) { - { - ffi::UnloadMesh(*mesh.as_ref()) - } +impl<'bind> RaylibHandle<'bind> { + pub fn load_material_default(&self, _: &RaylibThread) -> Material { + Material(unsafe { ffi::LoadMaterialDefault() }) } } diff --git a/raylib/src/core/shaders.rs b/raylib/src/core/shaders.rs index 54dfbea1..e9e61029 100644 --- a/raylib/src/core/shaders.rs +++ b/raylib/src/core/shaders.rs @@ -1,85 +1,79 @@ //! Code for the safe manipulation of shaders -use crate::consts::ShaderUniformDataType; -use crate::core::math::Matrix; -use crate::core::math::{Vector2, Vector3, Vector4}; -use crate::core::{RaylibHandle, RaylibThread}; -use crate::ffi; use std::ffi::CString; +use std::mem::ManuallyDrop; use std::os::raw::{c_char, c_void}; -fn no_drop(_thing: T) {} -make_thin_wrapper!(Shader, ffi::Shader, ffi::UnloadShader); -make_thin_wrapper!(WeakShader, ffi::Shader, no_drop); +use super::{RaylibHandle, RaylibThread}; +use crate::ffi::{self, Matrix, ShaderUniformDataType, Vector2, Vector3, Vector4}; +use crate::make_bound_thin_wrapper; + +make_bound_thin_wrapper!(Shader, ffi::Shader, ffi::UnloadShader, RaylibHandle<'bind>); // #[cfg(feature = "nightly")] // impl !Send for Shader {} // #[cfg(feature = "nightly")] // unsafe impl Sync for Shader {} -impl RaylibHandle { +impl<'bind, 'a, 'rl> RaylibHandle<'rl> { /// Loads a custom shader and binds default locations. pub fn load_shader( - &mut self, + &'bind self, _: &RaylibThread, vs_filename: Option<&str>, fs_filename: Option<&str>, - ) -> Result { + ) -> Result, String> { let c_vs_filename = vs_filename.map(|f| CString::new(f).unwrap()); let c_fs_filename = fs_filename.map(|f| CString::new(f).unwrap()); // Trust me, I have tried ALL the RUST option ergonamics. This is the only way // to get this to work without raylib breaking for whatever reason let shader = match (c_vs_filename, c_fs_filename) { - (Some(vs), Some(fs)) => unsafe { Shader(ffi::LoadShader(vs.as_ptr(), fs.as_ptr())) }, - (None, Some(fs)) => unsafe { Shader(ffi::LoadShader(std::ptr::null(), fs.as_ptr())) }, - (Some(vs), None) => unsafe { Shader(ffi::LoadShader(vs.as_ptr(), std::ptr::null())) }, - (None, None) => unsafe { Shader(ffi::LoadShader(std::ptr::null(), std::ptr::null())) }, + (Some(vs), Some(fs)) => unsafe { ffi::LoadShader(vs.as_ptr(), fs.as_ptr()) }, + (None, Some(fs)) => unsafe { ffi::LoadShader(std::ptr::null(), fs.as_ptr()) }, + (Some(vs), None) => unsafe { ffi::LoadShader(vs.as_ptr(), std::ptr::null()) }, + (None, None) => unsafe { ffi::LoadShader(std::ptr::null(), std::ptr::null()) }, }; - return Ok(shader); + Ok(unsafe { Shader::from_raw(shader) }) } /// Loads shader from code strings and binds default locations. pub fn load_shader_from_memory( - &mut self, + &'bind self, _: &RaylibThread, vs_code: Option<&str>, fs_code: Option<&str>, - ) -> Shader { + ) -> Shader<'bind, 'a> { let c_vs_code = vs_code.map(|f| CString::new(f).unwrap()); let c_fs_code = fs_code.map(|f| CString::new(f).unwrap()); - return match (c_vs_code, c_fs_code) { - (Some(vs), Some(fs)) => unsafe { - Shader(ffi::LoadShaderFromMemory( + + unsafe { + Shader::from_raw(match (c_vs_code, c_fs_code) { + (Some(vs), Some(fs)) => ffi::LoadShaderFromMemory( vs.as_ptr() as *mut c_char, fs.as_ptr() as *mut c_char, - )) - }, - (None, Some(fs)) => unsafe { - Shader(ffi::LoadShaderFromMemory( - std::ptr::null_mut(), - fs.as_ptr() as *mut c_char, - )) - }, - (Some(vs), None) => unsafe { - Shader(ffi::LoadShaderFromMemory( - vs.as_ptr() as *mut c_char, - std::ptr::null_mut(), - )) - }, - (None, None) => unsafe { - Shader(ffi::LoadShaderFromMemory( - std::ptr::null_mut(), - std::ptr::null_mut(), - )) - }, - }; + ), + (None, Some(fs)) => { + ffi::LoadShaderFromMemory(std::ptr::null_mut(), fs.as_ptr() as *mut c_char) + } + (Some(vs), None) => { + ffi::LoadShaderFromMemory(vs.as_ptr() as *mut c_char, std::ptr::null_mut()) + } + (None, None) => { + ffi::LoadShaderFromMemory(std::ptr::null_mut(), std::ptr::null_mut()) + } + }) + } } /// Get default shader. Modifying it modifies everthing that uses that shader - #[cfg(target_os = "windows")] - pub fn get_shader_default() -> WeakShader { - unsafe { WeakShader(ffi::rlGetShaderDefault()) } + pub fn get_shader_default(&'bind self) -> ManuallyDrop> { + unsafe { + ManuallyDrop::new(Shader::from_raw(ffi::Shader { + id: ffi::rlGetShaderIdDefault(), + locs: ffi::rlGetShaderLocsDefault(), + })) + } } } @@ -172,13 +166,7 @@ impl ShaderV for &[i32] { } } -impl Shader { - pub unsafe fn make_weak(self) -> WeakShader { - let m = WeakShader(self.0); - std::mem::forget(self); - m - } - +impl<'bind, 'a> Shader<'bind, 'a> { /// Sets shader uniform value #[inline] pub fn set_shader_value(&mut self, uniform_loc: i32, value: S) { @@ -210,7 +198,7 @@ impl Shader { #[inline] pub fn set_shader_value_matrix(&mut self, uniform_loc: i32, mat: Matrix) { unsafe { - ffi::SetShaderValueMatrix(self.0, uniform_loc, mat.into()); + ffi::SetShaderValueMatrix(self.0, uniform_loc, mat); } } @@ -227,8 +215,7 @@ impl Shader { } } -impl RaylibShader for WeakShader {} -impl RaylibShader for Shader {} +impl<'bind, 'a> RaylibShader for Shader<'bind, 'a> {} pub trait RaylibShader: AsRef + AsMut { #[inline] @@ -245,14 +232,19 @@ pub trait RaylibShader: AsRef + AsMut { #[inline] fn get_shader_location(&self, uniform_name: &str) -> i32 { let c_uniform_name = CString::new(uniform_name).unwrap(); - println!( - "Getting shader location {:?} {}", - c_uniform_name, - uniform_name.len() - ); unsafe { ffi::GetShaderLocation(*self.as_ref(), c_uniform_name.as_ptr()) } } + /// Get shader attribute location + #[inline] + fn get_shader_location_attrib(&self, attrib_name: &str) -> Option { + let c_attrib_name = CString::new(attrib_name).ok()?; + let attrib = + unsafe { ffi::GetShaderLocationAttrib(*self.as_ref(), c_attrib_name.as_ptr()) }; + + (attrib >= 0).then_some(attrib) + } + /// Sets shader uniform value #[inline] fn set_shader_value(&mut self, uniform_loc: i32, value: S) { @@ -284,7 +276,7 @@ pub trait RaylibShader: AsRef + AsMut { #[inline] fn set_shader_value_matrix(&mut self, uniform_loc: i32, mat: Matrix) { unsafe { - ffi::SetShaderValueMatrix(*self.as_mut(), uniform_loc, mat.into()); + ffi::SetShaderValueMatrix(*self.as_mut(), uniform_loc, mat); } } @@ -297,36 +289,32 @@ pub trait RaylibShader: AsRef + AsMut { } } -impl RaylibHandle { +impl<'a> RaylibHandle<'a> { /// Sets a custom projection matrix (replaces internal projection matrix). #[inline] - #[cfg(target_os = "windows")] pub fn set_matrix_projection(&mut self, _: &RaylibThread, proj: Matrix) { unsafe { - ffi::rlSetMatrixProjection(proj.into()); + ffi::rlSetMatrixProjection(proj); } } /// Sets a custom modelview matrix (replaces internal modelview matrix). #[inline] - #[cfg(target_os = "windows")] pub fn set_matrix_modelview(&mut self, _: &RaylibThread, view: Matrix) { unsafe { - ffi::rlSetMatrixModelview(view.into()); + ffi::rlSetMatrixModelview(view); } } /// Gets internal modelview matrix. #[inline] - #[cfg(target_os = "windows")] pub fn get_matrix_modelview(&self) -> Matrix { - unsafe { ffi::rlGetMatrixModelview().into() } + unsafe { ffi::rlGetMatrixModelview() } } /// Gets internal projection matrix. #[inline] - #[cfg(target_os = "windows")] pub fn get_matrix_projection(&self) -> Matrix { - unsafe { ffi::rlGetMatrixProjection().into() } + unsafe { ffi::rlGetMatrixProjection() } } } diff --git a/raylib/src/core/text.rs b/raylib/src/core/text.rs index dda759ec..2d68fccb 100644 --- a/raylib/src/core/text.rs +++ b/raylib/src/core/text.rs @@ -1,57 +1,61 @@ //! Text and Font related functions //! Text manipulation functions are super unsafe so use rust String functions -use crate::core::math::Vector2; -use crate::core::texture::{Image, Texture2D}; -use crate::core::{RaylibHandle, RaylibThread}; -use crate::ffi; - +use std::boxed::Box; use std::convert::{AsMut, AsRef}; use std::ffi::CString; +use std::mem::ManuallyDrop; +use std::ptr; + +use super::{ + texture::{Image, Texture2D}, + RaylibHandle, RaylibThread, +}; +use crate::{ + buffer::RaylibBuffer, + ffi::{self, Color, Rectangle, Vector2}, + make_bound_thin_wrapper, make_thin_wrapper, +}; fn no_drop(_thing: T) {} -make_thin_wrapper!(Font, ffi::Font, ffi::UnloadFont); -make_thin_wrapper!(WeakFont, ffi::Font, no_drop); -make_thin_wrapper!(CharInfo, ffi::CharInfo, no_drop); +make_bound_thin_wrapper!(Font, ffi::Font, ffi::UnloadFont, RaylibHandle<'bind>); +make_thin_wrapper!(GlyphInfo, ffi::GlyphInfo, no_drop); #[repr(transparent)] #[derive(Debug)] -pub struct RSliceCharInfo(pub(crate) std::mem::ManuallyDrop>); +pub struct RSliceGlyphInfo(pub(crate) ManuallyDrop>); -impl Drop for RSliceCharInfo { +impl Drop for RSliceGlyphInfo { #[allow(unused_unsafe)] fn drop(&mut self) { unsafe { - let inner = std::mem::ManuallyDrop::take(&mut self.0); + let inner = ManuallyDrop::take(&mut self.0); let len = inner.len(); - ffi::UnloadFontData( - std::boxed::Box::leak(inner).as_mut_ptr() as *mut _, - len as i32, - ); + ffi::UnloadFontData(Box::leak(inner).as_mut_ptr() as *mut _, len as i32); } } } -impl std::convert::AsRef> for RSliceCharInfo { - fn as_ref(&self) -> &Box<[CharInfo]> { +impl AsRef> for RSliceGlyphInfo { + fn as_ref(&self) -> &Box<[GlyphInfo]> { &self.0 } } -impl std::convert::AsMut> for RSliceCharInfo { - fn as_mut(&mut self) -> &mut Box<[CharInfo]> { +impl std::convert::AsMut> for RSliceGlyphInfo { + fn as_mut(&mut self) -> &mut Box<[GlyphInfo]> { &mut self.0 } } -impl std::ops::Deref for RSliceCharInfo { - type Target = Box<[CharInfo]>; +impl std::ops::Deref for RSliceGlyphInfo { + type Target = Box<[GlyphInfo]>; #[inline] fn deref(&self) -> &Self::Target { &self.0 } } -impl std::ops::DerefMut for RSliceCharInfo { +impl std::ops::DerefMut for RSliceGlyphInfo { #[inline] fn deref_mut(&mut self) -> &mut Self::Target { &mut self.0 @@ -67,15 +71,9 @@ impl std::ops::DerefMut for RSliceCharInfo { // #[cfg(feature = "nightly")] // unsafe impl Sync for WeakFont {} -impl AsRef for Font { - fn as_ref(&self) -> &ffi::Texture2D { - return &self.0.texture; - } -} - -impl AsRef for WeakFont { +impl<'bind, 'a> AsRef for Font<'bind, 'a> { fn as_ref(&self) -> &ffi::Texture2D { - return &self.0.texture; + &self.0.texture } } @@ -86,34 +84,34 @@ pub enum FontLoadEx<'a> { Chars(&'a [i32]), } -impl RaylibHandle { - pub fn unload_font(&mut self, font: WeakFont) { - unsafe { ffi::UnloadFont(font.0) }; - } - +impl<'bind> RaylibHandle<'_> { /// Loads font from file into GPU memory (VRAM). #[inline] - pub fn load_font(&mut self, _: &RaylibThread, filename: &str) -> Result { + pub fn load_font( + &'bind self, + _: &RaylibThread, + filename: &str, + ) -> Result, String> { let c_filename = CString::new(filename).unwrap(); let f = unsafe { ffi::LoadFont(c_filename.as_ptr()) }; - if f.chars.is_null() || f.texture.id == 0 { + if f.glyphs.is_null() || f.texture.id == 0 { return Err(format!( "Error loading font {}. Does it exist? Is it the right type?", filename )); } - Ok(Font(f)) + Ok(unsafe { Font::from_raw(f) }) } /// Loads font from file with extended parameters. #[inline] pub fn load_font_ex( - &mut self, + &'bind self, _: &RaylibThread, filename: &str, font_size: i32, chars: FontLoadEx, - ) -> Result { + ) -> Result, String> { let c_filename = CString::new(filename).unwrap(); let f = unsafe { match chars { @@ -124,45 +122,45 @@ impl RaylibHandle { c.len() as i32, ), FontLoadEx::Default(count) => { - ffi::LoadFontEx(c_filename.as_ptr(), font_size, std::ptr::null_mut(), count) + ffi::LoadFontEx(c_filename.as_ptr(), font_size, ptr::null_mut(), count) } } }; - if f.chars.is_null() || f.texture.id == 0 { + if f.glyphs.is_null() || f.texture.id == 0 { return Err(format!( "Error loading font {}. Does it exist? Is it the right type?", filename )); } - Ok(Font(f)) + Ok(unsafe { Font::from_raw(f) }) } /// Load font from Image (XNA style) #[inline] pub fn load_font_from_image( - &mut self, + &'bind self, _: &RaylibThread, image: &Image, - key: impl Into, + key: Color, first_char: i32, - ) -> Result { - let f = unsafe { ffi::LoadFontFromImage(image.0, key.into(), first_char) }; - if f.chars.is_null() { - return Err(format!("Error loading font from image.")); + ) -> Result, String> { + let f = unsafe { ffi::LoadFontFromImage(image.0, key, first_char) }; + if f.glyphs.is_null() { + return Err("Error loading font from image.".to_string()); } - Ok(Font(f)) + Ok(unsafe { Font::from_raw(f) }) } /// Loads font data for further use (see also `Font::from_data`). /// Now supports .tiff #[inline] pub fn load_font_data( - &mut self, + &self, data: &[u8], font_size: i32, chars: Option<&[i32]>, sdf: i32, - ) -> Option { + ) -> Option { unsafe { let ci_arr_ptr = match chars { Some(c) => ffi::LoadFontData( @@ -177,7 +175,7 @@ impl RaylibHandle { data.as_ptr(), data.len() as i32, font_size, - std::ptr::null_mut(), + ptr::null_mut(), 0, sdf, ), @@ -186,7 +184,7 @@ impl RaylibHandle { if ci_arr_ptr.is_null() { None } else { - Some(RSliceCharInfo(std::mem::ManuallyDrop::new(Box::from_raw( + Some(RSliceGlyphInfo(ManuallyDrop::new(Box::from_raw( std::slice::from_raw_parts_mut(ci_arr_ptr as *mut _, ci_size), )))) } @@ -194,8 +192,7 @@ impl RaylibHandle { } } -impl RaylibFont for WeakFont {} -impl RaylibFont for Font {} +impl RaylibFont for Font<'_, '_> {} pub trait RaylibFont: AsRef + AsMut { fn base_size(&self) -> i32 { @@ -204,95 +201,89 @@ pub trait RaylibFont: AsRef + AsMut { fn texture(&self) -> &Texture2D { unsafe { std::mem::transmute(&self.as_ref().texture) } } - fn chars(&self) -> &[CharInfo] { + fn chars(&self) -> &[GlyphInfo] { unsafe { std::slice::from_raw_parts( - self.as_ref().chars as *const CharInfo, - self.as_ref().charsCount as usize, + self.as_ref().glyphs as *const GlyphInfo, + self.as_ref().glyphCount as usize, ) } } - fn chars_mut(&mut self) -> &mut [CharInfo] { + fn chars_mut(&mut self) -> &mut [GlyphInfo] { unsafe { std::slice::from_raw_parts_mut( - self.as_mut().chars as *mut CharInfo, - self.as_ref().charsCount as usize, + self.as_mut().glyphs as *mut GlyphInfo, + self.as_ref().glyphCount as usize, ) } } } -impl Font { - pub fn make_weak(self) -> WeakFont { - let w = WeakFont(self.0); - std::mem::forget(self); - return w; - } - /// Returns a new `Font` using provided `CharInfo` data and parameters. - fn from_data( - chars: &[ffi::CharInfo], +impl<'a, 'bind> Font<'bind, 'a> { + /// Returns a new `Font` using provided `GlyphInfo` data and parameters. + pub fn from_data( + &'bind mut self, + chars: &[ffi::GlyphInfo], base_size: i32, padding: i32, pack_method: i32, - ) -> Result { + ) -> Result, String> { let f = unsafe { let mut f = std::mem::zeroed::(); - f.baseSize = base_size; + f.0.baseSize = base_size; f.set_chars(chars); let atlas = ffi::GenImageFontAtlas( - f.chars, + f.0.glyphs, &mut f.0.recs, - f.baseSize, - f.charsCount, + f.0.baseSize, + f.0.glyphCount, padding, pack_method, ); - f.texture = ffi::LoadTextureFromImage(atlas); + f.0.texture = ffi::LoadTextureFromImage(atlas); ffi::UnloadImage(atlas); f }; - if f.0.chars.is_null() || f.0.texture.id == 0 { - return Err(format!("Error loading font from image.")); + if f.0.glyphs.is_null() || f.0.texture.id == 0 { + return Err("Error loading font from image.".to_string()); } Ok(f) } /// Sets the character data on the current Font. - fn set_chars(&mut self, chars: &[ffi::CharInfo]) { + pub fn set_chars(&mut self, chars: &[ffi::GlyphInfo]) { unsafe { - self.charsCount = chars.len() as i32; - let data_size = self.charsCount as usize * std::mem::size_of::(); + self.0.glyphCount = chars.len() as i32; + let data_size = self.0.glyphCount as usize * std::mem::size_of::(); let ci_arr_ptr = libc::malloc(data_size); // raylib frees this data in UnloadFont - std::ptr::copy( + ptr::copy( chars.as_ptr(), - ci_arr_ptr as *mut ffi::CharInfo, + ci_arr_ptr as *mut ffi::GlyphInfo, chars.len(), ); - self.chars = ci_arr_ptr as *mut ffi::CharInfo; + self.0.glyphs = ci_arr_ptr as *mut ffi::GlyphInfo; } } /// Sets the texture on the current Font, and takes ownership of `tex`. - fn set_texture(&mut self, tex: Texture2D) { - self.texture = tex.0; + pub fn set_texture(&mut self, tex: Texture2D) { + self.as_mut().texture = tex.0; std::mem::forget(tex); // UnloadFont will also unload the texture } } /// Generates image font atlas using `chars` info. -/// Sets a pointer to an array of rectangles raylib allocated that MUST manually be freed. -/// Good luck freeing it safely though ;) #[inline] pub fn gen_image_font_atlas( _: &RaylibThread, - chars: &mut [ffi::CharInfo], + chars: &mut [ffi::GlyphInfo], font_size: i32, padding: i32, pack_method: i32, -) -> (Image, Vec) { +) -> Option<(Image, RaylibBuffer<'static, Rectangle>)> { unsafe { - let mut ptr = std::ptr::null_mut(); + let mut ptr = ptr::null_mut(); let img = Image(ffi::GenImageFontAtlas( chars.as_mut_ptr(), @@ -303,19 +294,17 @@ pub fn gen_image_font_atlas( pack_method, )); - let mut recs = Vec::with_capacity(chars.len()); - recs.set_len(chars.len()); - std::ptr::copy(ptr, recs.as_mut_ptr(), chars.len()); - ffi::MemFree(ptr as *mut libc::c_void); - return (img, recs); + let buffer = RaylibBuffer::::new(ptr, chars.len()); + + buffer.map(|b| (img, b)) } } -impl RaylibHandle { +impl<'bind, 'a> RaylibHandle<'_> { /// Gets the default font. #[inline] - pub fn get_font_default(&self) -> WeakFont { - WeakFont(unsafe { ffi::GetFontDefault() }) + pub fn get_font_default(&'bind self) -> ManuallyDrop> { + ManuallyDrop::new(unsafe { Font::from_raw(ffi::GetFontDefault()) }) } } @@ -329,17 +318,17 @@ pub fn measure_text(text: &str, font_size: i32) -> i32 { /// Measures string width in pixels for `font`. #[inline] pub fn measure_text_ex( - font: impl std::convert::AsRef, + font: impl AsRef, text: &str, font_size: f32, spacing: f32, ) -> Vector2 { let c_text = CString::new(text).unwrap(); - unsafe { ffi::MeasureTextEx(*font.as_ref(), c_text.as_ptr(), font_size, spacing).into() } + unsafe { ffi::MeasureTextEx(*font.as_ref(), c_text.as_ptr(), font_size, spacing) } } /// Gets index position for a unicode character on `font`. #[inline] -pub fn get_glyph_index(font: impl std::convert::AsRef, character: i32) -> i32 { +pub fn get_glyph_index(font: impl AsRef, character: i32) -> i32 { unsafe { ffi::GetGlyphIndex(*font.as_ref(), character) } } diff --git a/raylib/src/core/texture.rs b/raylib/src/core/texture.rs index 2400005b..b9f22968 100644 --- a/raylib/src/core/texture.rs +++ b/raylib/src/core/texture.rs @@ -1,13 +1,15 @@ //! Image and texture related functions -use crate::core::color::Color; -use crate::core::math::{Rectangle, Vector4}; -use crate::core::{RaylibHandle, RaylibThread}; -use crate::ffi; use std::ffi::CString; -use std::mem::ManuallyDrop; -make_rslice!(ImagePalette, Color, ffi::UnloadImagePalette); -make_rslice!(ImageColors, Color, ffi::UnloadImageColors); +use super::{RaylibHandle, RaylibThread}; +use crate::{ + buffer::RaylibBuffer, + ffi::{ + self, Color, CubemapLayout, NPatchLayout, PixelFormat, Rectangle, TextureFilter, + TextureWrap, Vector2, + }, + impl_wrapper, make_bound_thin_wrapper, +}; #[repr(C)] #[derive(Debug, Copy, Clone)] @@ -17,7 +19,7 @@ pub struct NPatchInfo { pub top: i32, pub right: i32, pub bottom: i32, - pub layout: crate::consts::NPatchLayout, + pub layout: NPatchLayout, } impl From for NPatchInfo { @@ -26,96 +28,40 @@ impl From for NPatchInfo { } } -impl Into for NPatchInfo { - fn into(self) -> ffi::NPatchInfo { - unsafe { std::mem::transmute(self) } +impl From for ffi::NPatchInfo { + fn from(val: NPatchInfo) -> Self { + unsafe { std::mem::transmute(val) } } } -impl Into for &NPatchInfo { - fn into(self) -> ffi::NPatchInfo { - ffi::NPatchInfo { - source: self.source.into(), - left: self.left, - top: self.top, - right: self.right, - bottom: self.bottom, - layout: (self.layout as u32) as i32, - } - } -} +#[repr(transparent)] +#[derive(Debug)] +pub struct Image(pub(crate) ffi::Image); -fn no_drop(_thing: T) {} -make_thin_wrapper!(Image, ffi::Image, ffi::UnloadImage); -make_thin_wrapper!(Texture2D, ffi::Texture2D, ffi::UnloadTexture); -make_thin_wrapper!(WeakTexture2D, ffi::Texture2D, no_drop); -make_thin_wrapper!( +impl_wrapper!(Image, ffi::Image, (ffi::UnloadImage), 0); + +make_bound_thin_wrapper!( + Texture2D, + ffi::Texture2D, + ffi::UnloadTexture, + RaylibHandle<'bind> +); +make_bound_thin_wrapper!( RenderTexture2D, ffi::RenderTexture2D, - ffi::UnloadRenderTexture + ffi::UnloadRenderTexture, + RaylibHandle<'bind> ); -make_thin_wrapper!(WeakRenderTexture2D, ffi::RenderTexture2D, no_drop); - -// Weak things can be clone -impl Clone for WeakTexture2D { - fn clone(&self) -> WeakTexture2D { - WeakTexture2D(self.0) - } -} - -// Weak things can be clone -impl Clone for WeakRenderTexture2D { - fn clone(&self) -> WeakRenderTexture2D { - WeakRenderTexture2D(self.0) - } -} - -impl RaylibRenderTexture2D for WeakRenderTexture2D {} -impl RaylibRenderTexture2D for RenderTexture2D {} - -impl AsRef for RenderTexture2D { - fn as_ref(&self) -> &ffi::Texture2D { - self.texture() - } -} - -impl AsMut for RenderTexture2D { - fn as_mut(&mut self) -> &mut ffi::Texture2D { - self.texture_mut() - } -} -impl AsRef for WeakRenderTexture2D { +impl<'bind, 'a> AsRef for RenderTexture2D<'bind, 'a> { fn as_ref(&self) -> &ffi::Texture2D { - self.texture() + &self.0.texture } } -impl AsMut for WeakRenderTexture2D { +impl<'bind, 'a> AsMut for RenderTexture2D<'bind, 'a> { fn as_mut(&mut self) -> &mut ffi::Texture2D { - self.texture_mut() - } -} - -impl RenderTexture2D { - pub unsafe fn make_weak(self) -> WeakRenderTexture2D { - let m = WeakRenderTexture2D(self.0); - std::mem::forget(self); - m - } -} - -pub trait RaylibRenderTexture2D: AsRef + AsMut { - fn id(&self) -> u32 { - self.as_ref().id - } - - fn texture(&self) -> &WeakTexture2D { - unsafe { std::mem::transmute(&self.as_ref().texture) } - } - - fn texture_mut(&mut self) -> &mut WeakTexture2D { - unsafe { std::mem::transmute(&mut self.as_mut().texture) } + &mut self.0.texture } } @@ -135,19 +81,27 @@ impl Image { pub fn mipmaps(&self) -> i32 { self.0.mipmaps } - pub unsafe fn data(&self) -> *mut ::std::os::raw::c_void { + pub unsafe fn data(&self) -> *mut core::ffi::c_void { self.0.data } + pub fn get_pixel(&self, x: i32, y: i32) -> Option { + if x < 0 || y < 0 || x >= self.width() || y >= self.height() { + None + } else { + unsafe { Some(ffi::GetImageColor(self.0, x, y)) } + } + } + #[inline] - pub fn format(&self) -> crate::consts::PixelFormat { - let i: u32 = self.format as u32; + pub fn format(&self) -> PixelFormat { + let i: u32 = self.0.format as u32; unsafe { std::mem::transmute(i) } } #[inline] - pub fn from_image(&self, rec: impl Into) -> Image { - unsafe { Image(ffi::ImageFromImage(self.0, rec.into())) } + pub fn from_image(&self, rec: Rectangle) -> Image { + unsafe { Image(ffi::ImageFromImage(self.0, rec)) } } /// Exports image as a PNG file. @@ -174,40 +128,38 @@ impl Image { } /// Gets pixel data from `image` as a Vec of Color structs. - pub fn get_image_data(&self) -> ImageColors { + pub fn get_image_data(&self) -> RaylibBuffer { unsafe { let image_data = ffi::LoadImageColors(self.0); - let image_data_len = (self.width * self.height) as usize; - ImageColors(ManuallyDrop::new(Box::from_raw( - std::slice::from_raw_parts_mut(image_data as *mut _, image_data_len), - ))) + let image_data_len = (self.0.width * self.0.height) as usize; + + RaylibBuffer::new(image_data as _, image_data_len).unwrap() } } /// Extract color palette from image to maximum size #[inline] - pub fn extract_palette(&self, max_palette_size: u32) -> ImagePalette { + pub fn extract_palette(&self, max_palette_size: u32) -> RaylibBuffer { unsafe { let mut palette_len = 0; let image_data = ffi::LoadImagePalette(self.0, max_palette_size as i32, &mut palette_len); - ImagePalette(ManuallyDrop::new(Box::from_raw( - std::slice::from_raw_parts_mut(image_data as *mut _, palette_len as usize), - ))) + + RaylibBuffer::new(image_data as _, palette_len as usize).unwrap() } } /// Converts `image` to POT (power-of-two). #[inline] - pub fn to_pot(&mut self, fill_color: impl Into) { + pub fn to_pot(&mut self, fill_color: Color) { unsafe { - ffi::ImageToPOT(&mut self.0, fill_color.into()); + ffi::ImageToPOT(&mut self.0, fill_color); } } /// Converts `image` data to desired pixel format. #[inline] - pub fn set_format(&mut self, new_format: crate::consts::PixelFormat) { + pub fn set_format(&mut self, new_format: PixelFormat) { unsafe { ffi::ImageFormat(&mut self.0, (new_format as u32) as i32); } @@ -225,50 +177,44 @@ impl Image { /// Clears alpha channel on `image` to desired color. #[inline] - pub fn alpha_clear(&mut self, color: impl Into, threshold: f32) { - unsafe { - ffi::ImageAlphaClear(&mut self.0, color.into(), threshold); - } + pub fn alpha_clear(&mut self, color: Color, threshold: f32) { + unsafe { ffi::ImageAlphaClear(&mut self.0, color, threshold) } } /// Crops `image` depending on alpha value. #[inline] pub fn alpha_crop(&mut self, threshold: f32) { - unsafe { - ffi::ImageAlphaCrop(&mut self.0, threshold); - } + unsafe { ffi::ImageAlphaCrop(&mut self.0, threshold) } } /// Premultiplies alpha channel on `image`. #[inline] pub fn alpha_premultiply(&mut self) { - unsafe { - ffi::ImageAlphaPremultiply(&mut self.0); - } + unsafe { ffi::ImageAlphaPremultiply(&mut self.0) } + } + + /// Apply Gaussian blur using a box blur approximation + #[inline] + pub fn blur_gaussian(&mut self, blur_size: i32) { + unsafe { ffi::ImageBlurGaussian(&mut self.0, blur_size) } } /// Crops `image` to a defined rectangle. #[inline] - pub fn crop(&mut self, crop: impl Into) { - unsafe { - ffi::ImageCrop(&mut self.0, crop.into()); - } + pub fn crop(&mut self, crop: Rectangle) { + unsafe { ffi::ImageCrop(&mut self.0, crop) } } /// Resizes `image` (bilinear filtering). #[inline] pub fn resize(&mut self, new_width: i32, new_height: i32) { - unsafe { - ffi::ImageResize(&mut self.0, new_width, new_height); - } + unsafe { ffi::ImageResize(&mut self.0, new_width, new_height) } } /// Resizes `image` (nearest-neighbor scaling). #[inline] pub fn resize_nn(&mut self, new_width: i32, new_height: i32) { - unsafe { - ffi::ImageResizeNN(&mut self.0, new_width, new_height); - } + unsafe { ffi::ImageResizeNN(&mut self.0, new_width, new_height) } } /// Resizes `image` canvas and fills with `color`. @@ -279,7 +225,7 @@ impl Image { new_height: i32, offset_x: i32, offset_y: i32, - color: impl Into, + color: Color, ) { unsafe { ffi::ImageResizeCanvas( @@ -288,73 +234,51 @@ impl Image { new_height, offset_x, offset_y, - color.into(), - ); + color, + ) } } /// Generates all mipmap levels for a provided `image`. #[inline] pub fn gen_mipmaps(&mut self) { - unsafe { - ffi::ImageMipmaps(&mut self.0); - } + unsafe { ffi::ImageMipmaps(&mut self.0) } } /// Dithers `image` data to 16bpp or lower (Floyd-Steinberg dithering). #[inline] pub fn dither(&mut self, r_bpp: i32, g_bpp: i32, b_bpp: i32, a_bpp: i32) { - unsafe { - ffi::ImageDither(&mut self.0, r_bpp, g_bpp, b_bpp, a_bpp); - } + unsafe { ffi::ImageDither(&mut self.0, r_bpp, g_bpp, b_bpp, a_bpp) } } /// Get image alpha border rectangle #[inline] pub fn get_image_alpha_border(&self, threshold: f32) -> Rectangle { - unsafe { ffi::GetImageAlphaBorder(self.0, threshold).into() } + unsafe { ffi::GetImageAlphaBorder(self.0, threshold) } } /// Clear image background with given color #[inline] - pub fn clear_background(&mut self, color: impl Into) { - unsafe { ffi::ImageClearBackground(&mut self.0, color.into()) } + pub fn clear_background(&mut self, color: Color) { + unsafe { ffi::ImageClearBackground(&mut self.0, color) } } /// Draws a source image within a destination image. #[inline] - pub fn draw( - &mut self, - src: &Image, - src_rec: Rectangle, - dst_rec: Rectangle, - tint: impl Into, - ) { - unsafe { - ffi::ImageDraw( - &mut self.0, - src.0, - src_rec.into(), - dst_rec.into(), - tint.into(), - ); - } + pub fn draw(&mut self, src: &Image, src_rec: Rectangle, dst_rec: Rectangle, tint: Color) { + unsafe { ffi::ImageDraw(&mut self.0, src.0, src_rec, dst_rec, tint) } } /// Draw pixel within an image #[inline] - pub fn draw_pixel(&mut self, pos_x: i32, pos_y: i32, color: impl Into) { - unsafe { ffi::ImageDrawPixel(&mut self.0, pos_x, pos_y, color.into()) } + pub fn draw_pixel(&mut self, pos_x: i32, pos_y: i32, color: Color) { + unsafe { ffi::ImageDrawPixel(&mut self.0, pos_x, pos_y, color) } } /// Draw pixel within an image (Vector version) #[inline] - pub fn draw_pixel_v( - &mut self, - position: impl Into, - color: impl Into, - ) { - unsafe { ffi::ImageDrawPixelV(&mut self.0, position.into(), color.into()) } + pub fn draw_pixel_v(&mut self, position: Vector2, color: Color) { + unsafe { ffi::ImageDrawPixelV(&mut self.0, position, color) } } /// Draw line within an image @@ -365,7 +289,7 @@ impl Image { start_pos_y: i32, end_pos_x: i32, end_pos_y: i32, - color: impl Into, + color: Color, ) { unsafe { ffi::ImageDrawLine( @@ -374,43 +298,27 @@ impl Image { start_pos_y, end_pos_x, end_pos_y, - color.into(), + color, ) } } /// Draw line within an image (Vector version) #[inline] - pub fn draw_line_v( - &mut self, - start: impl Into, - end: impl Into, - color: impl Into, - ) { - unsafe { ffi::ImageDrawLineV(&mut self.0, start.into(), end.into(), color.into()) } + pub fn draw_line_v(&mut self, start: Vector2, end: Vector2, color: Color) { + unsafe { ffi::ImageDrawLineV(&mut self.0, start, end, color) } } /// Draw circle within an image #[inline] - pub fn draw_circle( - &mut self, - center_x: i32, - center_y: i32, - radius: i32, - color: impl Into, - ) { - unsafe { ffi::ImageDrawCircle(&mut self.0, center_x, center_y, radius, color.into()) } + pub fn draw_circle(&mut self, center_x: i32, center_y: i32, radius: i32, color: Color) { + unsafe { ffi::ImageDrawCircle(&mut self.0, center_x, center_y, radius, color) } } /// Draw circle within an image (Vector version) #[inline] - pub fn draw_circle_v( - &mut self, - center: impl Into, - radius: i32, - color: impl Into, - ) { - unsafe { ffi::ImageDrawCircleV(&mut self.0, center.into(), radius, color.into()) } + pub fn draw_circle_v(&mut self, center: Vector2, radius: i32, color: Color) { + unsafe { ffi::ImageDrawCircleV(&mut self.0, center, radius, color) } } /// Draws a rectangle within an image. @@ -421,46 +329,27 @@ impl Image { pos_y: i32, width: i32, height: i32, - color: impl Into, + color: Color, ) { unsafe { - ffi::ImageDrawRectangle(&mut self.0, pos_x, pos_y, width, height, color.into()); + ffi::ImageDrawRectangle(&mut self.0, pos_x, pos_y, width, height, color); } } /// Draws a rectangle within an image. #[inline] - pub fn draw_rectangle_lines( - &mut self, - rec: Rectangle, - thickness: i32, - color: impl Into, - ) { + pub fn draw_rectangle_lines(&mut self, rec: Rectangle, thickness: i32, color: Color) { unsafe { - ffi::ImageDrawRectangleLines(&mut self.0, rec.into(), thickness, color.into()); + ffi::ImageDrawRectangleLines(&mut self.0, rec, thickness, color); } } /// Draws text (default font) within an image (destination). #[inline] - pub fn draw_text( - &mut self, - text: &str, - pos_x: i32, - pos_y: i32, - font_size: i32, - color: impl Into, - ) { + pub fn draw_text(&mut self, text: &str, pos_x: i32, pos_y: i32, font_size: i32, color: Color) { let c_text = CString::new(text).unwrap(); unsafe { - ffi::ImageDrawText( - &mut self.0, - c_text.as_ptr(), - pos_x, - pos_y, - font_size, - color.into(), - ); + ffi::ImageDrawText(&mut self.0, c_text.as_ptr(), pos_x, pos_y, font_size, color); } } @@ -470,10 +359,10 @@ impl Image { &mut self, font: impl AsRef, text: &str, - position: impl Into, + position: Vector2, font_size: f32, spacing: f32, - color: impl Into, + color: Color, ) { let c_text = CString::new(text).unwrap(); unsafe { @@ -481,10 +370,10 @@ impl Image { &mut self.0, *font.as_ref(), c_text.as_ptr(), - position.into(), + position, font_size, spacing, - color.into(), + color, ); } } @@ -492,123 +381,79 @@ impl Image { /// Flips `image` vertically. #[inline] pub fn flip_vertical(&mut self) { - unsafe { - ffi::ImageFlipVertical(&mut self.0); - } + unsafe { ffi::ImageFlipVertical(&mut self.0) } } /// Flips `image` horizontally. #[inline] pub fn flip_horizontal(&mut self) { - unsafe { - ffi::ImageFlipHorizontal(&mut self.0); - } + unsafe { ffi::ImageFlipHorizontal(&mut self.0) } } /// Rotates `image` clockwise by 90 degrees (PI/2 radians). #[inline] pub fn rotate_cw(&mut self) { - unsafe { - ffi::ImageRotateCW(&mut self.0); - } + unsafe { ffi::ImageRotateCW(&mut self.0) } } /// Rotates `image` counterclockwise by 90 degrees (PI/2 radians). #[inline] pub fn rotate_ccw(&mut self) { - unsafe { - ffi::ImageRotateCCW(&mut self.0); - } + unsafe { ffi::ImageRotateCCW(&mut self.0) } } /// Tints colors in `image` using specified `color`. #[inline] - pub fn color_tint(&mut self, color: impl Into) { - unsafe { - ffi::ImageColorTint(&mut self.0, color.into()); - } + pub fn color_tint(&mut self, color: Color) { + unsafe { ffi::ImageColorTint(&mut self.0, color) } } /// Inverts the colors in `image`. #[inline] pub fn color_invert(&mut self) { - unsafe { - ffi::ImageColorInvert(&mut self.0); - } + unsafe { ffi::ImageColorInvert(&mut self.0) } } /// Converts `image color to grayscale. #[inline] pub fn color_grayscale(&mut self) { - unsafe { - ffi::ImageColorGrayscale(&mut self.0); - } + unsafe { ffi::ImageColorGrayscale(&mut self.0) } } /// Adjusts the contrast of `image`. #[inline] pub fn color_contrast(&mut self, contrast: f32) { - unsafe { - ffi::ImageColorContrast(&mut self.0, contrast); - } + unsafe { ffi::ImageColorContrast(&mut self.0, contrast) } } /// Adjusts the brightness of `image`. #[inline] pub fn color_brightness(&mut self, brightness: i32) { - unsafe { - ffi::ImageColorBrightness(&mut self.0, brightness); - } + unsafe { ffi::ImageColorBrightness(&mut self.0, brightness) } } /// Searches `image` for all occurences of `color` and replaces them with `replace` color. #[inline] - pub fn color_replace(&mut self, color: impl Into, replace: impl Into) { - unsafe { - ffi::ImageColorReplace(&mut self.0, color.into(), replace.into()); - } + pub fn color_replace(&mut self, color: Color, replace: Color) { + unsafe { ffi::ImageColorReplace(&mut self.0, color, replace) } } /// Generates a plain `color` Image. #[inline] - pub fn gen_image_color(width: i32, height: i32, color: impl Into) -> Image { - unsafe { Image(ffi::GenImageColor(width, height, color.into())) } + pub fn gen_image_color(width: i32, height: i32, color: Color) -> Image { + unsafe { Image(ffi::GenImageColor(width, height, color)) } } /// Generates an Image containing a vertical gradient. #[inline] - pub fn gen_image_gradient_v( - width: i32, - height: i32, - top: impl Into, - bottom: impl Into, - ) -> Image { - unsafe { - Image(ffi::GenImageGradientV( - width, - height, - top.into(), - bottom.into(), - )) - } + pub fn gen_image_gradient_v(width: i32, height: i32, top: Color, bottom: Color) -> Image { + unsafe { Image(ffi::GenImageGradientV(width, height, top, bottom)) } } /// Generates an Image containing a horizonal gradient. #[inline] - pub fn gen_image_gradient_h( - width: i32, - height: i32, - left: impl Into, - right: impl Into, - ) -> Image { - unsafe { - Image(ffi::GenImageGradientH( - width, - height, - left.into(), - right.into(), - )) - } + pub fn gen_image_gradient_h(width: i32, height: i32, left: Color, right: Color) -> Image { + unsafe { Image(ffi::GenImageGradientH(width, height, left, right)) } } /// Generates an Image containing a radial gradient. @@ -617,16 +462,12 @@ impl Image { width: i32, height: i32, density: f32, - inner: impl Into, - outer: impl Into, + inner: Color, + outer: Color, ) -> Image { unsafe { Image(ffi::GenImageGradientRadial( - width, - height, - density, - inner.into(), - outer.into(), + width, height, density, inner, outer, )) } } @@ -638,17 +479,12 @@ impl Image { height: i32, checks_x: i32, checks_y: i32, - col1: impl Into, - col2: impl Into, + col1: Color, + col2: Color, ) -> Image { unsafe { Image(ffi::GenImageChecked( - width, - height, - checks_x, - checks_y, - col1.into(), - col2.into(), + width, height, checks_x, checks_y, col1, col2, )) } } @@ -659,7 +495,7 @@ impl Image { unsafe { Image(ffi::GenImageWhiteNoise(width, height, factor)) } } - /// Generates an Image containing perlin noise. + /// Generates an Image containing white noise. #[inline] pub fn gen_image_perlin_noise( width: i32, @@ -686,22 +522,24 @@ impl Image { let c_filename = CString::new(filename).unwrap(); let i = unsafe { ffi::LoadImage(c_filename.as_ptr()) }; if i.data.is_null() { - return Err(format!( - "Image data is null. Either the file doesnt exist or the image type is unsupported." - )); + return Err( + "Image data is null. Either the file doesnt exist or the image type is unsupported.".to_string() + ); } Ok(Image(i)) } - + /// Loads image from a given memory buffer as a vector of arrays - pub fn load_image_from_mem(filetype: &str, bytes: &Vec, size: i32) -> Result { + pub fn load_image_from_mem( + filetype: &str, + bytes: &Vec, + size: i32, + ) -> Result { let c_filetype = CString::new(filetype).unwrap(); let c_bytes = bytes.as_ptr(); let i = unsafe { ffi::LoadImageFromMemory(c_filetype.as_ptr(), c_bytes, size) }; if i.data.is_null() { - return Err(format!( - "Image data is null. Check provided buffer data" - )) + return Err("Image data is null. Check provided buffer data".to_string()); }; Ok(Image(i)) } @@ -718,18 +556,26 @@ impl Image { let i = unsafe { ffi::LoadImageRaw(c_filename.as_ptr(), width, height, format, header_size) }; if i.data.is_null() { - return Err(format!( - "Image data is null. Either the file doesnt exist or the image type is unsupported." - )); + return Err("Image data is null. Either the file doesnt exist or the image type is unsupported.".to_string() + ); } Ok(Image(i)) } + /// Load image sequence from file (frames appended to image.data) + pub fn load_image_anim(filename: &str) -> (Image, u32) { + let c_filename = CString::new(filename).unwrap(); + let mut count = 0i32; + let image = unsafe { ffi::LoadImageAnim(c_filename.as_ptr(), &mut count) }; + + (Image(image), count as u32) + } + /// Creates an image from `text` (custom font). #[inline] - pub fn image_text(text: &str, font_size: i32, color: impl Into) -> Image { + pub fn image_text(text: &str, font_size: i32, color: Color) -> Image { let c_text = CString::new(text).unwrap(); - unsafe { Image(ffi::ImageText(c_text.as_ptr(), font_size, color.into())) } + unsafe { Image(ffi::ImageText(c_text.as_ptr(), font_size, color)) } } /// Creates an image from `text` (custom font). @@ -739,7 +585,7 @@ impl Image { text: &str, font_size: f32, spacing: f32, - tint: impl Into, + tint: Color, ) -> Image { let c_text = CString::new(text).unwrap(); unsafe { @@ -748,42 +594,16 @@ impl Image { c_text.as_ptr(), font_size, spacing, - tint.into(), + tint, )) } } } -impl RaylibTexture2D for WeakTexture2D {} -impl RaylibTexture2D for Texture2D {} -impl RaylibTexture2D for WeakRenderTexture2D {} -impl RaylibTexture2D for RenderTexture2D {} - -impl Texture2D { - pub unsafe fn make_weak(self) -> WeakTexture2D { - let m = WeakTexture2D(self.0); - std::mem::forget(self); - m - } -} +impl<'bind, 'a> RaylibTexture2D for Texture2D<'bind, 'a> {} +impl<'bind, 'a> RaylibTexture2D for RenderTexture2D<'bind, 'a> {} pub trait RaylibTexture2D: AsRef + AsMut { - fn width(&self) -> i32 { - self.as_ref().width - } - - fn height(&self) -> i32 { - self.as_ref().height - } - - fn mipmaps(&self) -> i32 { - self.as_ref().width - } - - fn format(&self) -> i32 { - self.as_ref().format - } - /// Updates GPU texture with new data. #[inline] fn update_texture(&mut self, pixels: &[u8]) { @@ -802,20 +622,17 @@ pub trait RaylibTexture2D: AsRef + AsMut { ); } unsafe { - ffi::UpdateTexture( - *self.as_mut(), - pixels.as_ptr() as *const std::os::raw::c_void, - ); + ffi::UpdateTexture(*self.as_mut(), pixels.as_ptr() as *const core::ffi::c_void); } } /// Gets pixel data from GPU texture and returns an `Image`. /// Fairly sure this would never fail. If it does wrap in result. #[inline] - fn get_texture_data(&self) -> Result { - let i = unsafe { ffi::GetTextureData(*self.as_ref()) }; + fn load_image(&self) -> Result { + let i = unsafe { ffi::LoadImageFromTexture(*self.as_ref()) }; if i.data.is_null() { - return Err(format!("Texture cannot be rendered to an image")); + return Err("Texture cannot be rendered to an image".to_string()); } Ok(Image(i)) } @@ -830,7 +647,7 @@ pub trait RaylibTexture2D: AsRef + AsMut { /// Sets global `texture` scaling filter mode. #[inline] - fn set_texture_filter(&self, _: &RaylibThread, filter_mode: crate::consts::TextureFilter) { + fn set_texture_filter(&self, _: &RaylibThread, filter_mode: TextureFilter) { unsafe { ffi::SetTextureFilter(*self.as_ref(), filter_mode as i32); } @@ -838,7 +655,7 @@ pub trait RaylibTexture2D: AsRef + AsMut { /// Sets global texture wrapping mode. #[inline] - fn set_texture_wrap(&self, _: &RaylibThread, wrap_mode: crate::consts::TextureWrap) { + fn set_texture_wrap(&self, _: &RaylibThread, wrap_mode: TextureWrap) { unsafe { ffi::SetTextureWrap(*self.as_ref(), wrap_mode as i32); } @@ -851,73 +668,60 @@ pub fn get_pixel_data_size(width: i32, height: i32, format: ffi::PixelFormat) -> unsafe { ffi::GetPixelDataSize(width, height, format as i32) } } -impl RaylibHandle { +impl<'bind, 'a> RaylibHandle<'_> { /// Loads texture from file into GPU memory (VRAM). - pub fn load_texture(&mut self, _: &RaylibThread, filename: &str) -> Result { + pub fn load_texture( + &'bind self, + _: &RaylibThread, + filename: &str, + ) -> Result, String> { let c_filename = CString::new(filename).unwrap(); let t = unsafe { ffi::LoadTexture(c_filename.as_ptr()) }; if t.id == 0 { return Err(format!("failed to load {} as a texture.", filename)); } - Ok(Texture2D(t)) + Ok(unsafe { Texture2D::from_raw(t) }) } /// Load cubemap from image, multiple image cubemap layouts supported pub fn load_texture_cubemap( - &mut self, + &'bind self, _: &RaylibThread, image: &Image, - layout: crate::consts::CubemapLayout, - ) -> Result { + layout: CubemapLayout, + ) -> Result, String> { let t = unsafe { ffi::LoadTextureCubemap(image.0, layout as i32) }; if t.id == 0 { - return Err(format!("failed to load image as a texture cubemap.")); + return Err("failed to load image as a texture cubemap.".to_string()); } - Ok(Texture2D(t)) + Ok(unsafe { Texture2D::from_raw(t) }) } /// Loads texture from image data. #[inline] pub fn load_texture_from_image( - &mut self, + &'bind self, _: &RaylibThread, image: &Image, - ) -> Result { + ) -> Result, String> { let t = unsafe { ffi::LoadTextureFromImage(image.0) }; if t.id == 0 { - return Err(format!("failed to load image as a texture.")); + return Err("failed to load image as a texture.".to_string()); } - Ok(Texture2D(t)) + Ok(unsafe { Texture2D::from_raw(t) }) } /// Loads texture for rendering (framebuffer). pub fn load_render_texture( - &mut self, + &'bind self, _: &RaylibThread, width: u32, height: u32, - ) -> Result { + ) -> Result, String> { let t = unsafe { ffi::LoadRenderTexture(width as i32, height as i32) }; if t.id == 0 { - return Err(format!("failed to create render texture.")); - } - Ok(RenderTexture2D(t)) - } -} - -impl RaylibHandle { - /// Weak Textures will leak memeory if they are not unlaoded - /// Unload textures from GPU memory (VRAM) - pub unsafe fn unload_texture(&mut self, _: &RaylibThread, texture: WeakTexture2D) { - { - ffi::UnloadTexture(*texture.as_ref()) - } - } - /// Weak RenderTextures will leak memeory if they are not unlaoded - /// Unload RenderTextures from GPU memory (VRAM) - pub unsafe fn unload_render_texture(&mut self, _: &RaylibThread, texture: WeakRenderTexture2D) { - { - ffi::UnloadRenderTexture(*texture.as_ref()) + return Err("failed to create render texture.".to_string()); } + Ok(unsafe { RenderTexture2D::from_raw(t) }) } } diff --git a/raylib/src/core/vr.rs b/raylib/src/core/vr.rs index 3c2a6d6d..65cce4fc 100644 --- a/raylib/src/core/vr.rs +++ b/raylib/src/core/vr.rs @@ -1,8 +1,6 @@ //! Vr related functions -use crate::core::camera::Camera3D; -use crate::core::{RaylibHandle, RaylibThread}; -use crate::ffi; -use std::sync::atomic::{AtomicBool, Ordering}; +use super::{RaylibHandle, RaylibThread}; +use crate::{ffi, make_thin_wrapper}; make_thin_wrapper!( VrStereoConfig, @@ -10,56 +8,12 @@ make_thin_wrapper!( ffi::UnloadVrStereoConfig ); -#[repr(C)] -#[derive(Debug, Copy, Clone, PartialEq)] -pub struct VrDeviceInfo { - pub h_resolution: i32, // Horizontal resolution in pixels - pub v_esolution: i32, // Vertical resolution in pixels - pub h_screen_size: f32, // Horizontal size in meters - pub v_screen_size: f32, // Vertical size in meters - pub v_screen_center: f32, // Screen center in meters - pub eye_to_screen_distance: f32, // Distance between eye and display in meters - pub lens_separation_distance: f32, // Lens separation distance in meters - pub interpupillary_distance: f32, // IPD (distance between pupils) in meters - pub lens_distortion_values: [f32; 4], // Lens distortion constant parameters - pub chroma_ab_correction: [f32; 4], // Chromatic aberration correction parameters -} - -impl From for VrDeviceInfo { - fn from(v: ffi::VrDeviceInfo) -> VrDeviceInfo { - unsafe { std::mem::transmute(v) } - } -} - -impl Into for VrDeviceInfo { - fn into(self) -> ffi::VrDeviceInfo { - unsafe { std::mem::transmute(self) } - } -} - -impl Into for &VrDeviceInfo { - fn into(self) -> ffi::VrDeviceInfo { - ffi::VrDeviceInfo { - hResolution: self.h_resolution, // Horizontal resolution in pixels - vResolution: self.v_esolution, // Vertical resolution in pixels - hScreenSize: self.h_screen_size, // Horizontal size in meters - vScreenSize: self.v_screen_size, // Vertical size in meters - vScreenCenter: self.v_screen_center, // Screen center in meters - eyeToScreenDistance: self.eye_to_screen_distance, // Distance between eye and display in meters - lensSeparationDistance: self.lens_separation_distance, // Lens separation distance in meters - interpupillaryDistance: self.interpupillary_distance, // IPD (distance between pupils) in meters - lensDistortionValues: self.lens_distortion_values, // Lens distortion constant parameters - chromaAbCorrection: self.chroma_ab_correction, - } - } -} - -impl RaylibHandle { +impl RaylibHandle<'_> { pub fn load_vr_stereo_config( - &mut self, + &self, _: &RaylibThread, - device: impl Into, + device: ffi::VrDeviceInfo, ) -> VrStereoConfig { - return VrStereoConfig(unsafe { ffi::LoadVrStereoConfig(device.into()) }); + VrStereoConfig(unsafe { ffi::LoadVrStereoConfig(device) }) } } diff --git a/raylib/src/core/window.rs b/raylib/src/core/window.rs index 54122473..5bebc15e 100644 --- a/raylib/src/core/window.rs +++ b/raylib/src/core/window.rs @@ -1,9 +1,17 @@ //! Window manipulation functions -use crate::core::math::{Matrix, Ray, Vector2}; -use crate::core::{RaylibHandle, RaylibThread}; -use crate::ffi; +use core::ffi::c_char; use std::ffi::{CStr, CString, IntoStringError, NulError}; -use std::os::raw::c_char; + +#[cfg(feature = "serde")] +use serde::{Deserialize, Serialize}; + +use super::{RaylibHandle, RaylibThread}; +use crate::ffi::{ + self, Camera2D, Camera3D, ConfigFlags, Matrix, MouseCursor, Ray, Vector2, Vector3, +}; + +#[cfg(feature = "with_serde")] +use serde::{Deserialize, Serialize}; // MonitorInfo grabs the sizes (virtual and physical) of your monitor #[derive(Clone, Debug)] @@ -22,211 +30,211 @@ pub struct WindowState(i32); impl WindowState { pub fn vsync_hint(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_VSYNC_HINT as i32) != 0 + self.0 & (ConfigFlags::FLAG_VSYNC_HINT as i32) != 0 } /// Set to try enabling V-Sync on GPU pub fn set_vsync_hint(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_VSYNC_HINT as i32; + self.0 |= ConfigFlags::FLAG_VSYNC_HINT as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_VSYNC_HINT as i32); + self.0 &= !(ConfigFlags::FLAG_VSYNC_HINT as i32); } self } pub fn fullscreen_mode(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_FULLSCREEN_MODE as i32) != 0 + self.0 & (ConfigFlags::FLAG_FULLSCREEN_MODE as i32) != 0 } /// Set to run program in fullscreen pub fn set_fullscreen_mode(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_FULLSCREEN_MODE as i32; + self.0 |= ConfigFlags::FLAG_FULLSCREEN_MODE as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_FULLSCREEN_MODE as i32); + self.0 &= !(ConfigFlags::FLAG_FULLSCREEN_MODE as i32); } self } pub fn window_resizable(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_RESIZABLE as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_RESIZABLE as i32) != 0 } /// Set to allow resizable window pub fn set_window_resizable(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_RESIZABLE as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_RESIZABLE as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_RESIZABLE as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_RESIZABLE as i32); } self } pub fn window_undecorated(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_UNDECORATED as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_UNDECORATED as i32) != 0 } /// Set to disable window decoration (frame and buttons) pub fn set_window_undecorated(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_UNDECORATED as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_UNDECORATED as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_UNDECORATED as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_UNDECORATED as i32); } self } pub fn window_hidden(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_HIDDEN as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_HIDDEN as i32) != 0 } /// Set to hide window pub fn set_window_hidden(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_HIDDEN as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_HIDDEN as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_HIDDEN as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_HIDDEN as i32); } self } pub fn window_minimized(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_MINIMIZED as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_MINIMIZED as i32) != 0 } /// Set to minimize window (iconify) pub fn set_window_minimized(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_MINIMIZED as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_MINIMIZED as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_MINIMIZED as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_MINIMIZED as i32); } self } pub fn window_maximized(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_MAXIMIZED as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_MAXIMIZED as i32) != 0 } /// Set to maximize window (expanded to monitor) pub fn set_window_maximized(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_MAXIMIZED as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_MAXIMIZED as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_MAXIMIZED as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_MAXIMIZED as i32); } self } pub fn window_unfocused(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_UNFOCUSED as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_UNFOCUSED as i32) != 0 } /// Set to window non focused pub fn set_window_unfocused(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_UNFOCUSED as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_UNFOCUSED as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_UNFOCUSED as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_UNFOCUSED as i32); } self } pub fn window_topmost(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_TOPMOST as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_TOPMOST as i32) != 0 } /// Set to window always on top pub fn set_window_topmost(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_TOPMOST as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_TOPMOST as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_TOPMOST as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_TOPMOST as i32); } self } pub fn window_always_run(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_ALWAYS_RUN as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_ALWAYS_RUN as i32) != 0 } /// Set to allow windows running while minimized pub fn set_window_always_run(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_ALWAYS_RUN as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_ALWAYS_RUN as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_ALWAYS_RUN as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_ALWAYS_RUN as i32); } self } pub fn window_transparent(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_TRANSPARENT as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_TRANSPARENT as i32) != 0 } /// Set to allow transparent framebuffer pub fn set_window_transparent(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_TRANSPARENT as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_TRANSPARENT as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_TRANSPARENT as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_TRANSPARENT as i32); } self } pub fn window_highdpi(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_WINDOW_HIGHDPI as i32) != 0 + self.0 & (ConfigFlags::FLAG_WINDOW_HIGHDPI as i32) != 0 } /// Set to support HighDPI pub fn set_window_highdpi(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_WINDOW_HIGHDPI as i32; + self.0 |= ConfigFlags::FLAG_WINDOW_HIGHDPI as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_WINDOW_HIGHDPI as i32); + self.0 &= !(ConfigFlags::FLAG_WINDOW_HIGHDPI as i32); } self } pub fn msaa(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_MSAA_4X_HINT as i32) != 0 + self.0 & (ConfigFlags::FLAG_MSAA_4X_HINT as i32) != 0 } /// Set to try enabling MSAA 4X pub fn set_msaa(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_MSAA_4X_HINT as i32; + self.0 |= ConfigFlags::FLAG_MSAA_4X_HINT as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_MSAA_4X_HINT as i32); + self.0 &= !(ConfigFlags::FLAG_MSAA_4X_HINT as i32); } self } pub fn interlaced_hint(&self) -> bool { - self.0 & (ffi::ConfigFlags::FLAG_INTERLACED_HINT as i32) != 0 + self.0 & (ConfigFlags::FLAG_INTERLACED_HINT as i32) != 0 } /// Set to try enabling interlaced video format (for V3D) pub fn set_interlaced_hint(mut self, enabled: bool) -> Self { if enabled { // set the bit - self.0 |= ffi::ConfigFlags::FLAG_INTERLACED_HINT as i32; + self.0 |= ConfigFlags::FLAG_INTERLACED_HINT as i32; } else { // enable the bit - self.0 &= !(ffi::ConfigFlags::FLAG_INTERLACED_HINT as i32); + self.0 &= !(ConfigFlags::FLAG_INTERLACED_HINT as i32); } self } @@ -261,6 +269,16 @@ pub fn get_monitor_refresh_rate(monitor: i32) -> i32 { unsafe { ffi::GetMonitorRefreshRate(monitor) } } +/// Get specified monitor position +#[inline] +pub fn get_monitor_position(monitor: i32) -> Option { + if monitor >= 0 && monitor < get_monitor_count() { + Some(unsafe { ffi::GetMonitorPosition(monitor) }) + } else { + None + } +} + /// Get number of connected monitors /// Only checks that monitor index is in range in debug mode #[inline] @@ -353,8 +371,8 @@ pub fn get_monitor_info(monitor: i32) -> Result { /// assert_eq!(m, Matrix::identity()); /// } /// ``` -pub fn get_camera_matrix(camera: impl Into) -> Matrix { - unsafe { ffi::GetCameraMatrix(camera.into()).into() } +pub fn get_camera_matrix(camera: Camera3D) -> Matrix { + unsafe { ffi::GetCameraMatrix(camera) } } /// Returns camera 2D transform matrix (view matrix) @@ -369,12 +387,11 @@ pub fn get_camera_matrix(camera: impl Into) -> Matrix { /// assert_eq!(m, check); /// } /// ``` -#[allow(non_snake_case)] -pub fn get_camera_matrix2D(camera: impl Into) -> Matrix { - unsafe { ffi::GetCameraMatrix2D(camera.into()).into() } +pub fn get_camera_matrix_2d(camera: Camera2D) -> Matrix { + unsafe { ffi::GetCameraMatrix2D(camera) } } -impl RaylibHandle { +impl RaylibHandle<'_> { /// Get clipboard text content pub fn get_clipboard_text(&self) -> Result { unsafe { @@ -385,74 +402,52 @@ impl RaylibHandle { } /// Set clipboard text content - pub fn set_clipboard_text(&mut self, text: &str) -> Result<(), NulError> { + pub fn set_clipboard_text(&self, text: &str) -> Result<(), NulError> { let s = CString::new(text)?; - unsafe { - ffi::SetClipboardText(s.as_ptr()); - } + unsafe { ffi::SetClipboardText(s.as_ptr()) } Ok(()) } } // Screen-space-related functions -impl RaylibHandle { +impl RaylibHandle<'_> { /// Returns a ray trace from mouse position - pub fn get_mouse_ray( - &self, - mouse_position: impl Into, - camera: impl Into, - ) -> Ray { - unsafe { ffi::GetMouseRay(mouse_position.into(), camera.into()).into() } + pub fn get_mouse_ray(&self, mouse_position: Vector2, camera: Camera3D) -> Ray { + unsafe { ffi::GetMouseRay(mouse_position, camera) } } /// Returns the screen space position for a 3d world space position - pub fn get_world_to_screen( - &self, - position: impl Into, - camera: impl Into, - ) -> Vector2 { - unsafe { ffi::GetWorldToScreen(position.into(), camera.into()).into() } + pub fn get_world_to_screen(&self, position: Vector3, camera: Camera3D) -> Vector2 { + unsafe { ffi::GetWorldToScreen(position, camera) } } /// Returns the screen space position for a 2d camera world space position - #[allow(non_snake_case)] - pub fn get_world_to_screen2D( - &self, - position: impl Into, - camera: impl Into, - ) -> Vector2 { - unsafe { ffi::GetWorldToScreen2D(position.into(), camera.into()).into() } + pub fn get_world_to_screen_2d(&self, position: Vector2, camera: Camera2D) -> Vector2 { + unsafe { ffi::GetWorldToScreen2D(position, camera) } } /// Returns size position for a 3d world space position pub fn get_world_to_screen_ex( &self, - position: impl Into, - camera: impl Into, + position: Vector3, + camera: Camera3D, width: i32, height: i32, ) -> Vector2 { - unsafe { ffi::GetWorldToScreenEx(position.into(), camera.into(), width, height).into() } + unsafe { ffi::GetWorldToScreenEx(position, camera, width, height) } } /// Returns the world space position for a 2d camera screen space position - #[allow(non_snake_case)] - pub fn get_screen_to_world2D( - &self, - position: impl Into, - camera: impl Into, - ) -> Vector2 { - unsafe { ffi::GetScreenToWorld2D(position.into(), camera.into()).into() } + pub fn get_screen_to_world_2d(&self, position: Vector2, camera: Camera2D) -> Vector2 { + unsafe { ffi::GetScreenToWorld2D(position, camera) } } } // Timing related functions -impl RaylibHandle { +impl RaylibHandle<'_> { /// Set target FPS (maximum) - pub fn set_target_fps(&mut self, fps: u32) { - unsafe { - ffi::SetTargetFPS(fps as i32); - } + pub fn set_target_fps(&self, fps: u32) { + unsafe { ffi::SetTargetFPS(fps as i32) } } /// Returns current FPS @@ -471,9 +466,38 @@ impl RaylibHandle { } } +// Event management and custom frame control. +impl RaylibHandle<'_> { + /// Enable waiting for events on EndDrawing(), no automatic event polling + pub fn enable_event_waiting(&self) { + unsafe { ffi::EnableEventWaiting() } + } + + /// Disable waiting for events on EndDrawing(), automatic events polling + pub fn disable_event_waiting(&self) { + unsafe { ffi::DisableEventWaiting() } + } + + /// Swap back buffer with front buffer (screen drawing) + pub fn swap_screen_buffer(&self) { + unsafe { ffi::SwapScreenBuffer() } + } + + /// Register all input events + pub fn poll_input_events(&self) { + unsafe { ffi::PollInputEvents() } + } + + /// Wait for some time (halt program execution) + pub fn wait_time(seconds: f64) { + unsafe { ffi::WaitTime(seconds) } + } +} + // Window handling functions -impl RaylibHandle { +impl RaylibHandle<'_> { /// Checks if `KEY_ESCAPE` or Close icon was pressed. + /// Do not call on web unless you are compiling with asyncify. #[inline] pub fn window_should_close(&self) -> bool { unsafe { ffi::WindowShouldClose() } @@ -500,7 +524,7 @@ impl RaylibHandle { /// Checks if window has been hidden. #[inline] pub fn is_window_hidden(&self) -> bool { - unsafe { ffi::IsWindowResized() } + unsafe { ffi::IsWindowHidden() } } /// Returns whether or not window is in fullscreen mode @@ -518,7 +542,7 @@ impl RaylibHandle { /// Check if window is currently focused (only PLATFORM_DESKTOP) #[inline] pub fn get_window_scale_dpi(&self) -> Vector2 { - unsafe { ffi::GetWindowScaleDPI().into() } + unsafe { ffi::GetWindowScaleDPI() } } /// Check if cursor is on the current screen. @@ -529,128 +553,122 @@ impl RaylibHandle { /// Set mouse cursor #[inline] - pub fn set_mouse_cursor(&self, cursor: crate::consts::MouseCursor) { + pub fn set_mouse_cursor(&self, cursor: MouseCursor) { unsafe { ffi::SetMouseCursor(cursor as i32) } } /// Toggles fullscreen mode (only on desktop platforms). #[inline] - pub fn toggle_fullscreen(&mut self) { - unsafe { - ffi::ToggleFullscreen(); - } + pub fn toggle_fullscreen(&self) { + unsafe { ffi::ToggleFullscreen() } + } + + /// Set window state: maximized, if resizable (only PLATFORM_DESKTOP) + #[inline] + pub fn maximize_window(&self) { + unsafe { ffi::MaximizeWindow() } + } + + /// Set window state: minimized, if resizable (only PLATFORM_DESKTOP) + #[inline] + pub fn minimize_window(&self) { + unsafe { ffi::MinimizeWindow() } + } + + /// Set window state: not minimized/maximized (only PLATFORM_DESKTOP) + #[inline] + pub fn restore_window(&self) { + unsafe { ffi::RestoreWindow() } } /// Set window configuration state using flags - pub fn set_window_state(&mut self, state: WindowState) { + pub fn set_window_state(&self, state: WindowState) { unsafe { ffi::SetWindowState(state.0 as u32) } } /// Clear window configuration state flags - pub fn clear_window_state(&mut self, state: WindowState) { + pub fn clear_window_state(&self, state: WindowState) { unsafe { ffi::ClearWindowState(state.0 as u32) } } /// Get the window config state pub fn get_window_state(&self) -> WindowState { - let mut state = WindowState::default(); unsafe { - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_VSYNC_HINT as u32) { - state.set_vsync_hint(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_FULLSCREEN_MODE as u32) { - state.set_fullscreen_mode(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_RESIZABLE as u32) { - state.set_window_resizable(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_UNDECORATED as u32) { - state.set_window_undecorated(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_HIDDEN as u32) { - state.set_window_hidden(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_MINIMIZED as u32) { - state.set_window_minimized(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_MAXIMIZED as u32) { - state.set_window_maximized(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_UNFOCUSED as u32) { - state.set_window_unfocused(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_TOPMOST as u32) { - state.set_window_topmost(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_ALWAYS_RUN as u32) { - state.set_window_always_run(true); - } - - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_TRANSPARENT as u32) { - state.set_window_transparent(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_WINDOW_HIGHDPI as u32) { - state.set_window_highdpi(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_MSAA_4X_HINT as u32) { - state.set_msaa(true); - } - if ffi::IsWindowState(ffi::ConfigFlags::FLAG_INTERLACED_HINT as u32) { - state.set_interlaced_hint(true); - } + WindowState::default() + .set_vsync_hint(ffi::IsWindowState(ConfigFlags::FLAG_VSYNC_HINT as u32)) + .set_fullscreen_mode(ffi::IsWindowState(ConfigFlags::FLAG_FULLSCREEN_MODE as u32)) + .set_window_resizable(ffi::IsWindowState( + ConfigFlags::FLAG_WINDOW_RESIZABLE as u32, + )) + .set_window_undecorated(ffi::IsWindowState( + ConfigFlags::FLAG_WINDOW_UNDECORATED as u32, + )) + .set_window_hidden(ffi::IsWindowState(ConfigFlags::FLAG_WINDOW_HIDDEN as u32)) + .set_window_minimized(ffi::IsWindowState( + ConfigFlags::FLAG_WINDOW_MINIMIZED as u32, + )) + .set_window_maximized(ffi::IsWindowState( + ConfigFlags::FLAG_WINDOW_MAXIMIZED as u32, + )) + .set_window_unfocused(ffi::IsWindowState( + ConfigFlags::FLAG_WINDOW_UNFOCUSED as u32, + )) + .set_window_topmost(ffi::IsWindowState(ConfigFlags::FLAG_WINDOW_TOPMOST as u32)) + .set_window_always_run(ffi::IsWindowState( + ConfigFlags::FLAG_WINDOW_ALWAYS_RUN as u32, + )) + .set_window_transparent(ffi::IsWindowState( + ConfigFlags::FLAG_WINDOW_TRANSPARENT as u32, + )) + .set_window_highdpi(ffi::IsWindowState(ConfigFlags::FLAG_WINDOW_HIGHDPI as u32)) + .set_msaa(ffi::IsWindowState(ConfigFlags::FLAG_MSAA_4X_HINT as u32)) + .set_interlaced_hint(ffi::IsWindowState(ConfigFlags::FLAG_INTERLACED_HINT as u32)) } - state } /// Sets icon for window (only on desktop platforms). #[inline] - pub fn set_window_icon(&mut self, image: impl AsRef) { - unsafe { - ffi::SetWindowIcon(*image.as_ref()); - } + pub fn set_window_icon(&self, image: impl AsRef) { + unsafe { ffi::SetWindowIcon(*image.as_ref()) } + } + + /// Set icon for window (multiple images, RGBA 32bit, only PLATFORM_DESKTOP) + #[inline] + pub fn set_window_icons(&self, images: &[raylib_sys::Image]) { + unsafe { ffi::SetWindowIcons(images.as_ptr() as _, images.len().try_into().unwrap()) } } /// Sets title for window (only on desktop platforms). #[inline] pub fn set_window_title(&self, _: &RaylibThread, title: &str) { let c_title = CString::new(title).unwrap(); - unsafe { - ffi::SetWindowTitle(c_title.as_ptr()); - } + unsafe { ffi::SetWindowTitle(c_title.as_ptr()) } } /// Sets window position on screen (only on desktop platforms). #[inline] - pub fn set_window_position(&mut self, x: i32, y: i32) { - unsafe { - ffi::SetWindowPosition(x, y); - } + pub fn set_window_position(&self, x: i32, y: i32) { + unsafe { ffi::SetWindowPosition(x, y) } } /// Sets monitor for the current window (fullscreen mode). #[inline] - pub fn set_window_monitor(&mut self, monitor: i32) { + pub fn set_window_monitor(&self, monitor: i32) { let len = get_monitor_count(); debug_assert!(monitor < len && monitor >= 0, "monitor index out of range"); - unsafe { - ffi::SetWindowMonitor(monitor); - } + unsafe { ffi::SetWindowMonitor(monitor) } } /// Sets minimum window dimensions (for `FLAG_WINDOW_RESIZABLE`). #[inline] - pub fn set_window_min_size(&mut self, width: i32, height: i32) { - unsafe { - ffi::SetWindowMinSize(width, height); - } + pub fn set_window_min_size(&self, width: i32, height: i32) { + unsafe { ffi::SetWindowMinSize(width, height) } } /// Sets window dimensions. #[inline] - pub fn set_window_size(&mut self, width: i32, height: i32) { - unsafe { - ffi::SetWindowSize(width, height); - } + pub fn set_window_size(&self, width: i32, height: i32) { + unsafe { ffi::SetWindowSize(width, height) } } /// Gets current screen width. @@ -668,26 +686,22 @@ impl RaylibHandle { /// Get window position #[inline] pub fn get_window_position(&self) -> Vector2 { - unsafe { ffi::GetWindowPosition().into() } + unsafe { ffi::GetWindowPosition() } } } // Cursor-related functions -impl RaylibHandle { +impl RaylibHandle<'_> { /// Shows mouse cursor. #[inline] - pub fn show_cursor(&mut self) { - unsafe { - ffi::ShowCursor(); - } + pub fn show_cursor(&self) { + unsafe { ffi::ShowCursor() } } /// Hides mouse cursor. #[inline] - pub fn hide_cursor(&mut self) { - unsafe { - ffi::HideCursor(); - } + pub fn hide_cursor(&self) { + unsafe { ffi::HideCursor() } } /// Checks if mouse cursor is not visible. @@ -698,23 +712,19 @@ impl RaylibHandle { /// Enables mouse cursor (unlock cursor). #[inline] - pub fn enable_cursor(&mut self) { - unsafe { - ffi::EnableCursor(); - } + pub fn enable_cursor(&self) { + unsafe { ffi::EnableCursor() } } /// Disables mouse cursor (lock cursor). #[inline] - pub fn disable_cursor(&mut self) { - unsafe { - ffi::DisableCursor(); - } + pub fn disable_cursor(&self) { + unsafe { ffi::DisableCursor() } } /// Get native window handle #[inline] - pub unsafe fn get_window_handle(&mut self) -> *mut ::std::os::raw::c_void { - ffi::GetWindowHandle() + pub fn get_window_handle(&self) -> *mut core::ffi::c_void { + unsafe { ffi::GetWindowHandle() } } } diff --git a/raylib/src/ease.rs b/raylib/src/ease.rs index 8263efef..76783972 100644 --- a/raylib/src/ease.rs +++ b/raylib/src/ease.rs @@ -208,9 +208,9 @@ pub fn expo_in_out(t: f32, b: f32, c: f32, d: f32) -> f32 { let td = t / (d / 2.0); if td < 1.0 { - return c / 2.0 * 2.0f32.powf(10.0 * (t - 1.0)) + b; + c / 2.0 * 2.0f32.powf(10.0 * (t - 1.0)) + b } else { - return c / 2.0 * (-(2.0f32.powf(-10.0 * td - 1.0)) + 2.0) + b; + c / 2.0 * (-(2.0f32.powf(-10.0 * td - 1.0)) + 2.0) + b } } diff --git a/raylib/src/lib.rs b/raylib/src/lib.rs index ab03aa58..2c2c4163 100644 --- a/raylib/src/lib.rs +++ b/raylib/src/lib.rs @@ -37,7 +37,7 @@ Permission is granted to anyone to use this software for any purpose, including //! //! The classic "Hello, world": //! -//! ``` +//! ```no_run //! use raylib::prelude::*; //! //! fn main() { @@ -54,27 +54,19 @@ Permission is granted to anyone to use this software for any purpose, including //! } //! } //! ``` -#![cfg_attr(feature = "nightly", feature(optin_builtin_traits))] -#![allow(dead_code)] -pub mod consts; +pub mod audio; +pub mod buffer; pub mod core; pub mod ease; pub mod prelude; pub mod rgui; +#[macro_use] +pub(crate) mod macros; + /// The raw, unsafe FFI binding, in case you need that escape hatch or the safe layer doesn't provide something you need. pub mod ffi { pub use raylib_sys::*; } -pub use crate::core::collision::*; -pub use crate::core::file::*; -pub use crate::core::logging::*; -pub use crate::core::misc::{get_random_value, open_url}; -pub use crate::core::*; - -// Re-exports -#[cfg(feature = "nalgebra_interop")] -pub use nalgebra as na; -#[cfg(feature = "with_serde")] -pub use serde; +pub use crate::core::init; diff --git a/raylib/src/core/macros.rs b/raylib/src/macros.rs similarity index 55% rename from raylib/src/core/macros.rs rename to raylib/src/macros.rs index c18ae5fa..41b3600c 100644 --- a/raylib/src/core/macros.rs +++ b/raylib/src/macros.rs @@ -1,13 +1,4 @@ -macro_rules! make_thin_wrapper { - ($name:ident, $t:ty, $dropfunc:expr) => { - #[repr(transparent)] - #[derive(Debug)] - pub struct $name(pub(crate) $t); - - impl_wrapper!($name, $t, $dropfunc, 0); - }; -} - +#[macro_export] macro_rules! impl_wrapper { ($name:ident, $t:ty, $dropfunc:expr, $rawfield:tt) => { impl $name { @@ -40,21 +31,6 @@ macro_rules! impl_wrapper { } } - impl std::ops::Deref for $name { - type Target = $t; - #[inline] - fn deref(&self) -> &Self::Target { - &self.$rawfield - } - } - - impl std::ops::DerefMut for $name { - #[inline] - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.$rawfield - } - } - impl $name { /// returns the unwrapped raylib-sys object pub fn to_raw(self) -> $t { @@ -73,53 +49,75 @@ macro_rules! impl_wrapper { }; } -macro_rules! make_rslice { - ($name:ident, $t:ty, $dropfunc:expr) => { - #[repr(transparent)] - #[derive(Debug)] - pub struct $name(pub(crate) std::mem::ManuallyDrop>); - - impl_rslice!($name, std::boxed::Box<[$t]>, $dropfunc, 0); - }; -} +#[macro_export] +macro_rules! impl_wrapper_bounded { + ($name:ident, $t:ty, $dropfunc:expr, $rawfield:tt, $lt:lifetime) => { + impl<'bind, $lt> $name<'bind, $lt> { + /// Take the raw ffi type. Must manually free memory by calling the proper unload function + pub unsafe fn unwrap(self) -> $t { + let inner = self.$rawfield; + std::mem::forget(self); + inner + } + } -macro_rules! impl_rslice { - ($name:ident, $t:ty, $dropfunc:expr, $rawfield:tt) => { - impl Drop for $name { + impl<'bind, $lt> Drop for $name<'bind, $lt> { #[allow(unused_unsafe)] fn drop(&mut self) { unsafe { - let inner = std::mem::ManuallyDrop::take(&mut self.0); - ($dropfunc)(std::boxed::Box::leak(inner).as_mut_ptr() as *mut _); + ($dropfunc)(self.$rawfield); } } } - impl std::convert::AsRef<$t> for $name { + impl<'bind, $lt> std::convert::AsRef<$t> for $name<'bind, $lt> { fn as_ref(&self) -> &$t { &self.$rawfield } } - impl std::convert::AsMut<$t> for $name { + impl<'bind, $lt> std::convert::AsMut<$t> for $name<'bind, $lt> { fn as_mut(&mut self) -> &mut $t { &mut self.$rawfield } } - impl std::ops::Deref for $name { - type Target = $t; - #[inline] - fn deref(&self) -> &Self::Target { - &self.$rawfield + impl<'bind, $lt> $name<'bind, $lt> { + /// returns the unwrapped raylib-sys object + pub fn to_raw(self) -> $t { + let raw = self.$rawfield; + std::mem::forget(self); + raw } - } - impl std::ops::DerefMut for $name { - #[inline] - fn deref_mut(&mut self) -> &mut Self::Target { - &mut self.$rawfield + /// converts raylib-sys object to a "safe" + /// version. Make sure to call this function + /// from the thread the resource was created. + pub unsafe fn from_raw(raw: $t) -> Self { + Self(raw, std::marker::PhantomData, std::marker::PhantomData) } } }; } + +#[macro_export] +macro_rules! make_thin_wrapper { + ($name:ident, $t:ty, $dropfunc:expr) => { + #[repr(transparent)] + #[derive(Debug)] + pub struct $name(pub(crate) $t); + + crate::impl_wrapper!($name, $t, $dropfunc, 0); + }; +} + +#[macro_export] +macro_rules! make_bound_thin_wrapper { + ($name:ident, $t:ty, $dropfunc:expr, $binding:ty) => { + #[repr(transparent)] + #[derive(Debug)] + pub struct $name<'bind: 'a, 'a>(pub(crate) $t, pub(crate) std::marker::PhantomData<&'a Self>, pub(crate) std::marker::PhantomData<&'bind $binding>); + + crate::impl_wrapper_bounded!($name, $t, $dropfunc, 0, 'a); + }; +} diff --git a/raylib/src/prelude.rs b/raylib/src/prelude.rs index b2d221a0..6c485425 100644 --- a/raylib/src/prelude.rs +++ b/raylib/src/prelude.rs @@ -1,42 +1,18 @@ -/* raylib-rs - ease.rs - Easings/interpolation helpers - -Copyright (c) 2018-2019 Paul Clement (@deltaphc) - -This software is provided "as-is", without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source distribution. -*/ - -//! The raylib-rs prelude. -//! -//! This prelude module is for bringing many commonly-used types, functions, and constants into scope all at once. -//! -//! # Example -//! -//! ``` -//! use raylib::prelude::*; -//! ``` - -pub use crate::consts::*; -pub use crate::core::audio::*; -pub use crate::core::camera::*; -pub use crate::core::color::*; -pub use crate::core::data::*; -pub use crate::core::drawing::*; -pub use crate::core::logging::*; -pub use crate::core::math::*; -pub use crate::core::models::*; -pub use crate::core::shaders::*; -pub use crate::core::text::*; -pub use crate::core::texture::*; -pub use crate::core::window::*; -pub use crate::core::*; -pub use crate::rgui::*; -pub use crate::*; +/* raylib-rs + prelude.rs + +Copyright (c) 2018-2019 Paul Clement (@deltaphc) + +This software is provided "as-is", without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source distribution. +*/ +pub use crate::audio::{AudioSample, AudioStream, Music, RaylibAudio, Sound, Wave}; +pub use crate::core::{drawing::*, init, RaylibBuilder, RaylibHandle, RaylibThread}; +pub use crate::ffi::{Color, Rectangle}; diff --git a/raylib/src/rgui/safe.rs b/raylib/src/rgui/safe.rs index 26d766eb..41e00367 100644 --- a/raylib/src/rgui/safe.rs +++ b/raylib/src/rgui/safe.rs @@ -1,14 +1,13 @@ -use crate::core::color::Color; -use crate::core::drawing::RaylibDraw; -use crate::core::math::{Rectangle, Vector2}; -use crate::core::text::WeakFont; -use crate::core::RaylibHandle; -use crate::ffi; +use crate::core::{drawing::RaylibDraw, text::Font, RaylibHandle}; +use crate::ffi::{self, Color, Rectangle, Vector2}; -use std::ffi::CStr; +use std::ffi::{CStr, CString}; +use std::marker::PhantomData; +use std::mem::ManuallyDrop; +use std::ptr; /// Global gui modification functions -impl RaylibHandle { +impl RaylibHandle<'_> { /// Enable gui controls (global state) #[inline] pub fn gui_enable(&mut self) { @@ -36,12 +35,12 @@ impl RaylibHandle { } /// Set gui state (global state) #[inline] - pub fn gui_set_state(&mut self, state: crate::consts::GuiControlState) { + pub fn gui_set_state(&mut self, state: ffi::GuiState) { unsafe { ffi::GuiSetState(state as i32) } } /// Get gui state (global state) #[inline] - pub fn gui_get_state(&mut self) -> crate::consts::GuiControlState { + pub fn gui_get_state(&mut self) -> ffi::GuiState { unsafe { std::mem::transmute(ffi::GuiGetState()) } } /// Set gui custom font (global state) @@ -51,26 +50,27 @@ impl RaylibHandle { } /// Get gui custom font (global state) #[inline] - pub fn gui_get_font(&mut self) -> WeakFont { - unsafe { WeakFont(ffi::GuiGetFont()) } + pub fn gui_get_font<'bind>(&'bind mut self) -> ManuallyDrop> { + unsafe { ManuallyDrop::new(Font(ffi::GuiGetFont(), PhantomData, PhantomData)) } } /// Set one style property /// SHOULD use one of the Gui*Property enums #[inline] - pub fn gui_set_style(&mut self, control: crate::consts::GuiControl, property: i32, value: i32) { + pub fn gui_set_style(&mut self, control: ffi::GuiControl, property: i32, value: i32) { unsafe { ffi::GuiSetStyle(control as i32, property as i32, value) } } /// Get one style property /// SHOULD use one of the Gui*Property enums #[inline] - pub fn gui_get_style(&mut self, control: crate::consts::GuiControl, property: i32) -> i32 { + pub fn gui_get_style(&mut self, control: ffi::GuiControl, property: i32) -> i32 { unsafe { ffi::GuiGetStyle(control as i32, property as i32) } } /// Load style file (.rgs) #[inline] - pub fn gui_load_style(&mut self, filename: Option<&CStr>) { - unsafe { ffi::GuiLoadStyle(filename.map(CStr::as_ptr).unwrap_or(std::ptr::null())) } + pub fn gui_load_style(&mut self, filename: &str) { + let filename = CString::new(filename).unwrap(); + unsafe { ffi::GuiLoadStyle(filename.as_ptr()) } } /// Load style default over global style #[inline] @@ -79,9 +79,9 @@ impl RaylibHandle { } } -impl RaylibDrawGui for D {} +impl<'a, D: RaylibDraw> RaylibDrawGui<'a> for D {} -pub trait RaylibDrawGui { +pub trait RaylibDrawGui<'a> { /// Enable gui controls (global state) #[inline] fn gui_enable(&mut self) { @@ -109,12 +109,12 @@ pub trait RaylibDrawGui { } /// Set gui state (global state) #[inline] - fn gui_set_state(&mut self, state: crate::consts::GuiControlState) { + fn gui_set_state(&mut self, state: ffi::GuiState) { unsafe { ffi::GuiSetState(state as i32) } } /// Get gui state (global state) #[inline] - fn gui_get_state(&mut self) -> crate::consts::GuiControlState { + fn gui_get_state(&mut self) -> ffi::GuiState { unsafe { std::mem::transmute(ffi::GuiGetState()) } } /// Set gui custom font (global state) @@ -124,26 +124,27 @@ pub trait RaylibDrawGui { } /// Get gui custom font (global state) #[inline] - fn gui_get_font(&mut self) -> WeakFont { - unsafe { WeakFont(ffi::GuiGetFont()) } + fn gui_get_font<'bind>(&'bind mut self) -> ManuallyDrop> { + unsafe { ManuallyDrop::new(Font(ffi::GuiGetFont(), PhantomData, PhantomData)) } } /// Set one style property /// SHOULD use one of the Gui*Property enums #[inline] - fn gui_set_style(&mut self, control: crate::consts::GuiControl, property: i32, value: i32) { + fn gui_set_style(&mut self, control: ffi::GuiControl, property: i32, value: i32) { unsafe { ffi::GuiSetStyle(control as i32, property as i32, value) } } /// Get one style property /// SHOULD use one of the Gui*Property enums #[inline] - fn gui_get_style(&self, control: crate::consts::GuiControl, property: i32) -> i32 { + fn gui_get_style(&self, control: ffi::GuiControl, property: i32) -> i32 { unsafe { ffi::GuiGetStyle(control as i32, property as i32) } } /// Load style file (.rgs) #[inline] - fn gui_load_style(&mut self, filename: Option<&CStr>) { - unsafe { ffi::GuiLoadStyle(filename.map(CStr::as_ptr).unwrap_or(std::ptr::null())) } + fn gui_load_style(&mut self, filename: &str) { + let filename = CString::new(filename).unwrap(); + unsafe { ffi::GuiLoadStyle(filename.as_ptr()) } } /// Load style default over global style #[inline] @@ -152,214 +153,114 @@ pub trait RaylibDrawGui { } /// Window Box control, shows a window that can be closed #[inline] - fn gui_window_box(&mut self, bounds: impl Into, title: Option<&CStr>) -> bool { - unsafe { - ffi::GuiWindowBox( - bounds.into(), - title.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - } + fn gui_window_box(&mut self, bounds: Rectangle, title: &str) -> bool { + let title = CString::new(title).unwrap(); + unsafe { ffi::GuiWindowBox(bounds, title.as_ptr()) } } /// Group Box control with text name #[inline] - fn gui_group_box(&mut self, bounds: impl Into, text: Option<&CStr>) { - unsafe { - ffi::GuiGroupBox( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - } + fn gui_group_box(&mut self, bounds: Rectangle, text: &str) { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiGroupBox(bounds, text.as_ptr()) } } /// Line separator control, could contain text #[inline] - fn gui_line(&mut self, bounds: impl Into, text: Option<&CStr>) { - unsafe { - ffi::GuiLine( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - } + fn gui_line(&mut self, bounds: Rectangle, text: &str) { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiLine(bounds, text.as_ptr()) } } /// Panel control, useful to group controls #[inline] - fn gui_panel(&mut self, bounds: impl Into) { - unsafe { ffi::GuiPanel(bounds.into()) } + fn gui_panel(&mut self, bounds: Rectangle, text: &str) { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiPanel(bounds, text.as_ptr()) } } /// Scroll Panel control #[inline] fn gui_scroll_panel( &mut self, - bounds: impl Into, - content: impl Into, - scroll: impl Into, + bounds: Rectangle, + text: &str, + content: Rectangle, + scroll: impl Into, ) -> (Rectangle, Vector2) { + let text = CString::new(text).unwrap(); let mut scroll = scroll.into(); let bounds: ffi::Rectangle = - unsafe { ffi::GuiScrollPanel(bounds.into(), content.into(), &mut scroll) }; - return (bounds.into(), scroll.into()); + unsafe { ffi::GuiScrollPanel(bounds, text.as_ptr(), content.into(), &mut scroll) }; + return (bounds, scroll.into()); } /// Label control, shows text #[inline] - fn gui_label(&mut self, bounds: impl Into, text: Option<&CStr>) { - unsafe { - ffi::GuiLabel( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - } + fn gui_label(&mut self, bounds: Rectangle, text: &str) { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiLabel(bounds, text.as_ptr()) } } /// Button control, returns true when clicked #[inline] - fn gui_button(&mut self, bounds: impl Into, text: Option<&CStr>) -> bool { - unsafe { - ffi::GuiButton( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - } + fn gui_button(&mut self, bounds: Rectangle, text: &str) -> bool { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiButton(bounds, text.as_ptr()) } } /// Label button control, show true when clicked #[inline] - fn gui_label_button(&mut self, bounds: impl Into, text: Option<&CStr>) -> bool { - unsafe { - ffi::GuiLabelButton( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - } - } - /// Image button control, returns true when clicked - #[inline] - fn gui_image_button( - &mut self, - bounds: impl Into, - text: Option<&CStr>, - texture: impl AsRef, - ) -> bool { - unsafe { - ffi::GuiImageButton( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - *texture.as_ref(), - ) - } - } - /// Image button extended control, returns true when clicked - #[inline] - fn gui_image_button_ex( - &mut self, - bounds: impl Into, - text: Option<&CStr>, - texture: impl AsRef, - tex_source: impl Into, - ) -> bool { - unsafe { - ffi::GuiImageButtonEx( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - *texture.as_ref(), - tex_source.into(), - ) - } + fn gui_label_button(&mut self, bounds: Rectangle, text: &str) -> bool { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiLabelButton(bounds, text.as_ptr()) } } /// Toggle Button control, returns true when active #[inline] - fn gui_toggle( - &mut self, - bounds: impl Into, - text: Option<&CStr>, - active: bool, - ) -> bool { - unsafe { - ffi::GuiToggle( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - active, - ) - } + fn gui_toggle(&mut self, bounds: Rectangle, text: &str, active: bool) -> bool { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiToggle(bounds, text.as_ptr(), active) } } /// Toggle Group control, returns active toggle index #[inline] - fn gui_toggle_group( - &mut self, - bounds: impl Into, - text: Option<&CStr>, - active: i32, - ) -> i32 { - unsafe { - ffi::GuiToggleGroup( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - active, - ) - } + fn gui_toggle_group(&mut self, bounds: Rectangle, text: &str, active: i32) -> i32 { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiToggleGroup(bounds, text.as_ptr(), active) } } /// Check Box control, returns true when active #[inline] - fn gui_check_box( - &mut self, - bounds: impl Into, - text: Option<&CStr>, - checked: bool, - ) -> bool { - unsafe { - ffi::GuiCheckBox( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - checked, - ) - } + fn gui_check_box(&mut self, bounds: Rectangle, text: &str, checked: bool) -> bool { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiCheckBox(bounds, text.as_ptr(), checked) } } /// Combo Box control, returns selected item index #[inline] - fn gui_combo_box( - &mut self, - bounds: impl Into, - text: Option<&CStr>, - active: i32, - ) -> i32 { - unsafe { - ffi::GuiComboBox( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - active, - ) - } + fn gui_combo_box(&mut self, bounds: Rectangle, text: &str, active: i32) -> i32 { + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiComboBox(bounds, text.as_ptr(), active) } } /// Dropdown Box control, returns selected item #[inline] fn gui_dropdown_box( &mut self, - bounds: impl Into, - text: Option<&CStr>, + bounds: Rectangle, + text: &str, active: &mut i32, edit_mode: bool, ) -> bool { - unsafe { - ffi::GuiDropdownBox( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - active, - edit_mode, - ) - } + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiDropdownBox(bounds, text.as_ptr(), active, edit_mode) } } /// Spinner control, returns selected value #[inline] fn gui_spinner( &mut self, - bounds: impl Into, - text: Option<&CStr>, + bounds: Rectangle, + text: &str, value: &mut i32, min_value: i32, max_value: i32, edit_mode: bool, ) -> bool { + let text = CString::new(text).unwrap(); unsafe { ffi::GuiSpinner( - bounds.into(), + bounds, // text.map(CStr::as_ptr).unwrap_or(crate::rstr!("").as_ptr()), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), + text.as_ptr(), value, min_value, max_value, @@ -371,17 +272,18 @@ pub trait RaylibDrawGui { #[inline] fn gui_value_box( &mut self, - bounds: impl Into, - text: Option<&CStr>, + bounds: Rectangle, + text: &str, value: &mut i32, min_value: i32, max_value: i32, edit_mode: bool, ) -> bool { + let text = CString::new(text).unwrap(); unsafe { ffi::GuiValueBox( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), + bounds, + text.as_ptr(), value, min_value, max_value, @@ -392,59 +294,43 @@ pub trait RaylibDrawGui { /// Text Box control, updates input text /// Use at your own risk!!! The allocated vector MUST have enough space for edits. #[inline] - fn gui_text_box( - &mut self, - bounds: impl Into, - buffer: &mut [u8], - edit_mode: bool, - ) -> bool { + fn gui_text_box(&mut self, bounds: Rectangle, buffer: &mut [u8], edit_mode: bool) -> bool { let len = buffer.len(); let c_text = unsafe { CStr::from_bytes_with_nul_unchecked(buffer) }; - unsafe { - ffi::GuiTextBox( - bounds.into(), - c_text.as_ptr() as *mut _, - len as i32, - edit_mode, - ) - } + unsafe { ffi::GuiTextBox(bounds, c_text.as_ptr() as *mut _, len as i32, edit_mode) } } /// Text Box control with multiple lines /// Use at your own risk!!! The allocated vector MUST have a nul terminator. #[inline] fn gui_text_box_multi( &mut self, - bounds: impl Into, + bounds: Rectangle, buffer: &mut [u8], edit_mode: bool, ) -> bool { let len = buffer.len(); let c_text = unsafe { CStr::from_bytes_with_nul_unchecked(buffer) }; - unsafe { - ffi::GuiTextBoxMulti( - bounds.into(), - c_text.as_ptr() as *mut _, - len as i32, - edit_mode, - ) - } + unsafe { ffi::GuiTextBoxMulti(bounds, c_text.as_ptr() as *mut _, len as i32, edit_mode) } } /// Slider control, returns selected value #[inline] fn gui_slider( &mut self, - bounds: impl Into, - text_left: Option<&CStr>, - text_right: Option<&CStr>, + bounds: Rectangle, + text_left: &str, + text_right: &str, value: f32, min_value: f32, max_value: f32, ) -> f32 { + let text_left = CString::new(text_left).unwrap(); + let text_right = CString::new(text_right).unwrap(); + unsafe { ffi::GuiSlider( - bounds.into(), - text_left.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - text_right.map(CStr::as_ptr).unwrap_or(std::ptr::null()), + bounds, + text_left.as_ptr(), + text_right.as_ptr(), value, min_value, max_value, @@ -455,18 +341,21 @@ pub trait RaylibDrawGui { #[inline] fn gui_slider_bar( &mut self, - bounds: impl Into, - text_left: Option<&CStr>, - text_right: Option<&CStr>, + bounds: Rectangle, + text_left: &str, + text_right: &str, value: f32, min_value: f32, max_value: f32, ) -> f32 { + let text_left = CString::new(text_left).unwrap(); + let text_right = CString::new(text_right).unwrap(); + unsafe { ffi::GuiSliderBar( - bounds.into(), - text_left.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - text_right.map(CStr::as_ptr).unwrap_or(std::ptr::null()), + bounds, + text_left.as_ptr(), + text_right.as_ptr(), value, min_value, max_value, @@ -477,18 +366,21 @@ pub trait RaylibDrawGui { #[inline] fn gui_progress_bar( &mut self, - bounds: impl Into, - text_left: Option<&CStr>, - text_right: Option<&CStr>, + bounds: Rectangle, + text_left: &str, + text_right: &str, value: f32, min_value: f32, max_value: f32, ) -> f32 { + let text_left = CString::new(text_left).unwrap(); + let text_right = CString::new(text_right).unwrap(); + unsafe { ffi::GuiProgressBar( - bounds.into(), - text_left.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - text_right.map(CStr::as_ptr).unwrap_or(std::ptr::null()), + bounds, + text_left.as_ptr(), + text_right.as_ptr(), value, min_value, max_value, @@ -497,82 +389,56 @@ pub trait RaylibDrawGui { } /// Status Bar control, shows info text #[inline] - fn gui_status_bar(&mut self, bounds: impl Into, text: Option<&CStr>) { - unsafe { - ffi::GuiStatusBar( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - } + fn gui_status_bar(&mut self, bounds: Rectangle, text: &str) { + let text = CString::new(text).unwrap(); + + unsafe { ffi::GuiStatusBar(bounds, text.as_ptr()) } } /// Dummy control for placeholders #[inline] - fn gui_dummy_rec(&mut self, bounds: impl Into, text: Option<&CStr>) { - unsafe { - ffi::GuiStatusBar( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - } - } - /// Scroll Bar control - #[inline] - fn gui_scroll_bar( - &mut self, - bounds: impl Into, - value: i32, - min_value: i32, - max_value: i32, - ) -> i32 { - unsafe { ffi::GuiScrollBar(bounds.into(), value, min_value, max_value) } + fn gui_dummy_rec(&mut self, bounds: Rectangle, text: &str) { + let text = CString::new(text).unwrap(); + + unsafe { ffi::GuiStatusBar(bounds, text.as_ptr()) } } /// Grid control #[inline] - fn gui_grid( - &mut self, - bounds: impl Into, - spacing: f32, - subdivs: i32, - ) -> Vector2 { - unsafe { ffi::GuiGrid(bounds.into(), spacing, subdivs).into() } + fn gui_grid(&mut self, bounds: Rectangle, text: &str, spacing: f32, subdivs: i32) -> Vector2 { + let text = CString::new(text).unwrap(); + + unsafe { ffi::GuiGrid(bounds, text.as_ptr(), spacing, subdivs).into() } } /// List View control, returns selected list item index #[inline] fn gui_list_view( &mut self, - bounds: impl Into, - text: Option<&CStr>, + bounds: Rectangle, + text: &str, scroll_index: &mut i32, active: i32, ) -> i32 { - unsafe { - ffi::GuiListView( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - scroll_index, - active, - ) - } + let text = CString::new(text).unwrap(); + unsafe { ffi::GuiListView(bounds, text.as_ptr(), scroll_index, active) } } /// List View with extended parameters #[inline] fn gui_list_view_ex( &mut self, - bounds: impl Into, - text: &[&CStr], + bounds: Rectangle, + text: &[&str], focus: &mut i32, scroll_index: &mut i32, active: i32, ) -> i32 { - let mut buffer = Vec::with_capacity(text.len()); - for t in text { - buffer.push(t.as_ptr()); - } + let text_buffer: Box<[CString]> = + text.iter().map(|str| CString::new(*str).unwrap()).collect(); + let mut buffer: Box<[*mut u8]> = text_buffer.iter().map(|b| b.as_ptr() as _).collect(); + unsafe { ffi::GuiListViewEx( - bounds.into(), - buffer.as_mut_ptr(), - text.len() as i32, + bounds, + buffer.as_mut_ptr() as _, + buffer.len() as i32, focus, scroll_index, active, @@ -583,71 +449,77 @@ pub trait RaylibDrawGui { #[inline] fn gui_message_box( &mut self, - bounds: impl Into, - text: Option<&CStr>, - message: Option<&CStr>, - buttons: Option<&CStr>, + bounds: Rectangle, + text: &str, + message: &str, + buttons: &str, ) -> i32 { - unsafe { - ffi::GuiMessageBox( - bounds.into(), - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - message.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - buttons.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - } + let text = CString::new(text).unwrap(); + let message = CString::new(message).unwrap(); + let buttons = CString::new(buttons).unwrap(); + + unsafe { ffi::GuiMessageBox(bounds, text.as_ptr(), message.as_ptr(), buttons.as_ptr()) } } /// Text Input Box control, ask for text #[inline] fn gui_text_input_box( &mut self, - bounds: impl Into, - title: Option<&CStr>, - message: Option<&CStr>, - buttons: Option<&CStr>, + bounds: Rectangle, + title: &str, + message: &str, + buttons: &str, text: &mut Vec, - ) -> i32 { + text_max_size: i32, + secret_view_active: Option, + ) -> (i32, Option) { + let title = CString::new(title).unwrap(); + let message = CString::new(message).unwrap(); + let buttons = CString::new(buttons).unwrap(); + + let mut secret_view_active_int: Option = + secret_view_active.map(|s| if s { 1 } else { 0 }); + // rgui.h: line 3699 MAX_FILENAME_LEN text.reserve((256 - text.len()).max(0) as usize); - unsafe { + let btn_index = unsafe { ffi::GuiTextInputBox( - bounds.into(), - title.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - message.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - buttons.map(CStr::as_ptr).unwrap_or(std::ptr::null()), + bounds, + title.as_ptr(), + message.as_ptr(), + buttons.as_ptr(), text.as_mut_ptr() as *mut _, + text_max_size, + secret_view_active_int + .as_mut() + .map(|ptr| ptr as *mut i32) + .unwrap_or(ptr::null_mut()), ) - } + }; + + (btn_index, secret_view_active_int.map(|i| i != 0)) } /// Color Picker control #[inline] - fn gui_color_picker( - &mut self, - bounds: impl Into, - color: impl Into, - ) -> Color { - unsafe { ffi::GuiColorPicker(bounds.into(), color.into()).into() } + fn gui_color_picker(&mut self, bounds: Rectangle, text: &str, color: Color) -> Color { + let text = CString::new(text).unwrap(); + + unsafe { ffi::GuiColorPicker(bounds, text.as_ptr(), color).into() } } // Get text with icon id prepended // NOTE: Useful to add icons by name id (enum) instead of // a number that can change between ricon versions #[inline] - fn gui_icon_text( - &mut self, - icon_id: crate::consts::guiIconName, - text: Option<&CStr>, - ) -> String { - let buffer = unsafe { - ffi::GuiIconText( - icon_id as i32, - text.map(CStr::as_ptr).unwrap_or(std::ptr::null()), - ) - }; + fn gui_icon_text(&mut self, icon_id: ffi::GuiIconName, text: &str) -> String { + let text = CString::new(text).unwrap(); + + let buffer = unsafe { ffi::GuiIconText(icon_id as i32, text.as_ptr()) }; if buffer.is_null() { - return text - .map(|s| s.to_string_lossy().to_string()) - .unwrap_or("".to_owned()); + let ptr = text.as_ptr(); + if ptr.is_null() { + return String::default(); + } + return unsafe { CStr::from_ptr(ptr).to_string_lossy().to_string() }; } let c_str = unsafe { CStr::from_ptr(buffer) }; let str_slice = c_str.to_str().unwrap_or(""); @@ -659,7 +531,9 @@ pub trait RaylibDrawGui { /// Color Bar Alpha control /// NOTE: Returns alpha value normalized [0..1] #[inline] - fn gui_color_bar_alpha(&mut self, bounds: impl Into, alpha: f32) -> f32 { - unsafe { ffi::GuiColorBarAlpha(bounds.into(), alpha).into() } + fn gui_color_bar_alpha(&mut self, bounds: Rectangle, text: &str, alpha: f32) -> f32 { + let text = CString::new(text).unwrap(); + + unsafe { ffi::GuiColorBarAlpha(bounds, text.as_ptr(), alpha) } } } diff --git a/samples/3d_camera_first_person.rs b/samples/3d_camera_first_person.rs deleted file mode 100644 index 999fc9e7..00000000 --- a/samples/3d_camera_first_person.rs +++ /dev/null @@ -1,85 +0,0 @@ -use arr_macro::arr; -use rand::prelude::*; -use raylib::prelude::*; - -const WINDOW_WIDTH: i32 = 1280; -const WINDOW_HEIGHT: i32 = 720; - -struct Column { - height: f32, - position: Vector3, - color: Color, -} - -impl Column { - fn create_random() -> Column { - let mut rng = rand::thread_rng(); - let height: f32 = rng.gen_range(1.0, 12.0); - let position = Vector3::new( - rng.gen_range(-15.0, 15.0), - height / 2.0, - rng.gen_range(-15.0, 15.0), - ); - let color = Color::new(rng.gen_range(20, 255), rng.gen_range(10, 55), 30, 255); - - Column { - height, - position, - color, - } - } -} - -fn main() { - let (mut rl, thread) = raylib::init() - .size(WINDOW_WIDTH, WINDOW_HEIGHT) - .title("Hello, world!") - .build(); - - let mut camera = Camera3D::perspective( - Vector3::new(4.0, 2.0, 4.0), - Vector3::new(0.0, 1.8, 0.0), - Vector3::new(0.0, 1.0, 0.0), - 60.0, - ); - let columns: [Column; 20] = arr![Column::create_random(); 20]; - - rl.set_camera_mode(&camera, CameraMode::CAMERA_FIRST_PERSON); - rl.set_target_fps(60); - - while !rl.window_should_close() { - rl.update_camera(&mut camera); - - let mut d = rl.begin_drawing(&thread); - - d.clear_background(Color::DARKGREEN); - { - let mut d2 = d.begin_mode3D(camera); - - d2.draw_plane( - Vector3::new(0.0, 0.0, 0.0), - Vector2::new(32.0, 32.0), - Color::LIGHTGRAY, - ); - d2.draw_cube(Vector3::new(-16.0, 2.5, 0.0), 1.0, 5.0, 32.0, Color::BLUE); - d2.draw_cube(Vector3::new(16.0, 2.5, 0.0), 1.0, 5.0, 32.0, Color::LIME); - d2.draw_cube(Vector3::new(0.0, 2.5, 16.0), 32.0, 5.0, 1.0, Color::GOLD); - - for column in columns.iter() { - d2.draw_cube(column.position, 2.0, column.height, 2.0, column.color); - d2.draw_cube_wires(column.position, 2.0, column.height, 2.0, Color::MAROON); - } - } - d.draw_rectangle(10, 10, 220, 70, Color::SKYBLUE); - d.draw_rectangle_lines(10, 10, 220, 70, Color::BLUE); - d.draw_text( - "First person camera default controls:", - 20, - 20, - 10, - Color::BLACK, - ); - d.draw_text("- Move with keys: W, A, S, D", 40, 40, 10, Color::DARKGRAY); - d.draw_text("- Mouse move to look around", 40, 60, 10, Color::DARKGRAY); - } -} diff --git a/samples/Cargo.toml b/samples/Cargo.toml deleted file mode 100644 index 9ef44b42..00000000 --- a/samples/Cargo.toml +++ /dev/null @@ -1,89 +0,0 @@ -[package] -name = "raylib-examples" -version = "3.7.0" -authors = ["David Ayeke"] -edition = "2018" -license = "Zlib" -readme = "../README.md" -repository = "https://github.com/deltaphc/raylib-rs" - - -[dependencies] -raylib = { version = "3.7", path = "../raylib" } -structopt = "0.2" -specs-derive = "0.4.1" -rand = "0.7" -tcod = "0.15" -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0" -arr_macro = "0.1.3" - -[dependencies.specs] -version = "0.16.1" -default-features = false - -[[bin]] -name = "specs" -path = "./specs.rs" - -[[bin]] -name = "rgui" -path = "./rgui.rs" - -[[bin]] -name = "arkanoid" -path = "./arkanoid.rs" - -[[bin]] -name = "logo" -path = "./logo.rs" - - -[[bin]] -name = "camera2D" -path = "./camera2D.rs" - -[[bin]] -name = "raymarch" -path = "./raymarch.rs" - -[[bin]] -name = "font" -path = "./font.rs" - -[[bin]] -name = "drop" -path = "./drop.rs" - -[[bin]] -name = "texture" -path = "./texture.rs" - - -[[bin]] -name = "yaw_pitch_roll" -path = "yaw_pitch_roll.rs" - -[[bin]] -name = "roguelike" -path = "roguelike.rs" - -[[bin]] -name = "input" -path = "input.rs" - -[[bin]] -name = "3d_camera_first_person" -path = "3d_camera_first_person.rs" - -[[bin]] -name = "model_shader" -path = "model_shader.rs" - -[[bin]] -name = "extensions" -path = "extensions.rs" - -[[bin]] -name = "asteroids" -path = "./asteroids.rs" diff --git a/samples/README.md b/samples/README.md deleted file mode 100644 index 42329065..00000000 --- a/samples/README.md +++ /dev/null @@ -1,37 +0,0 @@ -cd into the samples folder before running samples! - -[arkanoid](arkanoid.rs) -![arkanoid](docs/arkanoid.PNG) - -[camera2D](camera2D.rs) -![camera2D](docs/camera2D.PNG) - -[font](font.rs) -![font](docs/font.PNG) - -[logo](logo.rs) -![logo](docs/logo.PNG) - -[raymarch](raymarch.rs) -![raymarch](docs/raymarch.PNG) - -[rgui](rgui.rs) -![rgui](docs/rgui.PNG) - -[specs](specs.rs) -![specs](docs/specs.PNG) - -[texture](texture.rs) -![texture](docs/texture.PNG) - -[3d_camera_first_person](3d_camera_first_person.rs) -![3d_camera_first_person](docs/3d_camera_first_person.PNG) - -[model_shader](model_shader.rs) -![model_shader](docs/model_shader.PNG) - -[roguelike](roguelike.rs) -![roguelike](docs/roguelike.PNG) - -[yaw_pitch_roll](yaw_pitch_roll.rs) -![yaw_pitch_roll](docs/yaw_pitch_roll.PNG) diff --git a/samples/Web.toml b/samples/Web.toml deleted file mode 100644 index da5af22f..00000000 --- a/samples/Web.toml +++ /dev/null @@ -1,22 +0,0 @@ -# The default value of `--target` used when building this crate -# in cases where it's not specified on the command line. -default-target = "wasm32-unknown-emscripten" - -# This will prepend a given JavaScript file to the resulting `.js` artifact. -# You can put any initialization code here which you'd like to have executed -# when your `.js` file first loads. -# -# This accepts either a string (as shown here), or an array of strings, -# in which case it will prepend all of the specified files in their -# order of appearance. -# prepend-js = "src/shell.js" - -[cargo-web] -# Asserts the minimum required version of `cargo-web` necessary -# to compile this crate; supported since 0.6.0. -minimum-version = "0.6.0" - -[target.emscripten] -# This will enable Emscripten's SDL2 port. Consult Emscripten's documentation -# for more details. -link-args = ["-s", "USE_GLFW=3", "-s", "ASSERTIONS=1", "-s", "ASYNCIFY=1", "--profiling"] diff --git a/samples/arkanoid.rs b/samples/arkanoid.rs deleted file mode 100644 index f7eb380b..00000000 --- a/samples/arkanoid.rs +++ /dev/null @@ -1,341 +0,0 @@ -extern crate raylib; -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -const PLAYER_MAX_LIFE: i32 = 5; -const LINES_OF_BRICKS: usize = 5; -const BRICKS_PER_LINE: usize = 20; - -#[derive(Default)] -struct Player { - pub position: Vector2, - pub size: Vector2, - pub life: i32, -} - -#[derive(Default)] -struct Ball { - position: Vector2, - speed: Vector2, - radius: i32, - active: bool, -} - -#[derive(Default)] -struct Brick { - position: Vector2, - active: bool, -} - -struct Game { - game_over: bool, - pause: bool, - player: Player, - ball: Ball, - bricks: Vec>, - brick_size: Vector2, -} - -impl Default for Game { - fn default() -> Game { - let game_over = false; - let pause = false; - - let player = Player::default(); - let ball = Ball::default(); - let mut bricks = Vec::new(); - for _ in 0..LINES_OF_BRICKS { - let mut v = Vec::new(); - for _ in 0..BRICKS_PER_LINE { - v.push(Brick::default()); - } - bricks.push(v); - } - let brick_size = Vector2::default(); - Game { - game_over, - pause, - player, - ball, - brick_size, - bricks, - } - } -} - -fn main() { - let opt = options::Opt::from_args(); - let (mut rl, thread) = opt.open_window("Arkanoid"); - let (_w, _h) = (opt.width, opt.height); - - let _game_over = false; - let _pause = false; - - let mut game = Game::default(); - - init_game(&mut game, &rl); - - while !rl.window_should_close() { - update_game(&mut game, &rl); - draw_game(&game, &mut rl, &thread); - } -} - -fn init_game(game: &mut Game, rl: &RaylibHandle) { - let (w, h) = (rl.get_screen_width() as f32, rl.get_screen_height() as f32); - game.brick_size = Vector2::new(rl.get_screen_width() as f32 / BRICKS_PER_LINE as f32, 40.0); - - // Initialize player - game.player.position = Vector2::new( - rl.get_screen_width() as f32 / 2.0, - rl.get_screen_height() as f32 * 7.0 / 8.0, - ); - game.player.size = Vector2::new(rl.get_screen_width() as f32 / 10.0, 20.0); - game.player.life = PLAYER_MAX_LIFE; - - // Initialize ball - game.ball.position = Vector2::new(w / 2.0, h * 7.0 / 7.0 - 30.0); - game.ball.speed = Vector2::default(); - game.ball.radius = 7; - game.ball.active = false; - - // Initialize bricks - let initial_down_position = 50.0; - - for i in 0..LINES_OF_BRICKS { - for j in 0..BRICKS_PER_LINE { - game.bricks[i][j].position = Vector2::new( - j as f32 * game.brick_size.x + game.brick_size.x / 2.0, - i as f32 * game.brick_size.y + initial_down_position, - ); - game.bricks[i][j].active = true; - } - } -} - -fn update_game(game: &mut Game, rl: &RaylibHandle) { - use raylib::consts::KeyboardKey::*; - let (w, h) = (rl.get_screen_width() as f32, rl.get_screen_height() as f32); - - if !game.game_over { - if rl.is_key_pressed(KEY_P) { - game.pause = !game.pause; - } - - if !game.pause { - // player movement logic - if rl.is_key_down(KEY_LEFT) { - game.player.position.x -= 5.0; - } - if game.player.position.x - game.player.size.x / 2.0 <= 0.0 { - game.player.position.x = game.player.size.x / 2.0; - } - if rl.is_key_down(KEY_RIGHT) { - game.player.position.x += 5.0; - } - if game.player.position.x + game.player.size.x / 2.0 >= w { - game.player.position.x = w - game.player.size.x / 2.0; - } - - // Ball launching logic - if !game.ball.active { - if rl.is_key_pressed(KEY_SPACE) { - game.ball.active = true; - game.ball.speed = Vector2::new(0.0, -5.0); - } - } - - // Ball movement logic - if game.ball.active { - game.ball.position += game.ball.speed; - } else { - game.ball.position = Vector2::new(game.player.position.x, h * 7.0 / 8.0 - 30.0); - } - - // Collision logic: ball vs walls - if game.ball.position.x + game.ball.radius as f32 >= w - || game.ball.position.x - game.ball.radius as f32 <= 0.0 - { - game.ball.speed.x *= -1.0; - } - if game.ball.position.y - game.ball.radius as f32 <= 0.0 { - game.ball.speed.y *= -1.0; - } - if game.ball.position.y + game.ball.radius as f32 >= h { - game.ball.speed = Vector2::default(); - game.ball.active = false; - game.player.life -= 1; - } - - // Collision logic: ball vs player - let r = Rectangle::new( - game.player.position.x - game.player.size.x / 2.0, - game.player.position.y - game.player.size.y / 2.0, - game.player.size.x, - game.player.size.y, - ); - if r.check_collision_circle_rec(game.ball.position, game.ball.radius as f32) { - if game.ball.speed.y > 0.0 { - game.ball.speed.y *= -1.0; - game.ball.speed.x = (game.ball.position.x - game.player.position.x) - / (game.player.size.x / 2.0) - * 5.0; - } - } - - // Collision logic: ball vs bricks - for i in 0..LINES_OF_BRICKS { - for j in 0..BRICKS_PER_LINE { - if game.bricks[i][j].active { - // Hit below - if (game.ball.position.y - game.ball.radius as f32 - <= game.bricks[i][j].position.y + game.brick_size.y / 2.0) - && (game.ball.position.y - game.ball.radius as f32 - > game.bricks[i][j].position.y - + game.brick_size.y / 2.0 - + game.ball.speed.y) - && ((game.ball.position.x - game.bricks[i][j].position.x).abs() - < game.brick_size.x / 2.0 + game.ball.radius as f32 * 2.0 / 3.0) - && game.ball.speed.y < 0.0 - { - game.bricks[i][j].active = false; - game.ball.speed.y *= -1.0; - } - // Hit above - else if game.ball.position.y + game.ball.radius as f32 - >= game.bricks[i][j].position.y - game.brick_size.y / 2.0 - && (game.ball.position.y + game.ball.radius as f32) - .partial_cmp( - &(game.bricks[i][j].position.y - game.brick_size.y / 2.0 - + game.ball.speed.y), - ) - .unwrap() - == std::cmp::Ordering::Less - && (game.ball.position.x - game.bricks[i][j].position.x).abs() - < game.brick_size.x / 2.0 + game.ball.radius as f32 * 2.0 / 3.0 - && game.ball.speed.y > 0.0 - { - game.bricks[i][j].active = false; - game.ball.speed.y *= -1.0; - } - // Hit Left - else if ((game.ball.position.x + game.ball.radius as f32) - >= (game.bricks[i][j].position.x - game.brick_size.x / 2.0)) - && ((game.ball.position.x + game.ball.radius as f32) - < (game.bricks[i][j].position.x - game.brick_size.x / 2.0 - + game.ball.speed.x)) - && (((game.ball.position.y - game.bricks[i][j].position.y).abs()) - < (game.brick_size.y / 2.0 + game.ball.radius as f32 * 2.0 / 3.0)) - && (game.ball.speed.x > 0.0) - { - game.bricks[i][j].active = false; - game.ball.speed.x *= -1.0; - } - // Hit right - else if ((game.ball.position.x - game.ball.radius as f32) - <= (game.bricks[i][j].position.x + game.brick_size.x / 2.0)) - && ((game.ball.position.x - game.ball.radius as f32) - > (game.bricks[i][j].position.x - + game.brick_size.x / 2.0 - + game.ball.speed.x)) - && (((game.ball.position.y - game.bricks[i][j].position.y).abs()) - < (game.brick_size.y / 2.0 + game.ball.radius as f32 * 2.0 / 3.0)) - && (game.ball.speed.x < 0.0) - { - game.bricks[i][j].active = false; - game.ball.speed.x *= -1.0; - } - } - } - } - - // Game over life - if game.player.life <= 0 { - game.game_over = true; - } else { - game.game_over = true; - for i in 0..LINES_OF_BRICKS { - for j in 0..BRICKS_PER_LINE { - if game.bricks[i][j].active { - game.game_over = false; - } - } - } - } - } - } else { - if rl.is_key_pressed(KEY_ENTER) { - init_game(game, rl); - game.game_over = false; - } - } -} - -fn draw_game(game: &Game, rl: &mut RaylibHandle, thread: &RaylibThread) { - let (w, h) = (rl.get_screen_width() as f32, rl.get_screen_height() as f32); - let mut d = rl.begin_drawing(thread); - d.clear_background(Color::RAYWHITE); - if !game.game_over { - // Draw player bar - d.draw_rectangle( - (game.player.position.x - game.player.size.x / 2.0) as i32, - (game.player.position.y - game.player.size.y / 2.0) as i32, - game.player.size.x as i32, - game.player.size.y as i32, - Color::BLACK, - ); - - // Draw player lives - for i in 0..game.player.life { - d.draw_rectangle(20 + 30 * i, h as i32 - 30, 35, 10, Color::LIGHTGRAY); - } - - // Draw ball - d.draw_circle_v(game.ball.position, game.ball.radius as f32, Color::MAROON); - - // Draw bricks - for i in 0..LINES_OF_BRICKS { - for j in 0..BRICKS_PER_LINE { - if game.bricks[i][j].active { - if (i + j) % 2 == 0 { - d.draw_rectangle( - (game.bricks[i][j].position.x - game.brick_size.x / 2.0) as i32, - (game.bricks[i][j].position.y - game.brick_size.y / 2.0) as i32, - game.brick_size.x as i32, - game.brick_size.y as i32, - Color::GRAY, - ); - } else { - d.draw_rectangle( - (game.bricks[i][j].position.x - game.brick_size.x / 2.0) as i32, - (game.bricks[i][j].position.y - game.brick_size.y / 2.0) as i32, - game.brick_size.x as i32, - game.brick_size.y as i32, - Color::DARKGRAY, - ); - } - } - } - } - - if game.pause { - d.draw_text( - "Game Pause", - (w / 2.0) as i32 - measure_text("Game Paused", 40) / 2, - (h / 2.0 - 40.0) as i32, - 40, - Color::GRAY, - ); - } - } else { - d.draw_text( - "PRESS [ENTER] TO PLAY AGAIN", - (w / 2.0) as i32 - measure_text("PRESS [ENTER] TO PLAY AGAIN", 20) / 2, - (h / 2.0) as i32 - 50, - 20, - Color::GRAY, - ); - } -} diff --git a/samples/asteroids.rs b/samples/asteroids.rs deleted file mode 100644 index b23861c2..00000000 --- a/samples/asteroids.rs +++ /dev/null @@ -1,563 +0,0 @@ -extern crate raylib; - -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -struct Game { - game_over: bool, - pause: bool, - victory: bool, - player: Player, - big_meteors: Vec, - medium_meteors: Vec, - small_meteors: Vec, - shots: Vec, - destroyed_meteor_count: u32, - medium_meteor_count: u32, - small_meteor_count: u32, -} - -#[derive(Default)] -struct Player { - position: Vector2, - speed: Vector2, - acceleration: f32, - rotation: f32, - collider: Vector3, - color: Color, -} - -#[derive(Default)] -struct Meteor { - position: Vector2, - speed: Vector2, - radius: f32, - active: bool, - color: Color, -} - -#[derive(Default)] -struct Shoot { - position: Vector2, - speed: Vector2, - radius: f32, - rotation: f32, - life_spawn: u8, - active: bool, - color: Color, -} - -impl Default for Game { - fn default() -> Game { - let game_over = false; - let pause = false; - let victory = false; - - let player = Player::default(); - let mut big_meteors = Vec::new(); - for _ in 0..MAX_BIG_METEORS { - big_meteors.push(Meteor::default()); - } - let mut medium_meteors = Vec::new(); - for _ in 0..MAX_MEDIUM_METEORS { - medium_meteors.push(Meteor::default()); - } - let mut small_meteors = Vec::new(); - for _ in 0..MAX_SMALL_METEORS { - small_meteors.push(Meteor::default()); - } - let mut shots = Vec::new(); - for _ in 0..MAX_SHOTS { - shots.push(Shoot::default()); - } - - let destroyed_meteor_count = 0; - let medium_meteor_count = 0; - let small_meteor_count = 0; - - Game { - game_over, - pause, - victory, - player, - big_meteors, - medium_meteors, - small_meteors, - shots, - destroyed_meteor_count, - medium_meteor_count, - small_meteor_count, - } - } -} - -const SHIP_HEIGHT : f32 = 10f32 / 0.363970f32; -const PLAYER_SPEED : f32 = 6f32; -const MAX_BIG_METEORS : usize = 4; -const MAX_MEDIUM_METEORS : usize = 8; -const MAX_SMALL_METEORS : usize = 16; -const METEORS_SPEED : f32 = 2f32; -const MAX_SHOTS : usize = 10; - -fn main() { - let opt = options::Opt::from_args(); - let (mut rl, thread) = opt.open_window("Asteroids"); - let (_w, _h) = (opt.width, opt.height); - - let _game_over = false; - let _pause = false; - - let mut game = Game::default(); - - init_game(&mut game, &rl); - - while !rl.window_should_close() { - update_game(&mut game, &rl); - draw_game(&game, &mut rl, &thread); - } -} - -fn init_game(game: &mut Game, rl: &RaylibHandle) { - let (width, height) = (rl.get_screen_width() as f32, rl.get_screen_height() as f32); - let half_width = width / 2.0; - let half_height = height / 2.0; - - game.player.position = Vector2::new(half_width, half_height - (SHIP_HEIGHT / 2f32)); - game.player.acceleration = 0f32; - game.player.collider = Vector3::new(game.player.position.x + game.player.rotation.to_radians().sin() * (SHIP_HEIGHT / 2.5), - game.player.position.y - game.player.rotation.to_radians().cos() * (SHIP_HEIGHT / 2.5), - 12f32); - game.player.color = Color::MAROON; - - game.destroyed_meteor_count = 0; - game.medium_meteor_count = 0; - game.small_meteor_count = 0; - - for shot in &mut game.shots { - shot.position = Vector2::default(); - shot.speed = Vector2::default(); - shot.radius = 2f32; - shot.active = false; - shot.life_spawn = 0; - shot.color = Color::BLACK; - } - - let mut correct_range = false; - - for meteor in &mut game.big_meteors { - let mut x: i32 = get_random_value(0, width as i32); - - while !correct_range { - if x > half_width as i32 - 150 && x < half_width as i32 + 150 { - x = get_random_value(0, width as i32); - } - else { - correct_range = true; - } - } - - correct_range = false; - - let mut y: i32 = get_random_value(0, height as i32); - - while !correct_range { - if y > half_height as i32 - 150 && y < half_height as i32 + 150 { - y = get_random_value(0, height as i32); - } - else { - correct_range = true; - } - } - - correct_range = false; - - let mut vel_x: i32 = get_random_value(-METEORS_SPEED as i32, METEORS_SPEED as i32); - let mut vel_y: i32 = get_random_value(-METEORS_SPEED as i32, METEORS_SPEED as i32); - - while !correct_range { - if vel_x == 0 && vel_y == 0 { - vel_x = get_random_value(-METEORS_SPEED as i32, METEORS_SPEED as i32); - vel_y = get_random_value(-METEORS_SPEED as i32, METEORS_SPEED as i32); - } - else { - correct_range = true; - } - } - - meteor.position = Vector2::new(x as f32, y as f32); - meteor.speed = Vector2::new(vel_x as f32, vel_y as f32); - meteor.radius = 40f32; - meteor.active = true; - meteor.color = Color::BLUE; - } - - for meteor in &mut game.medium_meteors { - meteor.position = Vector2::new(-100f32, -100f32); - meteor.speed = Vector2::default(); - meteor.radius = 20f32; - meteor.active = false; - meteor.color = Color::BLUE; - } - - for meteor in &mut game.small_meteors { - meteor.position = Vector2::new(-100f32, -100f32); - meteor.speed = Vector2::default(); - meteor.radius = 10f32; - meteor.active = false; - meteor.color = Color::BLUE; - } -} - -fn update_game(game: &mut Game, rl: &RaylibHandle) { - use raylib::consts::KeyboardKey::*; - if !game.game_over { - if rl.is_key_pressed(KEY_P) { - game.pause = !game.pause; - } - - if !game.pause { - if rl.is_key_down(KEY_LEFT) { - game.player.rotation -= 5f32; - } - if rl.is_key_down(KEY_RIGHT) { - game.player.rotation += 5f32; - } - - game.player.speed.x = game.player.rotation.to_radians().sin() * PLAYER_SPEED; - game.player.speed.y = game.player.rotation.to_radians().cos() * PLAYER_SPEED; - - if rl.is_key_down(KEY_UP) { - if game.player.acceleration < 1f32 { - game.player.acceleration += 0.04; - } - } - else { - if game.player.acceleration > 0f32 { - game.player.acceleration -= 0.02; - } - else if game.player.acceleration < 0f32 { - game.player.acceleration = 0f32; - } - } - - if rl.is_key_down(KEY_DOWN) { - if game.player.acceleration > 0f32 { - game.player.acceleration -= 0.04; - } - else if game.player.acceleration < 0f32 { - game.player.acceleration = 0f32; - } - } - - game.player.position.x += game.player.speed.x * game.player.acceleration; - game.player.position.y -= game.player.speed.y * game.player.acceleration; - - let (width, height) = (rl.get_screen_width() as f32, rl.get_screen_height() as f32); - - if game.player.position.x > width + SHIP_HEIGHT { - game.player.position.x = -SHIP_HEIGHT; - } - else if game.player.position.x < -SHIP_HEIGHT { - game.player.position.x = width + SHIP_HEIGHT; - } - - if game.player.position.y > height + SHIP_HEIGHT { - game.player.position.y = -SHIP_HEIGHT; - } - else if game.player.position.y < -SHIP_HEIGHT { - game.player.position.y = height + SHIP_HEIGHT; - } - - if rl.is_key_pressed(KEY_SPACE) { - for shot in &mut game.shots { - if !shot.active { - shot.position = Vector2::new(game.player.position.x + game.player.rotation.to_radians().sin() * SHIP_HEIGHT, - game.player.position.y - game.player.rotation.to_radians().cos() * SHIP_HEIGHT); - shot.active = true; - shot.speed.x = 1.5 * game.player.rotation.to_radians().sin() * PLAYER_SPEED; - shot.speed.y = 1.5 * game.player.rotation.to_radians().cos() * PLAYER_SPEED; - shot.rotation = game.player.rotation; - break; - } - } - } - - for shot in &mut game.shots { - if shot.active { - shot.life_spawn += 1; - - shot.position.x += shot.speed.x; - shot.position.y -= shot.speed.y; - - if shot.position.x > width + shot.radius { - shot.active = false; - shot.life_spawn = 0; - } - else if shot.position.x < -shot.radius { - shot.active = false; - shot.life_spawn = 0; - } - - if shot.position.y > height + shot.radius { - shot.active = false; - shot.life_spawn = 0; - } - else if shot.position.y < -shot.radius { - shot.active = false; - shot.life_spawn = 0; - } - - if shot.life_spawn >= 60 { - shot.position = Vector2::default(); - shot.speed = Vector2::default(); - shot.life_spawn = 0; - shot.active = false; - } - - for meteor in &mut game.big_meteors { - if meteor.active && - check_collision_circles(shot.position, shot.radius, meteor.position, meteor.radius) { - shot.active = false; - shot.life_spawn = 0; - - meteor.active = false; - game.destroyed_meteor_count += 1; - - for _ in 0..2 { - if game.medium_meteor_count % 2 == 0 { - game.medium_meteors[game.medium_meteor_count as usize].position = - Vector2::new(meteor.position.x, meteor.position.y); - game.medium_meteors[game.medium_meteor_count as usize].speed = - Vector2::new(shot.rotation.to_radians().cos() * METEORS_SPEED * -1.0, - shot.rotation.to_radians().sin() * METEORS_SPEED * -1.0); - } - else { - game.medium_meteors[game.medium_meteor_count as usize].position = - Vector2::new(meteor.position.x, meteor.position.y); - game.medium_meteors[game.medium_meteor_count as usize].speed = - Vector2::new(shot.rotation.to_radians().cos() * METEORS_SPEED, - shot.rotation.to_radians().sin() * METEORS_SPEED); - } - - game.medium_meteors[game.medium_meteor_count as usize].active = true; - game.medium_meteor_count += 1; - } - - break; - } - } - - for meteor in &mut game.medium_meteors { - if meteor.active && - check_collision_circles(shot.position, shot.radius, meteor.position, meteor.radius) { - shot.active = false; - shot.life_spawn = 0; - - meteor.active = false; - game.destroyed_meteor_count += 1; - - for _ in 0..2 { - if game.small_meteor_count % 2 == 0 { - game.small_meteors[game.small_meteor_count as usize].position = - Vector2::new(meteor.position.x, meteor.position.y); - game.small_meteors[game.small_meteor_count as usize].speed = - Vector2::new(shot.rotation.to_radians().cos() * METEORS_SPEED * -1.0, - shot.rotation.to_radians().sin() * METEORS_SPEED * -1.0); - } - else { - game.small_meteors[game.small_meteor_count as usize].position = - Vector2::new(meteor.position.x, meteor.position.y); - game.small_meteors[game.small_meteor_count as usize].speed = - Vector2::new(shot.rotation.to_radians().cos() * METEORS_SPEED, - shot.rotation.to_radians().sin() * METEORS_SPEED); - } - - game.small_meteors[game.small_meteor_count as usize].active = true; - game.small_meteor_count += 1; - } - - break; - } - } - - for meteor in &mut game.small_meteors { - if meteor.active && - check_collision_circles(shot.position, shot.radius, meteor.position, meteor.radius) { - shot.active = false; - shot.life_spawn = 0; - - meteor.active = false; - game.destroyed_meteor_count += 1; - - break; - } - } - } - } - - game.player.collider = Vector3::new(game.player.position.x + game.player.rotation.to_radians().sin() * (SHIP_HEIGHT / 2.5), - game.player.position.y - game.player.rotation.to_radians().cos() * (SHIP_HEIGHT / 2.5), - 12f32); - - for meteor in &game.big_meteors { - if meteor.active && check_collision_circles(Vector2::new(game.player.collider.x, game.player.collider.y), game.player.collider.z, - meteor.position, meteor.radius) { - game.game_over = true; - } - } - - for meteor in &game.medium_meteors { - if meteor.active && check_collision_circles(Vector2::new(game.player.collider.x, game.player.collider.y), game.player.collider.z, - meteor.position, meteor.radius) { - game.game_over = true; - } - } - - for meteor in &game.small_meteors { - if meteor.active && check_collision_circles(Vector2::new(game.player.collider.x, game.player.collider.y), game.player.collider.z, - meteor.position, meteor.radius) { - game.game_over = true; - } - } - - for meteor in &mut game.big_meteors { - if meteor.active { - meteor.position.x += meteor.speed.x; - meteor.position.y += meteor.speed.y; - - if meteor.position.x > width + meteor.radius { - meteor.position.x = -meteor.radius; - } - else if meteor.position.x < 0f32 - meteor.radius { - meteor.position.x = width + meteor.radius; - } - - if meteor.position.y > height + meteor.radius { - meteor.position.y = -meteor.radius; - } - else if meteor.position.y < 0f32 - meteor.radius { - meteor.position.y = height + meteor.radius; - } - } - } - - for meteor in &mut game.medium_meteors { - if meteor.active { - meteor.position.x += meteor.speed.x; - meteor.position.y += meteor.speed.y; - - if meteor.position.x > width + meteor.radius { - meteor.position.x = -meteor.radius; - } - else if meteor.position.x < 0f32 - meteor.radius { - meteor.position.x = width + meteor.radius; - } - - if meteor.position.y > height + meteor.radius { - meteor.position.y = -meteor.radius; - } - else if meteor.position.y < 0f32 - meteor.radius { - meteor.position.y = height + meteor.radius; - } - } - } - - for meteor in &mut game.small_meteors { - if meteor.active { - meteor.position.x += meteor.speed.x; - meteor.position.y += meteor.speed.y; - - if meteor.position.x > width + meteor.radius { - meteor.position.x = -meteor.radius; - } - else if meteor.position.x < 0f32 - meteor.radius { - meteor.position.x = width + meteor.radius; - } - - if meteor.position.y > height + meteor.radius { - meteor.position.y = -meteor.radius; - } - else if meteor.position.y < 0f32 - meteor.radius { - meteor.position.y = height + meteor.radius; - } - } - } - } - - if game.destroyed_meteor_count == MAX_BIG_METEORS as u32 + MAX_MEDIUM_METEORS as u32 + MAX_SMALL_METEORS as u32 { - game.victory = true; - } - } - else { - if rl.is_key_pressed(KEY_ENTER) { - init_game(game, rl); - game.game_over = false; - } - } -} - -fn draw_game(game: &Game, rl: &mut RaylibHandle, thread: &RaylibThread) { - let (width, height) = (rl.get_screen_width() as i32, rl.get_screen_height() as i32); - let mut d = rl.begin_drawing(thread); - - let half_width = width / 2; - let half_height = height / 2; - - d.clear_background(Color::RAYWHITE); - - if !game.game_over { - let cosf = f32::cos(game.player.rotation.to_radians()); - let sinf = f32::sin(game.player.rotation.to_radians()); - let v1 = Vector2::new(game.player.position.x + sinf * SHIP_HEIGHT,game.player.position.y - cosf * SHIP_HEIGHT); - let v2 = Vector2::new(game.player.position.x - cosf * 10f32, game.player.position.y - sinf * 10f32); - let v3 = Vector2::new(game.player.position.x + cosf * 10f32, game.player.position.y + sinf * 10f32); - d.draw_triangle(v1, v2, v3, game.player.color); - - for meteor in &game.big_meteors { - if meteor.active { - d.draw_circle_v(meteor.position, meteor.radius, meteor.color); - } - else { - d.draw_circle_v(meteor.position, meteor.radius, Color::fade(&Color::LIGHTGRAY, 0.3)); - } - } - - for meteor in &game.medium_meteors { - if meteor.active { - d.draw_circle_v(meteor.position, meteor.radius, meteor.color); - } - else { - d.draw_circle_v(meteor.position, meteor.radius, Color::fade(&Color::LIGHTGRAY, 0.3)); - } - } - - for meteor in &game.small_meteors { - if meteor.active { - d.draw_circle_v(meteor.position, meteor.radius, meteor.color); - } - else { - d.draw_circle_v(meteor.position, meteor.radius, Color::fade(&Color::LIGHTGRAY, 0.3)); - } - } - - for shot in &game.shots { - if shot.active { - d.draw_circle_v(shot.position, shot.radius, shot.color); - } - } - - if game.victory { - d.draw_text("VICTORY", half_width - measure_text("VICTORY", 20), half_height, 20, Color::LIGHTGRAY); - } - - if game.pause { - d.draw_text("GAME PAUSED", half_width - measure_text("GAME PAUSED", 40), half_height - 40, 40, Color::GRAY); - } - } - else { - d.draw_text("PRESS [ENTER] TO PLAY AGAIN", half_width - measure_text("PRESS [ENTER] TO PLAY AGAIN", 20), half_height - 50, 20, Color::GRAY); - } - -} diff --git a/samples/camera2D.rs b/samples/camera2D.rs deleted file mode 100644 index 1eb69587..00000000 --- a/samples/camera2D.rs +++ /dev/null @@ -1,126 +0,0 @@ -#![allow(non_snake_case)] -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -const MAX_BUILDINGS: usize = 100; - -fn main() { - use raylib::consts::KeyboardKey::*; - let opt = options::Opt::from_args(); - let (mut rl, thread) = opt.open_window("Camera 2D"); - let (w, h) = (opt.width, opt.height); - - let mut player = Rectangle::new(400.0, 280.0, 40.0, 40.0); - let mut buildings = Vec::with_capacity(MAX_BUILDINGS); - let mut build_colors = Vec::with_capacity(MAX_BUILDINGS); - let mut spacing = 0.0; - - for i in 0..MAX_BUILDINGS { - let bh: i32 = get_random_value(100, 800); - buildings.push(Rectangle::new( - -6000.0 + spacing, - (h - 130 - bh) as f32, - get_random_value::(50, 200) as f32, - bh as f32, - )); - - spacing += buildings[i].width; - build_colors.push(Color::new( - get_random_value::(200, 240) as u8, - get_random_value::(200, 240) as u8, - get_random_value::(200, 240) as u8, - 255, - )); - } - - let mut camera = Camera2D { - target: Vector2::new(player.x + 20.0, player.y + 20.0), - // offset: Vector2::new(player.x, player.y), - offset: Vector2::new(0.0, 0.0), - rotation: 0.0, - zoom: 1.0, - }; - - while !rl.window_should_close() { - if rl.is_key_down(KEY_RIGHT) { - player.x += 2.0; - camera.offset.x -= 2.0; - } else if rl.is_key_down(KEY_LEFT) { - player.x -= 2.0; - camera.offset.x += 2.0; - } - - // Camera follows player - camera.target = Vector2::new(player.x + 20.0, player.y + 20.0); - - // Camera rotation controls - if rl.is_key_down(KEY_A) { - camera.rotation -= 1.0; - } else if rl.is_key_down(KEY_S) { - camera.rotation += 1.0; - } - - // Limit camera rotation to 80 degrees - camera.rotation = camera.rotation.max(-40.0).min(40.0); - - // zoom controls - camera.zoom += rl.get_mouse_wheel_move() as f32 * 0.05; - camera.zoom = camera.zoom.max(0.1).min(3.0); - - if rl.is_key_pressed(KEY_R) { - camera.zoom = 1.0; - camera.rotation = 0.0; - } - - let mut d = rl.begin_drawing(&thread); - d.clear_background(Color::RAYWHITE); - { - let mut d2 = d.begin_mode2D(camera); - d2.draw_rectangle(-6000, 320, 13000, 8000, Color::DARKGRAY); - - for i in 0..MAX_BUILDINGS { - d2.draw_rectangle_rec(&buildings[i], build_colors[i]); - } - d2.draw_rectangle_rec(&player, Color::RED); - - d2.draw_line( - camera.target.x as i32, - -h * 10, - camera.target.x as i32, - h * 10, - Color::GREEN, - ); - d2.draw_line( - -w * 10, - camera.target.y as i32, - w * 10, - camera.target.y as i32, - Color::GREEN, - ); - } - - d.draw_text("SCREEN AREA", 640, 10, 20, Color::RED); - - d.draw_rectangle(0, 0, w, 5, Color::RED); - d.draw_rectangle(0, 5, 5, h - 10, Color::RED); - d.draw_rectangle(w - 5, 5, 5, h - 10, Color::RED); - d.draw_rectangle(0, h - 5, w, 5, Color::RED); - - d.draw_rectangle(10, 10, 250, 113, Color::SKYBLUE.fade(0.5)); - d.draw_rectangle_lines(10, 10, 250, 113, Color::BLUE); - - d.draw_text("Free 2d camera controls:", 20, 20, 10, Color::BLACK); - d.draw_text("- Right/Left to move Offset", 40, 40, 10, Color::DARKGRAY); - d.draw_text("- Mouse Wheel to Zoom in-out", 40, 60, 10, Color::DARKGRAY); - d.draw_text("- A / S to Rotate", 40, 80, 10, Color::DARKGRAY); - d.draw_text( - "- R to reset Zoom and Rotation", - 40, - 100, - 10, - Color::DARKGRAY, - ); - } -} diff --git a/samples/docs/3d_camera_first_person.PNG b/samples/docs/3d_camera_first_person.PNG deleted file mode 100644 index 89235fc6..00000000 Binary files a/samples/docs/3d_camera_first_person.PNG and /dev/null differ diff --git a/samples/docs/arkanoid.PNG b/samples/docs/arkanoid.PNG deleted file mode 100644 index 405ab5ae..00000000 Binary files a/samples/docs/arkanoid.PNG and /dev/null differ diff --git a/samples/docs/camera2D.PNG b/samples/docs/camera2D.PNG deleted file mode 100644 index 1dac3612..00000000 Binary files a/samples/docs/camera2D.PNG and /dev/null differ diff --git a/samples/docs/font.PNG b/samples/docs/font.PNG deleted file mode 100644 index 3ff79cbf..00000000 Binary files a/samples/docs/font.PNG and /dev/null differ diff --git a/samples/docs/logo.PNG b/samples/docs/logo.PNG deleted file mode 100644 index 413d6dd9..00000000 Binary files a/samples/docs/logo.PNG and /dev/null differ diff --git a/samples/docs/model_shader.PNG b/samples/docs/model_shader.PNG deleted file mode 100644 index bb1cfd24..00000000 Binary files a/samples/docs/model_shader.PNG and /dev/null differ diff --git a/samples/docs/raymarch.PNG b/samples/docs/raymarch.PNG deleted file mode 100644 index ed7a843f..00000000 Binary files a/samples/docs/raymarch.PNG and /dev/null differ diff --git a/samples/docs/rgui.PNG b/samples/docs/rgui.PNG deleted file mode 100644 index b1ca30f6..00000000 Binary files a/samples/docs/rgui.PNG and /dev/null differ diff --git a/samples/docs/roguelike.PNG b/samples/docs/roguelike.PNG deleted file mode 100644 index 33a54344..00000000 Binary files a/samples/docs/roguelike.PNG and /dev/null differ diff --git a/samples/docs/specs.PNG b/samples/docs/specs.PNG deleted file mode 100644 index 3c06fc08..00000000 Binary files a/samples/docs/specs.PNG and /dev/null differ diff --git a/samples/docs/texture.PNG b/samples/docs/texture.PNG deleted file mode 100644 index 8834f08d..00000000 Binary files a/samples/docs/texture.PNG and /dev/null differ diff --git a/samples/docs/yaw_pitch_roll.PNG b/samples/docs/yaw_pitch_roll.PNG deleted file mode 100644 index ff8a76a5..00000000 Binary files a/samples/docs/yaw_pitch_roll.PNG and /dev/null differ diff --git a/samples/drop.rs b/samples/drop.rs deleted file mode 100644 index 07c9bce0..00000000 --- a/samples/drop.rs +++ /dev/null @@ -1,100 +0,0 @@ -extern crate raylib; -use raylib::prelude::*; -use std::{thread, time}; -use structopt::StructOpt; - -mod options; - -fn main() { - let opt = options::Opt::from_args(); - test_rslice(&opt); - test_shader_dropping(&opt); - test_model_dropping(&opt); - test_audio_dropping(&opt); - test_font_dropping(&opt); -} - -fn test_rslice(opt: &options::Opt) { - let (mut rl, thread) = opt.open_window("Drop Allocs"); - let img = Image::gen_image_color(256, 256, Color::RED); - let pallet = img.extract_palette(16); -} - -/// Checks that shader files are droppable after window is closed -fn test_shader_dropping(opt: &options::Opt) { - let _ten_millis = time::Duration::from_millis(10); - let _v = { - let (mut rl, thread) = opt.open_window("Drop Shader"); - rl.load_shader(&thread, None, Some("static/shader/pbr.fs")) - .expect("shader didn't load") - }; -} - -/// Checks that model files are droppable after window is closed -fn test_model_dropping(opt: &options::Opt) { - let ten_millis = time::Duration::from_millis(10); - let _m = { - let (mut rl, thread) = opt.open_window("Drop Model"); - rl.load_model(&thread, "static/pbr/trooper.obj") - .expect("couldn't load model"); - }; - thread::sleep(ten_millis); - // Uncomment when we have actual meshes to unload - // let mesh = { - // let (_rl, thread) = opt.open_window("Drop Mesh"); - // Mesh::load_meshes(&thread, "static/pbr/trooper.obj").expect("couldn't load mesh"); - // }; - let _anim = { - let (mut rl, thread) = opt.open_window("Drop Anim"); - rl.load_model_animations(&thread, "static/guy/guy.iqm") - .expect("couldn't load model"); - }; - - thread::sleep(ten_millis); -} - -/// Checks that audio files are droppable after window is closed -fn test_audio_dropping(opt: &options::Opt) { - let ten_millis = time::Duration::from_millis(10); - let w = { - let (_, _thread) = raylib::init() - .size(opt.width, opt.height) - .title("Drop") - .build(); - Wave::load_wave("static/wave.ogg").expect("couldn't load wave") - }; - thread::sleep(ten_millis); - let _s = { - let (_rl, _thread) = opt.open_window("Drop Sound"); - Sound::load_sound("static/wave.ogg").expect("couldn't load wave") - }; - thread::sleep(ten_millis); - - let _samples = w.load_wave_samples(); - thread::sleep(ten_millis); - - // Broken on mac - // let m = { - // let (_rl, thread) = opt.open_window("Drop Sound"); - // // let m = Music::load_music_stream(&thread, "static/wave.ogg"); - // let m = Music::load_music_stream(&thread, "static/wave.ogg").expect("couldn't load music"); - // println!("music {:?}", m); - // drop(m); - // () - // }; - // thread::sleep(ten_millis); -} - -/// checks that fonts can be dropped after window is closed -fn test_font_dropping(opt: &options::Opt) { - let _f = { - let (mut rl, thread) = raylib::init() - .size(opt.width, opt.height) - .title("Drop") - .build(); - rl.load_font(&thread, "static/alagard.png") - .expect("couldn't load font"); - }; - let ten_millis = time::Duration::from_millis(10); - thread::sleep(ten_millis); -} diff --git a/samples/extensions.rs b/samples/extensions.rs deleted file mode 100644 index 142a1ef5..00000000 --- a/samples/extensions.rs +++ /dev/null @@ -1,25 +0,0 @@ -extern crate raylib; -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -trait RaylibDrawExt: RaylibDraw { - fn custom_draw(&mut self, font: &WeakFont) { - self.draw_text_ex(font, "custom", rvec2(0, 0), 16.0, 0.0, Color::GREEN); - } -} - -impl RaylibDrawExt for T where T: RaylibDraw {} - -fn main() { - let opt = options::Opt::from_args(); - let (mut rl, thread) = opt.open_window("Logo"); - let font = rl.get_font_default(); - while !rl.window_should_close() { - // Detect window close button or ESC key - let mut d = rl.begin_drawing(&thread); - d.clear_background(Color::WHITE); - d.custom_draw(&font); - } -} diff --git a/samples/font.rs b/samples/font.rs deleted file mode 100644 index 2b093f33..00000000 --- a/samples/font.rs +++ /dev/null @@ -1,38 +0,0 @@ -extern crate raylib; -use raylib::prelude::*; - -fn main() { - let w = 800; - let h = 450; - let rust_orange = Color::new(222, 165, 132, 255); - let ray_white = Color::new(255, 255, 255, 255); - let (mut rl, thread) = raylib::init().size(w, h).title("Logo").build(); - rl.set_target_fps(60); - let font = rl - .load_font(&thread, "static/alagard.png") - .expect("couldn't load font"); - while !rl.window_should_close() { - // Detect window close button or ESC key - let mut d = rl.begin_drawing(&thread); - d.clear_background(ray_white); - d.draw_rectangle(w / 2 - 128, h / 2 - 128, 256, 256, rust_orange); - d.draw_rectangle(w / 2 - 112, h / 2 - 112, 224, 224, ray_white); - d.draw_text_ex( - &font, - "rust", - Vector2::new((w / 2 - 69) as f32, (h / 2 + 18) as f32), - 50.0, - 1.0, - rust_orange, - ); - d.draw_text_ex( - &font, - "raylib", - Vector2::new((w / 2 - 44) as f32, (h / 2 + 48) as f32), - 50.0, - 1.0, - rust_orange, - ); - // rl.take_screenshot(&thread, "logo.png"); - } -} diff --git a/samples/input.rs b/samples/input.rs deleted file mode 100644 index c2e58150..00000000 --- a/samples/input.rs +++ /dev/null @@ -1,25 +0,0 @@ -extern crate raylib; -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -fn main() { - let opt = options::Opt::from_args(); - let (mut rl, thread) = opt.open_window("Input"); - let (_w, _h) = (opt.width, opt.height); - let _rust_orange = Color::new(222, 165, 132, 255); - let _ray_white = Color::new(255, 255, 255, 255); - - rl.set_target_fps(60); - while !rl.window_should_close() { - let pressed_key = rl.get_key_pressed(); - let mut d = rl.begin_drawing(&thread); - d.clear_background(Color::WHITE); - if let Some(pressed_key) = pressed_key { - // Certain keyboards may have keys raylib does not expect. Uncomment this line if so. - // let pressed_key: u32 = unsafe { std::mem::transmute(pressed_key) }; - d.draw_text(&format!("{:?}", pressed_key), 100, 12, 10, Color::BLACK); - } - } -} diff --git a/samples/logo.rs b/samples/logo.rs deleted file mode 100644 index 6f21798e..00000000 --- a/samples/logo.rs +++ /dev/null @@ -1,24 +0,0 @@ -extern crate raylib; -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -fn main() { - let opt = options::Opt::from_args(); - let (mut rl, thread) = opt.open_window("Logo"); - let (w, h) = (opt.width, opt.height); - let rust_orange = Color::new(222, 165, 132, 255); - let ray_white = Color::new(255, 255, 255, 255); - - rl.set_target_fps(60); - while !rl.window_should_close() { - // Detect window close button or ESC key - let mut d = rl.begin_drawing(&thread); - d.clear_background(ray_white); - d.draw_rectangle(w / 2 - 128, h / 2 - 128, 256, 256, rust_orange); - d.draw_rectangle(w / 2 - 112, h / 2 - 112, 224, 224, ray_white); - d.draw_text("rust", w / 2 - 69, h / 2 + 18, 50, rust_orange); - d.draw_text("raylib", w / 2 - 44, h / 2 + 48, 50, rust_orange); - } -} diff --git a/samples/model_shader.rs b/samples/model_shader.rs deleted file mode 100644 index 075be706..00000000 --- a/samples/model_shader.rs +++ /dev/null @@ -1,73 +0,0 @@ -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -fn main() { - let opt = options::Opt::from_args(); - let (mut rl, thread) = opt.open_window("Model shader example"); - let (w, h) = (opt.width, opt.height); - - let mut camera = Camera3D::perspective( - Vector3::new(4.0, 4.0, 4.0), // Position - Vector3::new(0.0, 1.0, -1.0), // Target - Vector3::new(0.0, 1.0, 0.0), // Up vector - 45.0, // FOV - ); - - rl.set_camera_mode(&camera, CameraMode::CAMERA_FREE); - rl.set_target_fps(60); - - // Load shader - let shader = rl - .load_shader(&thread, None, Some("static/model_shader/grayscale.fs")) - .unwrap(); - - // Load model - let mut model = rl - .load_model(&thread, "static/model_shader/watermill.obj") - .unwrap(); - - // Load texture and generate mipmaps - let texture = unsafe { - let mut t = rl - .load_texture(&thread, "static/model_shader/watermill_diffuse.png") - .unwrap(); - t.gen_texture_mipmaps(); - t.unwrap() - }; - - let materials = model.materials_mut(); - let material = &mut materials[0]; - - // Assign shader to model materials - material.shader = *shader.as_ref(); - - // Assign loaded texture to material albedo map - let maps = material.maps_mut(); - maps[MaterialMapIndex::MATERIAL_MAP_ALBEDO as usize].texture = texture; - - let model_position = Vector3::new(0.0, 0.0, 0.0); - - while !rl.window_should_close() { - rl.update_camera(&mut camera); - - let mut drawing = rl.begin_drawing(&thread); - drawing.clear_background(Color::WHITE); - { - let mut mode_3d = drawing.begin_mode3D(camera); - - mode_3d.draw_model(&model, model_position, 0.2, Color::WHITE); - mode_3d.draw_grid(10, 1.0); - } - - drawing.draw_text( - "(c) Watermill 3D model by Alberto Cano", - w - 210, - h - 20, - 10, - Color::GRAY, - ); - drawing.draw_fps(10, 10) - } -} diff --git a/samples/options.rs b/samples/options.rs deleted file mode 100644 index 2f9e26d4..00000000 --- a/samples/options.rs +++ /dev/null @@ -1,32 +0,0 @@ -// #[macro_use] -// extern crate structopt; - -pub use structopt::StructOpt; - -#[derive(Debug, StructOpt)] -#[structopt(name = "example", about = "An example of StructOpt usage.")] -pub struct Opt { - #[structopt(short = "w", long = "width", default_value = "800")] - pub width: i32, - #[structopt(short = "h", long = "height", default_value = "450")] - pub height: i32, - #[structopt(long = "fps", default_value = "60")] - pub fps: u32, -} - -impl Opt { - #[allow(dead_code)] - pub fn new() -> Self { - Opt::from_args() - } - pub fn open_window(&self, name: &str) -> (raylib::RaylibHandle, raylib::RaylibThread) { - let (mut rl, thread) = raylib::init() - .size(self.width, self.height) - .title(name) - .build(); - let logo = raylib::prelude::Image::load_image("static/logo.png").unwrap(); - rl.set_window_icon(&logo); - rl.set_target_fps(self.fps); - (rl, thread) - } -} diff --git a/samples/raylib.h b/samples/raylib.h deleted file mode 100644 index 9caafef5..00000000 --- a/samples/raylib.h +++ /dev/null @@ -1,1488 +0,0 @@ -/********************************************************************************************** -* -* raylib - A simple and easy-to-use library to enjoy videogames programming (www.raylib.com) -* -* FEATURES: -* - NO external dependencies, all required libraries included with raylib -* - Multiplatform: Windows, Linux, FreeBSD, OpenBSD, NetBSD, DragonFly, MacOS, UWP, Android, Raspberry Pi, HTML5. -* - Written in plain C code (C99) in PascalCase/camelCase notation -* - Hardware accelerated with OpenGL (1.1, 2.1, 3.3 or ES2 - choose at compile) -* - Unique OpenGL abstraction layer (usable as standalone module): [rlgl] -* - Powerful fonts module (XNA SpriteFonts, BMFonts, TTF) -* - Outstanding texture formats support, including compressed formats (DXT, ETC, ASTC) -* - Full 3d support for 3d Shapes, Models, Billboards, Heightmaps and more! -* - Flexible Materials system, supporting classic maps and PBR maps -* - Skeletal Animation support (CPU bones-based animation) -* - Shaders support, including Model shaders and Postprocessing shaders -* - Powerful math module for Vector, Matrix and Quaternion operations: [raymath] -* - Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD) -* - VR stereo rendering with configurable HMD device parameters -* - Bindings to multiple programming languages available! -* -* NOTES: -* One custom font is loaded by default when InitWindow() [core] -* If using OpenGL 3.3 or ES2, one default shader is loaded automatically (internally defined) [rlgl] -* If using OpenGL 3.3 or ES2, several vertex buffers (VAO/VBO) are created to manage lines-triangles-quads -* -* DEPENDENCIES (included): -* [core] rglfw (github.com/glfw/glfw) for window/context management and input (only PLATFORM_DESKTOP) -* [rlgl] glad (github.com/Dav1dde/glad) for OpenGL 3.3 extensions loading (only PLATFORM_DESKTOP) -* [raudio] miniaudio (github.com/dr-soft/miniaudio) for audio device/context management -* -* OPTIONAL DEPENDENCIES (included): -* [core] rgif (Charlie Tangora, Ramon Santamaria) for GIF recording -* [textures] stb_image (Sean Barret) for images loading (BMP, TGA, PNG, JPEG, HDR...) -* [textures] stb_image_write (Sean Barret) for image writting (BMP, TGA, PNG, JPG) -* [textures] stb_image_resize (Sean Barret) for image resizing algorythms -* [textures] stb_perlin (Sean Barret) for Perlin noise image generation -* [text] stb_truetype (Sean Barret) for ttf fonts loading -* [text] stb_rect_pack (Sean Barret) for rectangles packing -* [models] par_shapes (Philip Rideout) for parametric 3d shapes generation -* [models] tinyobj_loader_c (Syoyo Fujita) for models loading (OBJ, MTL) -* [models] cgltf (Johannes Kuhlmann) for models loading (glTF) -* [raudio] stb_vorbis (Sean Barret) for OGG audio loading -* [raudio] dr_flac (David Reid) for FLAC audio file loading -* [raudio] dr_mp3 (David Reid) for MP3 audio file loading -* [raudio] jar_xm (Joshua Reisenauer) for XM audio module loading -* [raudio] jar_mod (Joshua Reisenauer) for MOD audio module loading -* -* -* LICENSE: zlib/libpng -* -* raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, -* BSD-like license that allows static linking with closed source software: -* -* Copyright (c) 2013-2019 Ramon Santamaria (@raysan5) -* -* This software is provided "as-is", without any express or implied warranty. In no event -* will the authors be held liable for any damages arising from the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, including commercial -* applications, and to alter it and redistribute it freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not claim that you -* wrote the original software. If you use this software in a product, an acknowledgment -* in the product documentation would be appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be misrepresented -* as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -**********************************************************************************************/ - -#ifndef RAYLIB_H -#define RAYLIB_H - -#include // Required for: va_list - Only used by TraceLogCallback - -#if defined(_WIN32) && defined(BUILD_LIBTYPE_SHARED) -#define RLAPI __declspec(dllexport) // We are building raylib as a Win32 shared library (.dll) -#elif defined(_WIN32) && defined(USE_LIBTYPE_SHARED) -#define RLAPI __declspec(dllimport) // We are using raylib as a Win32 shared library (.dll) -#else -#define RLAPI // We are building or using raylib as a static library (or Linux shared library) -#endif - -//---------------------------------------------------------------------------------- -// Some basic Defines -//---------------------------------------------------------------------------------- -#ifndef PI -#define PI 3.14159265358979323846f -#endif - -#define DEG2RAD (PI / 180.0f) -#define RAD2DEG (180.0f / PI) - -#define MAX_TOUCH_POINTS 10 // Maximum number of touch points supported - -// Shader and material limits -#define MAX_SHADER_LOCATIONS 32 // Maximum number of predefined locations stored in shader struct -#define MAX_MATERIAL_MAPS 12 // Maximum number of texture maps stored in shader struct - -// Allow custom memory allocators -#ifndef RL_MALLOC -#define RL_MALLOC(sz) malloc(sz) -#endif -#ifndef RL_CALLOC -#define RL_CALLOC(n, sz) calloc(n, sz) -#endif -#ifndef RL_FREE -#define RL_FREE(p) free(p) -#endif - -// NOTE: MSC C++ compiler does not support compound literals (C99 feature) -// Plain structures in C++ (without constructors) can be initialized from { } initializers. -#if defined(__cplusplus) -#define CLITERAL -#else -#define CLITERAL (Color) -#endif - -// Some Basic Colors -// NOTE: Custom raylib color palette for amazing visuals on WHITE background -#define LIGHTGRAY \ - CLITERAL { 200, 200, 200, 255 } // Light Gray -#define GRAY \ - CLITERAL { 130, 130, 130, 255 } // Gray -#define DARKGRAY \ - CLITERAL { 80, 80, 80, 255 } // Dark Gray -#define YELLOW \ - CLITERAL { 253, 249, 0, 255 } // Yellow -#define GOLD \ - CLITERAL { 255, 203, 0, 255 } // Gold -#define ORANGE \ - CLITERAL { 255, 161, 0, 255 } // Orange -#define PINK \ - CLITERAL { 255, 109, 194, 255 } // Pink -#define RED \ - CLITERAL { 230, 41, 55, 255 } // Red -#define MAROON \ - CLITERAL { 190, 33, 55, 255 } // Maroon -#define GREEN \ - CLITERAL { 0, 228, 48, 255 } // Green -#define LIME \ - CLITERAL { 0, 158, 47, 255 } // Lime -#define DARKGREEN \ - CLITERAL { 0, 117, 44, 255 } // Dark Green -#define SKYBLUE \ - CLITERAL { 102, 191, 255, 255 } // Sky Blue -#define BLUE \ - CLITERAL { 0, 121, 241, 255 } // Blue -#define DARKBLUE \ - CLITERAL { 0, 82, 172, 255 } // Dark Blue -#define PURPLE \ - CLITERAL { 200, 122, 255, 255 } // Purple -#define VIOLET \ - CLITERAL { 135, 60, 190, 255 } // Violet -#define DARKPURPLE \ - CLITERAL { 112, 31, 126, 255 } // Dark Purple -#define BEIGE \ - CLITERAL { 211, 176, 131, 255 } // Beige -#define BROWN \ - CLITERAL { 127, 106, 79, 255 } // Brown -#define DARKBROWN \ - CLITERAL { 76, 63, 47, 255 } // Dark Brown - -#define WHITE \ - CLITERAL { 255, 255, 255, 255 } // White -#define BLACK \ - CLITERAL { 0, 0, 0, 255 } // Black -#define BLANK \ - CLITERAL { 0, 0, 0, 0 } // Blank (Transparent) -#define MAGENTA \ - CLITERAL { 255, 0, 255, 255 } // Magenta -#define RAYWHITE \ - CLITERAL { 245, 245, 245, 255 } // My own White (raylib logo) - -// Temporal hack to avoid breaking old codebases using -// deprecated raylib implementation of these functions -#define FormatText TextFormat -#define SubText TextSubtext -#define ShowWindow UnhideWindow - -//---------------------------------------------------------------------------------- -// Structures Definition -//---------------------------------------------------------------------------------- -// Boolean type -// MODIFIED FOR RAYLIB-RUST FORCE USAGE OF STANDARD BOOL TYPE -#if defined(__STDC__) && __STDC_VERSION__ >= 199901L -#include -#elif !defined(__cplusplus) && !defined(bool) -typedef enum -{ - false, - true -} bool; -#endif - -// Vector2 type -typedef struct Vector2 -{ - float x; - float y; -} Vector2; - -// Vector3 type -typedef struct Vector3 -{ - float x; - float y; - float z; -} Vector3; - -// Vector4 type -typedef struct Vector4 -{ - float x; - float y; - float z; - float w; -} Vector4; - -// Quaternion type, same as Vector4 -typedef Vector4 Quaternion; - -// Matrix type (OpenGL style 4x4 - right handed, column major) -typedef struct Matrix -{ - float m0, m4, m8, m12; - float m1, m5, m9, m13; - float m2, m6, m10, m14; - float m3, m7, m11, m15; -} Matrix; - -// Color type, RGBA (32bit) -typedef struct Color -{ - unsigned char r; - unsigned char g; - unsigned char b; - unsigned char a; -} Color; - -// Rectangle type -typedef struct Rectangle -{ - float x; - float y; - float width; - float height; -} Rectangle; - -// Image type, bpp always RGBA (32bit) -// NOTE: Data stored in CPU memory (RAM) -typedef struct Image -{ - void *data; // Image raw data - int width; // Image base width - int height; // Image base height - int mipmaps; // Mipmap levels, 1 by default - int format; // Data format (PixelFormat type) -} Image; - -// Texture2D type -// NOTE: Data stored in GPU memory -typedef struct Texture2D -{ - unsigned int id; // OpenGL texture id - int width; // Texture base width - int height; // Texture base height - int mipmaps; // Mipmap levels, 1 by default - int format; // Data format (PixelFormat type) -} Texture2D; - -// Texture type, same as Texture2D -typedef Texture2D Texture; - -// TextureCubemap type, actually, same as Texture2D -typedef Texture2D TextureCubemap; - -// RenderTexture2D type, for texture rendering -typedef struct RenderTexture2D -{ - unsigned int id; // OpenGL Framebuffer Object (FBO) id - Texture2D texture; // Color buffer attachment texture - Texture2D depth; // Depth buffer attachment texture - bool depthTexture; // Track if depth attachment is a texture or renderbuffer -} RenderTexture2D; - -// RenderTexture type, same as RenderTexture2D -typedef RenderTexture2D RenderTexture; - -// N-Patch layout info -typedef struct NPatchInfo -{ - Rectangle sourceRec; // Region in the texture - int left; // left border offset - int top; // top border offset - int right; // right border offset - int bottom; // bottom border offset - int type; // layout of the n-patch: 3x3, 1x3 or 3x1 -} NPatchInfo; - -// Font character info -typedef struct CharInfo -{ - int value; // Character value (Unicode) - Rectangle rec; // Character rectangle in sprite font - int offsetX; // Character offset X when drawing - int offsetY; // Character offset Y when drawing - int advanceX; // Character advance position X - unsigned char *data; // Character pixel data (grayscale) -} CharInfo; - -// Font type, includes texture and charSet array data -typedef struct Font -{ - Texture2D texture; // Font texture - int baseSize; // Base size (default chars height) - int charsCount; // Number of characters - CharInfo *chars; // Characters info data -} Font; - -#define SpriteFont Font // SpriteFont type fallback, defaults to Font - -// Camera type, defines a camera position/orientation in 3d space -typedef struct Camera3D -{ - Vector3 position; // Camera position - Vector3 target; // Camera target it looks-at - Vector3 up; // Camera up vector (rotation over its axis) - float fovy; // Camera field-of-view apperture in Y (degrees) in perspective, used as near plane width in orthographic - int type; // Camera type, defines projection type: CAMERA_PERSPECTIVE or CAMERA_ORTHOGRAPHIC -} Camera3D; - -typedef Camera3D Camera; // Camera type fallback, defaults to Camera3D - -// Camera2D type, defines a 2d camera -typedef struct Camera2D -{ - Vector2 offset; // Camera offset (displacement from target) - Vector2 target; // Camera target (rotation and zoom origin) - float rotation; // Camera rotation in degrees - float zoom; // Camera zoom (scaling), should be 1.0f by default -} Camera2D; - -// Vertex data definning a mesh -// NOTE: Data stored in CPU memory (and GPU) -typedef struct Mesh -{ - int vertexCount; // Number of vertices stored in arrays - int triangleCount; // Number of triangles stored (indexed or not) - - // Default vertex data - float *vertices; // Vertex position (XYZ - 3 components per vertex) (shader-location = 0) - float *texcoords; // Vertex texture coordinates (UV - 2 components per vertex) (shader-location = 1) - float *texcoords2; // Vertex second texture coordinates (useful for lightmaps) (shader-location = 5) - float *normals; // Vertex normals (XYZ - 3 components per vertex) (shader-location = 2) - float *tangents; // Vertex tangents (XYZW - 4 components per vertex) (shader-location = 4) - unsigned char *colors; // Vertex colors (RGBA - 4 components per vertex) (shader-location = 3) - unsigned short *indices; // Vertex indices (in case vertex data comes indexed) - - // Animation vertex data - float *animVertices; // Animated vertex positions (after bones transformations) - float *animNormals; // Animated normals (after bones transformations) - int *boneIds; // Vertex bone ids, up to 4 bones influence by vertex (skinning) - float *boneWeights; // Vertex bone weight, up to 4 bones influence by vertex (skinning) - - // OpenGL identifiers - unsigned int vaoId; // OpenGL Vertex Array Object id - unsigned int vboId[7]; // OpenGL Vertex Buffer Objects id (default vertex data) -} Mesh; - -// Shader type (generic) -typedef struct Shader -{ - unsigned int id; // Shader program id - int locs[MAX_SHADER_LOCATIONS]; // Shader locations array -} Shader; - -// Material texture map -typedef struct MaterialMap -{ - Texture2D texture; // Material map texture - Color color; // Material map color - float value; // Material map value -} MaterialMap; - -// Material type (generic) -typedef struct Material -{ - Shader shader; // Material shader - MaterialMap maps[MAX_MATERIAL_MAPS]; // Material maps - float *params; // Material generic parameters (if required) -} Material; - -// Transformation properties -typedef struct Transform -{ - Vector3 translation; // Translation - Quaternion rotation; // Rotation - Vector3 scale; // Scale -} Transform; - -// Bone information -typedef struct BoneInfo -{ - char name[32]; // Bone name - int parent; // Bone parent -} BoneInfo; - -// Model type -typedef struct Model -{ - Matrix transform; // Local transform matrix - - int meshCount; // Number of meshes - Mesh *meshes; // Meshes array - - int materialCount; // Number of materials - Material *materials; // Materials array - int *meshMaterial; // Mesh material number - - // Animation data - int boneCount; // Number of bones - BoneInfo *bones; // Bones information (skeleton) - Transform *bindPose; // Bones base transformation (pose) -} Model; - -// Model animation -typedef struct ModelAnimation -{ - int boneCount; // Number of bones - BoneInfo *bones; // Bones information (skeleton) - - int frameCount; // Number of animation frames - Transform **framePoses; // Poses array by frame -} ModelAnimation; - -// Ray type (useful for raycast) -typedef struct Ray -{ - Vector3 position; // Ray position (origin) - Vector3 direction; // Ray direction -} Ray; - -// Raycast hit information -typedef struct RayHitInfo -{ - bool hit; // Did the ray hit something? - float distance; // Distance to nearest hit - Vector3 position; // Position of nearest hit - Vector3 normal; // Surface normal of hit -} RayHitInfo; - -// Bounding box type -typedef struct BoundingBox -{ - Vector3 min; // Minimum vertex box-corner - Vector3 max; // Maximum vertex box-corner -} BoundingBox; - -// Wave type, defines audio wave data -typedef struct Wave -{ - unsigned int sampleCount; // Number of samples - unsigned int sampleRate; // Frequency (samples per second) - unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) - unsigned int channels; // Number of channels (1-mono, 2-stereo) - void *data; // Buffer data pointer -} Wave; - -// Sound source type -typedef struct Sound -{ - void *audioBuffer; // Pointer to internal data used by the audio system - - unsigned int source; // Audio source id - unsigned int buffer; // Audio buffer id - int format; // Audio format specifier -} Sound; - -// Music type (file streaming from memory) -// NOTE: Anything longer than ~10 seconds should be streamed -typedef struct MusicData *Music; - -// Audio stream type -// NOTE: Useful to create custom audio streams not bound to a specific file -typedef struct AudioStream -{ - unsigned int sampleRate; // Frequency (samples per second) - unsigned int sampleSize; // Bit depth (bits per sample): 8, 16, 32 (24 not supported) - unsigned int channels; // Number of channels (1-mono, 2-stereo) - - void *audioBuffer; // Pointer to internal data used by the audio system. - - int format; // Audio format specifier - unsigned int source; // Audio source id - unsigned int buffers[2]; // Audio buffers (double buffering) -} AudioStream; - -// Head-Mounted-Display device parameters -typedef struct VrDeviceInfo -{ - int hResolution; // HMD horizontal resolution in pixels - int vResolution; // HMD vertical resolution in pixels - float hScreenSize; // HMD horizontal size in meters - float vScreenSize; // HMD vertical size in meters - float vScreenCenter; // HMD screen center in meters - float eyeToScreenDistance; // HMD distance between eye and display in meters - float lensSeparationDistance; // HMD lens separation distance in meters - float interpupillaryDistance; // HMD IPD (distance between pupils) in meters - float lensDistortionValues[4]; // HMD lens distortion constant parameters - float chromaAbCorrection[4]; // HMD chromatic aberration correction parameters -} VrDeviceInfo; - -//---------------------------------------------------------------------------------- -// Enumerators Definition -//---------------------------------------------------------------------------------- -// System config flags -// NOTE: Used for bit masks -typedef enum -{ - FLAG_SHOW_LOGO = 1, // Set to show raylib logo at startup - FLAG_FULLSCREEN_MODE = 2, // Set to run program in fullscreen - FLAG_WINDOW_RESIZABLE = 4, // Set to allow resizable window - FLAG_WINDOW_UNDECORATED = 8, // Set to disable window decoration (frame and buttons) - FLAG_WINDOW_TRANSPARENT = 16, // Set to allow transparent window - FLAG_WINDOW_HIDDEN = 128, // Set to create the window initially hidden - FLAG_MSAA_4X_HINT = 32, // Set to try enabling MSAA 4X - FLAG_VSYNC_HINT = 64 // Set to try enabling V-Sync on GPU -} ConfigFlag; - -// Trace log type -typedef enum -{ - LOG_ALL = 0, // Display all logs - LOG_TRACE, - LOG_DEBUG, - LOG_INFO, - LOG_WARNING, - LOG_ERROR, - LOG_FATAL, - LOG_NONE // Disable logging -} TraceLogType; - -// Keyboard keys -typedef enum -{ - // Alphanumeric keys - KEY_APOSTROPHE = 39, - KEY_COMMA = 44, - KEY_MINUS = 45, - KEY_PERIOD = 46, - KEY_SLASH = 47, - KEY_ZERO = 48, - KEY_ONE = 49, - KEY_TWO = 50, - KEY_THREE = 51, - KEY_FOUR = 52, - KEY_FIVE = 53, - KEY_SIX = 54, - KEY_SEVEN = 55, - KEY_EIGHT = 56, - KEY_NINE = 57, - KEY_SEMICOLON = 59, - KEY_EQUAL = 61, - KEY_A = 65, - KEY_B = 66, - KEY_C = 67, - KEY_D = 68, - KEY_E = 69, - KEY_F = 70, - KEY_G = 71, - KEY_H = 72, - KEY_I = 73, - KEY_J = 74, - KEY_K = 75, - KEY_L = 76, - KEY_M = 77, - KEY_N = 78, - KEY_O = 79, - KEY_P = 80, - KEY_Q = 81, - KEY_R = 82, - KEY_S = 83, - KEY_T = 84, - KEY_U = 85, - KEY_V = 86, - KEY_W = 87, - KEY_X = 88, - KEY_Y = 89, - KEY_Z = 90, - - // Function keys - KEY_SPACE = 32, - KEY_ESCAPE = 256, - KEY_ENTER = 257, - KEY_TAB = 258, - KEY_BACKSPACE = 259, - KEY_INSERT = 260, - KEY_DELETE = 261, - KEY_RIGHT = 262, - KEY_LEFT = 263, - KEY_DOWN = 264, - KEY_UP = 265, - KEY_PAGE_UP = 266, - KEY_PAGE_DOWN = 267, - KEY_HOME = 268, - KEY_END = 269, - KEY_CAPS_LOCK = 280, - KEY_SCROLL_LOCK = 281, - KEY_NUM_LOCK = 282, - KEY_PRINT_SCREEN = 283, - KEY_PAUSE = 284, - KEY_F1 = 290, - KEY_F2 = 291, - KEY_F3 = 292, - KEY_F4 = 293, - KEY_F5 = 294, - KEY_F6 = 295, - KEY_F7 = 296, - KEY_F8 = 297, - KEY_F9 = 298, - KEY_F10 = 299, - KEY_F11 = 300, - KEY_F12 = 301, - KEY_LEFT_SHIFT = 340, - KEY_LEFT_CONTROL = 341, - KEY_LEFT_ALT = 342, - KEY_LEFT_SUPER = 343, - KEY_RIGHT_SHIFT = 344, - KEY_RIGHT_CONTROL = 345, - KEY_RIGHT_ALT = 346, - KEY_RIGHT_SUPER = 347, - KEY_KB_MENU = 348, - KEY_LEFT_BRACKET = 91, - KEY_BACKSLASH = 92, - KEY_RIGHT_BRACKET = 93, - KEY_GRAVE = 96, - - // Keypad keys - KEY_KP_0 = 320, - KEY_KP_1 = 321, - KEY_KP_2 = 322, - KEY_KP_3 = 323, - KEY_KP_4 = 324, - KEY_KP_5 = 325, - KEY_KP_6 = 326, - KEY_KP_7 = 327, - KEY_KP_8 = 328, - KEY_KP_9 = 329, - KEY_KP_DECIMAL = 330, - KEY_KP_DIVIDE = 331, - KEY_KP_MULTIPLY = 332, - KEY_KP_SUBTRACT = 333, - KEY_KP_ADD = 334, - KEY_KP_ENTER = 335, - KEY_KP_EQUAL = 336 -} KeyboardKey; - -// Android buttons -typedef enum -{ - KEY_BACK = 4, - KEY_MENU = 82, - KEY_VOLUME_UP = 24, - KEY_VOLUME_DOWN = 25 -} AndroidButton; - -// Mouse buttons -typedef enum -{ - MOUSE_LEFT_BUTTON = 0, - MOUSE_RIGHT_BUTTON = 1, - MOUSE_MIDDLE_BUTTON = 2 -} MouseButton; - -// Gamepad number -typedef enum -{ - GAMEPAD_PLAYER1 = 0, - GAMEPAD_PLAYER2 = 1, - GAMEPAD_PLAYER3 = 2, - GAMEPAD_PLAYER4 = 3 -} GamepadNumber; - -// Gamepad Buttons -typedef enum -{ - // This is here just for error checking - GAMEPAD_BUTTON_UNKNOWN = 0, - - // This is normally [A,B,X,Y]/[Circle,Triangle,Square,Cross] - // No support for 6 button controllers though.. - GAMEPAD_BUTTON_LEFT_FACE_UP, - GAMEPAD_BUTTON_LEFT_FACE_RIGHT, - GAMEPAD_BUTTON_LEFT_FACE_DOWN, - GAMEPAD_BUTTON_LEFT_FACE_LEFT, - - // This is normally a DPAD - GAMEPAD_BUTTON_RIGHT_FACE_UP, - GAMEPAD_BUTTON_RIGHT_FACE_RIGHT, - GAMEPAD_BUTTON_RIGHT_FACE_DOWN, - GAMEPAD_BUTTON_RIGHT_FACE_LEFT, - - // Triggers - GAMEPAD_BUTTON_LEFT_TRIGGER_1, - GAMEPAD_BUTTON_LEFT_TRIGGER_2, - GAMEPAD_BUTTON_RIGHT_TRIGGER_1, - GAMEPAD_BUTTON_RIGHT_TRIGGER_2, - - // These are buttons in the center of the gamepad - GAMEPAD_BUTTON_MIDDLE_LEFT, //PS3 Select - GAMEPAD_BUTTON_MIDDLE, //PS Button/XBOX Button - GAMEPAD_BUTTON_MIDDLE_RIGHT, //PS3 Start - - // These are the joystick press in buttons - GAMEPAD_BUTTON_LEFT_THUMB, - GAMEPAD_BUTTON_RIGHT_THUMB -} GamepadButton; - -typedef enum -{ - // This is here just for error checking - GAMEPAD_AXIS_UNKNOWN = 0, - - // Left stick - GAMEPAD_AXIS_LEFT_X, - GAMEPAD_AXIS_LEFT_Y, - - // Right stick - GAMEPAD_AXIS_RIGHT_X, - GAMEPAD_AXIS_RIGHT_Y, - - // Pressure levels for the back triggers - GAMEPAD_AXIS_LEFT_TRIGGER, // [1..-1] (pressure-level) - GAMEPAD_AXIS_RIGHT_TRIGGER // [1..-1] (pressure-level) -} GamepadAxis; - -// Shader location point type -typedef enum -{ - LOC_VERTEX_POSITION = 0, - LOC_VERTEX_TEXCOORD01, - LOC_VERTEX_TEXCOORD02, - LOC_VERTEX_NORMAL, - LOC_VERTEX_TANGENT, - LOC_VERTEX_COLOR, - LOC_MATRIX_MVP, - LOC_MATRIX_MODEL, - LOC_MATRIX_VIEW, - LOC_MATRIX_PROJECTION, - LOC_VECTOR_VIEW, - LOC_COLOR_DIFFUSE, - LOC_COLOR_SPECULAR, - LOC_COLOR_AMBIENT, - LOC_MAP_ALBEDO, // LOC_MAP_DIFFUSE - LOC_MAP_METALNESS, // LOC_MAP_SPECULAR - LOC_MAP_NORMAL, - LOC_MAP_ROUGHNESS, - LOC_MAP_OCCLUSION, - LOC_MAP_EMISSION, - LOC_MAP_HEIGHT, - LOC_MAP_CUBEMAP, - LOC_MAP_IRRADIANCE, - LOC_MAP_PREFILTER, - LOC_MAP_BRDF -} ShaderLocationIndex; - -#define LOC_MAP_DIFFUSE LOC_MAP_ALBEDO -#define LOC_MAP_SPECULAR LOC_MAP_METALNESS - -// Shader uniform data types -typedef enum -{ - UNIFORM_FLOAT = 0, - UNIFORM_VEC2, - UNIFORM_VEC3, - UNIFORM_VEC4, - UNIFORM_INT, - UNIFORM_IVEC2, - UNIFORM_IVEC3, - UNIFORM_IVEC4, - UNIFORM_SAMPLER2D -} ShaderUniformDataType; - -// Material map type -typedef enum -{ - MAP_ALBEDO = 0, // MAP_DIFFUSE - MAP_METALNESS = 1, // MAP_SPECULAR - MAP_NORMAL = 2, - MAP_ROUGHNESS = 3, - MAP_OCCLUSION, - MAP_EMISSION, - MAP_HEIGHT, - MAP_CUBEMAP, // NOTE: Uses GL_TEXTURE_CUBE_MAP - MAP_IRRADIANCE, // NOTE: Uses GL_TEXTURE_CUBE_MAP - MAP_PREFILTER, // NOTE: Uses GL_TEXTURE_CUBE_MAP - MAP_BRDF -} MaterialMapType; - -#define MAP_DIFFUSE MAP_ALBEDO -#define MAP_SPECULAR MAP_METALNESS - -// Pixel formats -// NOTE: Support depends on OpenGL version and platform -typedef enum -{ - UNCOMPRESSED_GRAYSCALE = 1, // 8 bit per pixel (no alpha) - UNCOMPRESSED_GRAY_ALPHA, // 8*2 bpp (2 channels) - UNCOMPRESSED_R5G6B5, // 16 bpp - UNCOMPRESSED_R8G8B8, // 24 bpp - UNCOMPRESSED_R5G5B5A1, // 16 bpp (1 bit alpha) - UNCOMPRESSED_R4G4B4A4, // 16 bpp (4 bit alpha) - UNCOMPRESSED_R8G8B8A8, // 32 bpp - UNCOMPRESSED_R32, // 32 bpp (1 channel - float) - UNCOMPRESSED_R32G32B32, // 32*3 bpp (3 channels - float) - UNCOMPRESSED_R32G32B32A32, // 32*4 bpp (4 channels - float) - COMPRESSED_DXT1_RGB, // 4 bpp (no alpha) - COMPRESSED_DXT1_RGBA, // 4 bpp (1 bit alpha) - COMPRESSED_DXT3_RGBA, // 8 bpp - COMPRESSED_DXT5_RGBA, // 8 bpp - COMPRESSED_ETC1_RGB, // 4 bpp - COMPRESSED_ETC2_RGB, // 4 bpp - COMPRESSED_ETC2_EAC_RGBA, // 8 bpp - COMPRESSED_PVRT_RGB, // 4 bpp - COMPRESSED_PVRT_RGBA, // 4 bpp - COMPRESSED_ASTC_4x4_RGBA, // 8 bpp - COMPRESSED_ASTC_8x8_RGBA // 2 bpp -} PixelFormat; - -// Texture parameters: filter mode -// NOTE 1: Filtering considers mipmaps if available in the texture -// NOTE 2: Filter is accordingly set for minification and magnification -typedef enum -{ - FILTER_POINT = 0, // No filter, just pixel aproximation - FILTER_BILINEAR, // Linear filtering - FILTER_TRILINEAR, // Trilinear filtering (linear with mipmaps) - FILTER_ANISOTROPIC_4X, // Anisotropic filtering 4x - FILTER_ANISOTROPIC_8X, // Anisotropic filtering 8x - FILTER_ANISOTROPIC_16X, // Anisotropic filtering 16x -} TextureFilterMode; - -// Cubemap layout type -typedef enum -{ - CUBEMAP_AUTO_DETECT = 0, // Automatically detect layout type - CUBEMAP_LINE_VERTICAL, // Layout is defined by a vertical line with faces - CUBEMAP_LINE_HORIZONTAL, // Layout is defined by an horizontal line with faces - CUBEMAP_CROSS_THREE_BY_FOUR, // Layout is defined by a 3x4 cross with cubemap faces - CUBEMAP_CROSS_FOUR_BY_THREE, // Layout is defined by a 4x3 cross with cubemap faces - CUBEMAP_PANORAMA // Layout is defined by a panorama image (equirectangular map) -} CubemapLayoutType; - -// Texture parameters: wrap mode -typedef enum -{ - WRAP_REPEAT = 0, // Repeats texture in tiled mode - WRAP_CLAMP, // Clamps texture to edge pixel in tiled mode - WRAP_MIRROR_REPEAT, // Mirrors and repeats the texture in tiled mode - WRAP_MIRROR_CLAMP // Mirrors and clamps to border the texture in tiled mode -} TextureWrapMode; - -// Font type, defines generation method -typedef enum -{ - FONT_DEFAULT = 0, // Default font generation, anti-aliased - FONT_BITMAP, // Bitmap font generation, no anti-aliasing - FONT_SDF // SDF font generation, requires external shader -} FontType; - -// Color blending modes (pre-defined) -typedef enum -{ - BLEND_ALPHA = 0, // Blend textures considering alpha (default) - BLEND_ADDITIVE, // Blend textures adding colors - BLEND_MULTIPLIED // Blend textures multiplying colors -} BlendMode; - -// Gestures type -// NOTE: It could be used as flags to enable only some gestures -typedef enum -{ - GESTURE_NONE = 0, - GESTURE_TAP = 1, - GESTURE_DOUBLETAP = 2, - GESTURE_HOLD = 4, - GESTURE_DRAG = 8, - GESTURE_SWIPE_RIGHT = 16, - GESTURE_SWIPE_LEFT = 32, - GESTURE_SWIPE_UP = 64, - GESTURE_SWIPE_DOWN = 128, - GESTURE_PINCH_IN = 256, - GESTURE_PINCH_OUT = 512 -} GestureType; - -// Camera system modes -typedef enum -{ - CAMERA_CUSTOM = 0, - CAMERA_FREE, - CAMERA_ORBITAL, - CAMERA_FIRST_PERSON, - CAMERA_THIRD_PERSON -} CameraMode; - -// Camera projection modes -typedef enum -{ - CAMERA_PERSPECTIVE = 0, - CAMERA_ORTHOGRAPHIC -} CameraType; - -// Type of n-patch -typedef enum -{ - NPT_9PATCH = 0, // Npatch defined by 3x3 tiles - NPT_3PATCH_VERTICAL, // Npatch defined by 1x3 tiles - NPT_3PATCH_HORIZONTAL // Npatch defined by 3x1 tiles -} NPatchType; - -// Callbacks to be implemented by users -typedef void (*TraceLogCallback)(int logType, const char *text, va_list args); - -#if defined(__cplusplus) -extern "C" -{ // Prevents name mangling of functions -#endif - - //------------------------------------------------------------------------------------ - // Global Variables Definition - //------------------------------------------------------------------------------------ - // It's lonely here... - - //------------------------------------------------------------------------------------ - // Window and Graphics Device Functions (Module: core) - //------------------------------------------------------------------------------------ - - // Window-related functions - RLAPI void InitWindow(int width, int height, const char *title); // Initialize window and OpenGL context - RLAPI bool WindowShouldClose(void); // Check if KEY_ESCAPE pressed or Close icon pressed - RLAPI void CloseWindow(void); // Close window and unload OpenGL context - RLAPI bool IsWindowReady(void); // Check if window has been initialized successfully - RLAPI bool IsWindowMinimized(void); // Check if window has been minimized (or lost focus) - RLAPI bool IsWindowResized(void); // Check if window has been resized - RLAPI bool IsWindowHidden(void); // Check if window is currently hidden - RLAPI void ToggleFullscreen(void); // Toggle fullscreen mode (only PLATFORM_DESKTOP) - RLAPI void UnhideWindow(void); // Show the window - RLAPI void HideWindow(void); // Hide the window - RLAPI void SetWindowIcon(Image image); // Set icon for window (only PLATFORM_DESKTOP) - RLAPI void SetWindowTitle(const char *title); // Set title for window (only PLATFORM_DESKTOP) - RLAPI void SetWindowPosition(int x, int y); // Set window position on screen (only PLATFORM_DESKTOP) - RLAPI void SetWindowMonitor(int monitor); // Set monitor for the current window (fullscreen mode) - RLAPI void SetWindowMinSize(int width, int height); // Set window minimum dimensions (for FLAG_WINDOW_RESIZABLE) - RLAPI void SetWindowSize(int width, int height); // Set window dimensions - RLAPI void *GetWindowHandle(void); // Get native window handle - RLAPI int GetScreenWidth(void); // Get current screen width - RLAPI int GetScreenHeight(void); // Get current screen height - RLAPI int GetMonitorCount(void); // Get number of connected monitors - RLAPI int GetMonitorWidth(int monitor); // Get primary monitor width - RLAPI int GetMonitorHeight(int monitor); // Get primary monitor height - RLAPI int GetMonitorPhysicalWidth(int monitor); // Get primary monitor physical width in millimetres - RLAPI int GetMonitorPhysicalHeight(int monitor); // Get primary monitor physical height in millimetres - RLAPI const char *GetMonitorName(int monitor); // Get the human-readable, UTF-8 encoded name of the primary monitor - RLAPI const char *GetClipboardText(void); // Get clipboard text content - RLAPI void SetClipboardText(const char *text); // Set clipboard text content - - // Cursor-related functions - RLAPI void ShowCursor(void); // Shows cursor - RLAPI void HideCursor(void); // Hides cursor - RLAPI bool IsCursorHidden(void); // Check if cursor is not visible - RLAPI void EnableCursor(void); // Enables cursor (unlock cursor) - RLAPI void DisableCursor(void); // Disables cursor (lock cursor) - - // Drawing-related functions - RLAPI void ClearBackground(Color color); // Set background color (framebuffer clear color) - RLAPI void BeginDrawing(void); // Setup canvas (framebuffer) to start drawing - RLAPI void EndDrawing(void); // End canvas drawing and swap buffers (double buffering) - RLAPI void BeginMode2D(Camera2D camera); // Initialize 2D mode with custom camera (2D) - RLAPI void EndMode2D(void); // Ends 2D mode with custom camera - RLAPI void BeginMode3D(Camera3D camera); // Initializes 3D mode with custom camera (3D) - RLAPI void EndMode3D(void); // Ends 3D mode and returns to default 2D orthographic mode - RLAPI void BeginTextureMode(RenderTexture2D target); // Initializes render texture for drawing - RLAPI void EndTextureMode(void); // Ends drawing to render texture - - // Screen-space-related functions - RLAPI Ray GetMouseRay(Vector2 mousePosition, Camera camera); // Returns a ray trace from mouse position - RLAPI Vector2 GetWorldToScreen(Vector3 position, Camera camera); // Returns the screen space position for a 3d world space position - RLAPI Matrix GetCameraMatrix(Camera camera); // Returns camera transform matrix (view matrix) - - // Timing-related functions - RLAPI void SetTargetFPS(int fps); // Set target FPS (maximum) - RLAPI int GetFPS(void); // Returns current FPS - RLAPI float GetFrameTime(void); // Returns time in seconds for last frame drawn - RLAPI double GetTime(void); // Returns elapsed time in seconds since InitWindow() - - // Color-related functions - RLAPI int ColorToInt(Color color); // Returns hexadecimal value for a Color - RLAPI Vector4 ColorNormalize(Color color); // Returns color normalized as float [0..1] - RLAPI Vector3 ColorToHSV(Color color); // Returns HSV values for a Color - RLAPI Color ColorFromHSV(Vector3 hsv); // Returns a Color from HSV values - RLAPI Color GetColor(int hexValue); // Returns a Color struct from hexadecimal value - RLAPI Color Fade(Color color, float alpha); // Color fade-in or fade-out, alpha goes from 0.0f to 1.0f - - // Misc. functions - RLAPI void SetConfigFlags(unsigned char flags); // Setup window configuration flags (view FLAGS) - RLAPI void SetTraceLogLevel(int logType); // Set the current threshold (minimum) log level - RLAPI void SetTraceLogExit(int logType); // Set the exit threshold (minimum) log level - RLAPI void SetTraceLogCallback(TraceLogCallback callback); // Set a trace log callback to enable custom logging - RLAPI void TraceLog(int logType, const char *text, ...); // Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR) - RLAPI void TakeScreenshot(const char *fileName); // Takes a screenshot of current screen (saved a .png) - RLAPI int GetRandomValue(int min, int max); // Returns a random value between min and max (both included) - - // Files management functions - RLAPI bool FileExists(const char *fileName); // Check if file exists - RLAPI bool IsFileExtension(const char *fileName, const char *ext); // Check file extension - RLAPI const char *GetExtension(const char *fileName); // Get pointer to extension for a filename string - RLAPI const char *GetFileName(const char *filePath); // Get pointer to filename for a path string - RLAPI const char *GetFileNameWithoutExt(const char *filePath); // Get filename string without extension (memory should be freed) - RLAPI const char *GetDirectoryPath(const char *fileName); // Get full path for a given fileName (uses static string) - RLAPI const char *GetWorkingDirectory(void); // Get current working directory (uses static string) - RLAPI char **GetDirectoryFiles(const char *dirPath, int *count); // Get filenames in a directory path (memory should be freed) - RLAPI void ClearDirectoryFiles(void); // Clear directory files paths buffers (free memory) - RLAPI bool ChangeDirectory(const char *dir); // Change working directory, returns true if success - RLAPI bool IsFileDropped(void); // Check if a file has been dropped into window - RLAPI char **GetDroppedFiles(int *count); // Get dropped files names (memory should be freed) - RLAPI void ClearDroppedFiles(void); // Clear dropped files paths buffer (free memory) - RLAPI long GetFileModTime(const char *fileName); // Get file modification time (last write time) - - // Persistent storage management - RLAPI void StorageSaveValue(int position, int value); // Save integer value to storage file (to defined position) - RLAPI int StorageLoadValue(int position); // Load integer value from storage file (from defined position) - - RLAPI void OpenURL(const char *url); // Open URL with default system browser (if available) - - //------------------------------------------------------------------------------------ - // Input Handling Functions (Module: core) - //------------------------------------------------------------------------------------ - - // Input-related functions: keyboard - RLAPI bool IsKeyPressed(int key); // Detect if a key has been pressed once - RLAPI bool IsKeyDown(int key); // Detect if a key is being pressed - RLAPI bool IsKeyReleased(int key); // Detect if a key has been released once - RLAPI bool IsKeyUp(int key); // Detect if a key is NOT being pressed - RLAPI int GetKeyPressed(void); // Get latest key pressed - RLAPI void SetExitKey(int key); // Set a custom key to exit program (default is ESC) - - // Input-related functions: gamepads - RLAPI bool IsGamepadAvailable(int gamepad); // Detect if a gamepad is available - RLAPI bool IsGamepadName(int gamepad, const char *name); // Check gamepad name (if available) - RLAPI const char *GetGamepadName(int gamepad); // Return gamepad internal name id - RLAPI bool IsGamepadButtonPressed(int gamepad, int button); // Detect if a gamepad button has been pressed once - RLAPI bool IsGamepadButtonDown(int gamepad, int button); // Detect if a gamepad button is being pressed - RLAPI bool IsGamepadButtonReleased(int gamepad, int button); // Detect if a gamepad button has been released once - RLAPI bool IsGamepadButtonUp(int gamepad, int button); // Detect if a gamepad button is NOT being pressed - RLAPI int GetGamepadButtonPressed(void); // Get the last gamepad button pressed - RLAPI int GetGamepadAxisCount(int gamepad); // Return gamepad axis count for a gamepad - RLAPI float GetGamepadAxisMovement(int gamepad, int axis); // Return axis movement value for a gamepad axis - - // Input-related functions: mouse - RLAPI bool IsMouseButtonPressed(int button); // Detect if a mouse button has been pressed once - RLAPI bool IsMouseButtonDown(int button); // Detect if a mouse button is being pressed - RLAPI bool IsMouseButtonReleased(int button); // Detect if a mouse button has been released once - RLAPI bool IsMouseButtonUp(int button); // Detect if a mouse button is NOT being pressed - RLAPI int GetMouseX(void); // Returns mouse position X - RLAPI int GetMouseY(void); // Returns mouse position Y - RLAPI Vector2 GetMousePosition(void); // Returns mouse position XY - RLAPI void SetMousePosition(int x, int y); // Set mouse position XY - RLAPI void SetMouseOffset(int offsetX, int offsetY); // Set mouse offset - RLAPI void SetMouseScale(float scaleX, float scaleY); // Set mouse scaling - RLAPI int GetMouseWheelMove(void); // Returns mouse wheel movement Y - - // Input-related functions: touch - RLAPI int GetTouchX(void); // Returns touch position X for touch point 0 (relative to screen size) - RLAPI int GetTouchY(void); // Returns touch position Y for touch point 0 (relative to screen size) - RLAPI Vector2 GetTouchPosition(int index); // Returns touch position XY for a touch point index (relative to screen size) - - //------------------------------------------------------------------------------------ - // Gestures and Touch Handling Functions (Module: gestures) - //------------------------------------------------------------------------------------ - RLAPI void SetGesturesEnabled(unsigned int gestureFlags); // Enable a set of gestures using flags - RLAPI bool IsGestureDetected(int gesture); // Check if a gesture have been detected - RLAPI int GetGestureDetected(void); // Get latest detected gesture - RLAPI int GetTouchPointsCount(void); // Get touch points count - RLAPI float GetGestureHoldDuration(void); // Get gesture hold time in milliseconds - RLAPI Vector2 GetGestureDragVector(void); // Get gesture drag vector - RLAPI float GetGestureDragAngle(void); // Get gesture drag angle - RLAPI Vector2 GetGesturePinchVector(void); // Get gesture pinch delta - RLAPI float GetGesturePinchAngle(void); // Get gesture pinch angle - - //------------------------------------------------------------------------------------ - // Camera System Functions (Module: camera) - //------------------------------------------------------------------------------------ - RLAPI void SetCameraMode(Camera camera, int mode); // Set camera mode (multiple camera modes available) - RLAPI void UpdateCamera(Camera *camera); // Update camera position for selected mode - - RLAPI void SetCameraPanControl(int panKey); // Set camera pan key to combine with mouse movement (free camera) - RLAPI void SetCameraAltControl(int altKey); // Set camera alt key to combine with mouse movement (free camera) - RLAPI void SetCameraSmoothZoomControl(int szKey); // Set camera smooth zoom key to combine with mouse (free camera) - RLAPI void SetCameraMoveControls(int frontKey, int backKey, int rightKey, int leftKey, int upKey, int downKey); // Set camera move controls (1st person and 3rd person cameras) - - //------------------------------------------------------------------------------------ - // Basic Shapes Drawing Functions (Module: shapes) - //------------------------------------------------------------------------------------ - - // Basic shapes drawing functions - RLAPI void DrawPixel(int posX, int posY, Color color); // Draw a pixel - RLAPI void DrawPixelV(Vector2 position, Color color); // Draw a pixel (Vector version) - RLAPI void DrawLine(int startPosX, int startPosY, int endPosX, int endPosY, Color color); // Draw a line - RLAPI void DrawLineV(Vector2 startPos, Vector2 endPos, Color color); // Draw a line (Vector version) - RLAPI void DrawLineEx(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line defining thickness - RLAPI void DrawLineBezier(Vector2 startPos, Vector2 endPos, float thick, Color color); // Draw a line using cubic-bezier curves in-out - RLAPI void DrawLineStrip(Vector2 *points, int numPoints, Color color); // Draw lines sequence - RLAPI void DrawCircle(int centerX, int centerY, float radius, Color color); // Draw a color-filled circle - RLAPI void DrawCircleSector(Vector2 center, float radius, int startAngle, int endAngle, int segments, Color color); // Draw a piece of a circle - RLAPI void DrawCircleSectorLines(Vector2 center, float radius, int startAngle, int endAngle, int segments, Color color); // Draw circle sector outline - RLAPI void DrawCircleGradient(int centerX, int centerY, float radius, Color color1, Color color2); // Draw a gradient-filled circle - RLAPI void DrawCircleV(Vector2 center, float radius, Color color); // Draw a color-filled circle (Vector version) - RLAPI void DrawCircleLines(int centerX, int centerY, float radius, Color color); // Draw circle outline - RLAPI void DrawRing(Vector2 center, float innerRadius, float outerRadius, int startAngle, int endAngle, int segments, Color color); // Draw ring - RLAPI void DrawRingLines(Vector2 center, float innerRadius, float outerRadius, int startAngle, int endAngle, int segments, Color color); // Draw ring outline - RLAPI void DrawRectangle(int posX, int posY, int width, int height, Color color); // Draw a color-filled rectangle - RLAPI void DrawRectangleV(Vector2 position, Vector2 size, Color color); // Draw a color-filled rectangle (Vector version) - RLAPI void DrawRectangleRec(Rectangle rec, Color color); // Draw a color-filled rectangle - RLAPI void DrawRectanglePro(Rectangle rec, Vector2 origin, float rotation, Color color); // Draw a color-filled rectangle with pro parameters - RLAPI void DrawRectangleGradientV(int posX, int posY, int width, int height, Color color1, Color color2); // Draw a vertical-gradient-filled rectangle - RLAPI void DrawRectangleGradientH(int posX, int posY, int width, int height, Color color1, Color color2); // Draw a horizontal-gradient-filled rectangle - RLAPI void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // Draw a gradient-filled rectangle with custom vertex colors - RLAPI void DrawRectangleLines(int posX, int posY, int width, int height, Color color); // Draw rectangle outline - RLAPI void DrawRectangleLinesEx(Rectangle rec, int lineThick, Color color); // Draw rectangle outline with extended parameters - RLAPI void DrawRectangleRounded(Rectangle rec, float roundness, int segments, Color color); // Draw rectangle with rounded edges - RLAPI void DrawRectangleRoundedLines(Rectangle rec, float roundness, int segments, int lineThick, Color color); // Draw rectangle with rounded edges outline - RLAPI void DrawTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw a color-filled triangle - RLAPI void DrawTriangleLines(Vector2 v1, Vector2 v2, Vector2 v3, Color color); // Draw triangle outline - RLAPI void DrawTriangleFan(Vector2 *points, int numPoints, Color color); // Draw a triangle fan defined by points - RLAPI void DrawPoly(Vector2 center, int sides, float radius, float rotation, Color color); // Draw a regular polygon (Vector version) - - RLAPI void SetShapesTexture(Texture2D texture, Rectangle source); // Define default texture used to draw shapes - - // Basic shapes collision detection functions - RLAPI bool CheckCollisionRecs(Rectangle rec1, Rectangle rec2); // Check collision between two rectangles - RLAPI bool CheckCollisionCircles(Vector2 center1, float radius1, Vector2 center2, float radius2); // Check collision between two circles - RLAPI bool CheckCollisionCircleRec(Vector2 center, float radius, Rectangle rec); // Check collision between circle and rectangle - RLAPI Rectangle GetCollisionRec(Rectangle rec1, Rectangle rec2); // Get collision rectangle for two rectangles collision - RLAPI bool CheckCollisionPointRec(Vector2 point, Rectangle rec); // Check if point is inside rectangle - RLAPI bool CheckCollisionPointCircle(Vector2 point, Vector2 center, float radius); // Check if point is inside circle - RLAPI bool CheckCollisionPointTriangle(Vector2 point, Vector2 p1, Vector2 p2, Vector2 p3); // Check if point is inside a triangle - - //------------------------------------------------------------------------------------ - // Texture Loading and Drawing Functions (Module: textures) - //------------------------------------------------------------------------------------ - - // Image/Texture2D data loading/unloading/saving functions - RLAPI Image LoadImage(const char *fileName); // Load image from file into CPU memory (RAM) - RLAPI Image LoadImageEx(Color *pixels, int width, int height); // Load image from Color array data (RGBA - 32bit) - RLAPI Image LoadImagePro(void *data, int width, int height, int format); // Load image from raw data with parameters - RLAPI Image LoadImageRaw(const char *fileName, int width, int height, int format, int headerSize); // Load image from RAW file data - RLAPI void ExportImage(Image image, const char *fileName); // Export image data to file - RLAPI void ExportImageAsCode(Image image, const char *fileName); // Export image as code file defining an array of bytes - RLAPI Texture2D LoadTexture(const char *fileName); // Load texture from file into GPU memory (VRAM) - RLAPI Texture2D LoadTextureFromImage(Image image); // Load texture from image data - RLAPI TextureCubemap LoadTextureCubemap(Image image, int layoutType); // Load cubemap from image, multiple image cubemap layouts supported - RLAPI RenderTexture2D LoadRenderTexture(int width, int height); // Load texture for rendering (framebuffer) - RLAPI void UnloadImage(Image image); // Unload image from CPU memory (RAM) - RLAPI void UnloadTexture(Texture2D texture); // Unload texture from GPU memory (VRAM) - RLAPI void UnloadRenderTexture(RenderTexture2D target); // Unload render texture from GPU memory (VRAM) - RLAPI Color *GetImageData(Image image); // Get pixel data from image as a Color struct array - RLAPI Vector4 *GetImageDataNormalized(Image image); // Get pixel data from image as Vector4 array (float normalized) - RLAPI int GetPixelDataSize(int width, int height, int format); // Get pixel data size in bytes (image or texture) - RLAPI Image GetTextureData(Texture2D texture); // Get pixel data from GPU texture and return an Image - RLAPI Image GetScreenData(void); // Get pixel data from screen buffer and return an Image (screenshot) - RLAPI void UpdateTexture(Texture2D texture, const void *pixels); // Update GPU texture with new data - - // Image manipulation functions - RLAPI Image ImageCopy(Image image); // Create an image duplicate (useful for transformations) - RLAPI void ImageToPOT(Image *image, Color fillColor); // Convert image to POT (power-of-two) - RLAPI void ImageFormat(Image *image, int newFormat); // Convert image data to desired format - RLAPI void ImageAlphaMask(Image *image, Image alphaMask); // Apply alpha mask to image - RLAPI void ImageAlphaClear(Image *image, Color color, float threshold); // Clear alpha channel to desired color - RLAPI void ImageAlphaCrop(Image *image, float threshold); // Crop image depending on alpha value - RLAPI void ImageAlphaPremultiply(Image *image); // Premultiply alpha channel - RLAPI void ImageCrop(Image *image, Rectangle crop); // Crop an image to a defined rectangle - RLAPI void ImageResize(Image *image, int newWidth, int newHeight); // Resize image (Bicubic scaling algorithm) - RLAPI void ImageResizeNN(Image *image, int newWidth, int newHeight); // Resize image (Nearest-Neighbor scaling algorithm) - RLAPI void ImageResizeCanvas(Image *image, int newWidth, int newHeight, int offsetX, int offsetY, Color color); // Resize canvas and fill with color - RLAPI void ImageMipmaps(Image *image); // Generate all mipmap levels for a provided image - RLAPI void ImageDither(Image *image, int rBpp, int gBpp, int bBpp, int aBpp); // Dither image data to 16bpp or lower (Floyd-Steinberg dithering) - RLAPI Color *ImageExtractPalette(Image image, int maxPaletteSize, int *extractCount); // Extract color palette from image to maximum size (memory should be freed) - RLAPI Image ImageText(const char *text, int fontSize, Color color); // Create an image from text (default font) - RLAPI Image ImageTextEx(Font font, const char *text, float fontSize, float spacing, Color tint); // Create an image from text (custom sprite font) - RLAPI void ImageDraw(Image *dst, Image src, Rectangle srcRec, Rectangle dstRec); // Draw a source image within a destination image - RLAPI void ImageDrawRectangle(Image *dst, Rectangle rec, Color color); // Draw rectangle within an image - RLAPI void ImageDrawRectangleLines(Image *dst, Rectangle rec, int thick, Color color); // Draw rectangle lines within an image - RLAPI void ImageDrawText(Image *dst, Vector2 position, const char *text, int fontSize, Color color); // Draw text (default font) within an image (destination) - RLAPI void ImageDrawTextEx(Image *dst, Vector2 position, Font font, const char *text, float fontSize, float spacing, Color color); // Draw text (custom sprite font) within an image (destination) - RLAPI void ImageFlipVertical(Image *image); // Flip image vertically - RLAPI void ImageFlipHorizontal(Image *image); // Flip image horizontally - RLAPI void ImageRotateCW(Image *image); // Rotate image clockwise 90deg - RLAPI void ImageRotateCCW(Image *image); // Rotate image counter-clockwise 90deg - RLAPI void ImageColorTint(Image *image, Color color); // Modify image color: tint - RLAPI void ImageColorInvert(Image *image); // Modify image color: invert - RLAPI void ImageColorGrayscale(Image *image); // Modify image color: grayscale - RLAPI void ImageColorContrast(Image *image, float contrast); // Modify image color: contrast (-100 to 100) - RLAPI void ImageColorBrightness(Image *image, int brightness); // Modify image color: brightness (-255 to 255) - RLAPI void ImageColorReplace(Image *image, Color color, Color replace); // Modify image color: replace color - - // Image generation functions - RLAPI Image GenImageColor(int width, int height, Color color); // Generate image: plain color - RLAPI Image GenImageGradientV(int width, int height, Color top, Color bottom); // Generate image: vertical gradient - RLAPI Image GenImageGradientH(int width, int height, Color left, Color right); // Generate image: horizontal gradient - RLAPI Image GenImageGradientRadial(int width, int height, float density, Color inner, Color outer); // Generate image: radial gradient - RLAPI Image GenImageChecked(int width, int height, int checksX, int checksY, Color col1, Color col2); // Generate image: checked - RLAPI Image GenImageWhiteNoise(int width, int height, float factor); // Generate image: white noise - RLAPI Image GenImagePerlinNoise(int width, int height, int offsetX, int offsetY, float scale); // Generate image: perlin noise - RLAPI Image GenImageCellular(int width, int height, int tileSize); // Generate image: cellular algorithm. Bigger tileSize means bigger cells - - // Texture2D configuration functions - RLAPI void GenTextureMipmaps(Texture2D *texture); // Generate GPU mipmaps for a texture - RLAPI void SetTextureFilter(Texture2D texture, int filterMode); // Set texture scaling filter mode - RLAPI void SetTextureWrap(Texture2D texture, int wrapMode); // Set texture wrapping mode - - // Texture2D drawing functions - RLAPI void DrawTexture(Texture2D texture, int posX, int posY, Color tint); // Draw a Texture2D - RLAPI void DrawTextureV(Texture2D texture, Vector2 position, Color tint); // Draw a Texture2D with position defined as Vector2 - RLAPI void DrawTextureEx(Texture2D texture, Vector2 position, float rotation, float scale, Color tint); // Draw a Texture2D with extended parameters - RLAPI void DrawTextureRec(Texture2D texture, Rectangle sourceRec, Vector2 position, Color tint); // Draw a part of a texture defined by a rectangle - RLAPI void DrawTextureQuad(Texture2D texture, Vector2 tiling, Vector2 offset, Rectangle quad, Color tint); // Draw texture quad with tiling and offset parameters - RLAPI void DrawTexturePro(Texture2D texture, Rectangle sourceRec, Rectangle destRec, Vector2 origin, float rotation, Color tint); // Draw a part of a texture defined by a rectangle with 'pro' parameters - RLAPI void DrawTextureNPatch(Texture2D texture, NPatchInfo nPatchInfo, Rectangle destRec, Vector2 origin, float rotation, Color tint); // Draws a texture (or part of it) that stretches or shrinks nicely - - //------------------------------------------------------------------------------------ - // Font Loading and Text Drawing Functions (Module: text) - //------------------------------------------------------------------------------------ - - // Font loading/unloading functions - RLAPI Font GetFontDefault(void); // Get the default Font - RLAPI Font LoadFont(const char *fileName); // Load font from file into GPU memory (VRAM) - RLAPI Font LoadFontEx(const char *fileName, int fontSize, int *fontChars, int charsCount); // Load font from file with extended parameters - RLAPI Font LoadFontFromImage(Image image, Color key, int firstChar); // Load font from Image (XNA style) - RLAPI CharInfo *LoadFontData(const char *fileName, int fontSize, int *fontChars, int charsCount, int type); // Load font data for further use - RLAPI Image GenImageFontAtlas(CharInfo *chars, int charsCount, int fontSize, int padding, int packMethod); // Generate image font atlas using chars info - RLAPI void UnloadFont(Font font); // Unload Font from GPU memory (VRAM) - - // Text drawing functions - RLAPI void DrawFPS(int posX, int posY); // Shows current FPS - RLAPI void DrawText(const char *text, int posX, int posY, int fontSize, Color color); // Draw text (using default font) - RLAPI void DrawTextEx(Font font, const char *text, Vector2 position, float fontSize, float spacing, Color tint); // Draw text using font and additional parameters - RLAPI void DrawTextRec(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint); // Draw text using font inside rectangle limits - RLAPI void DrawTextRecEx(Font font, const char *text, Rectangle rec, float fontSize, float spacing, bool wordWrap, Color tint, - int selectStart, int selectLength, Color selectText, Color selectBack); // Draw text using font inside rectangle limits with support for text selection - - // Text misc. functions - RLAPI int MeasureText(const char *text, int fontSize); // Measure string width for default font - RLAPI Vector2 MeasureTextEx(Font font, const char *text, float fontSize, float spacing); // Measure string size for Font - RLAPI int GetGlyphIndex(Font font, int character); // Get index position for a unicode character on font - RLAPI int GetNextCodepoint(const char *text, int *count); // Returns next codepoint in a UTF8 encoded string - // NOTE: 0x3f(`?`) is returned on failure, `count` will hold the total number of bytes processed - - // Text strings management functions - // NOTE: Some strings allocate memory internally for returned strings, just be careful! - RLAPI bool TextIsEqual(const char *text1, const char *text2); // Check if two text string are equal - RLAPI unsigned int TextLength(const char *text); // Get text length, checks for '\0' ending - RLAPI unsigned int TextCountCodepoints(const char *text); // Get total number of characters (codepoints) in a UTF8 encoded string - RLAPI const char *TextFormat(const char *text, ...); // Text formatting with variables (sprintf style) - RLAPI const char *TextSubtext(const char *text, int position, int length); // Get a piece of a text string - RLAPI const char *TextReplace(char *text, const char *replace, const char *by); // Replace text string (memory should be freed!) - RLAPI const char *TextInsert(const char *text, const char *insert, int position); // Insert text in a position (memory should be freed!) - RLAPI const char *TextJoin(const char **textList, int count, const char *delimiter); // Join text strings with delimiter - RLAPI const char **TextSplit(const char *text, char delimiter, int *count); // Split text into multiple strings - RLAPI void TextAppend(char *text, const char *append, int *position); // Append text at specific position and move cursor! - RLAPI int TextFindIndex(const char *text, const char *find); // Find first text occurrence within a string - RLAPI const char *TextToUpper(const char *text); // Get upper case version of provided string - RLAPI const char *TextToLower(const char *text); // Get lower case version of provided string - RLAPI const char *TextToPascal(const char *text); // Get Pascal case notation version of provided string - RLAPI int TextToInteger(const char *text); // Get integer value from text (negative values not supported) - - //------------------------------------------------------------------------------------ - // Basic 3d Shapes Drawing Functions (Module: models) - //------------------------------------------------------------------------------------ - - // Basic geometric 3D shapes drawing functions - RLAPI void DrawLine3D(Vector3 startPos, Vector3 endPos, Color color); // Draw a line in 3D world space - RLAPI void DrawCircle3D(Vector3 center, float radius, Vector3 rotationAxis, float rotationAngle, Color color); // Draw a circle in 3D world space - RLAPI void DrawCube(Vector3 position, float width, float height, float length, Color color); // Draw cube - RLAPI void DrawCubeV(Vector3 position, Vector3 size, Color color); // Draw cube (Vector version) - RLAPI void DrawCubeWires(Vector3 position, float width, float height, float length, Color color); // Draw cube wires - RLAPI void DrawCubeWiresV(Vector3 position, Vector3 size, Color color); // Draw cube wires (Vector version) - RLAPI void DrawCubeTexture(Texture2D texture, Vector3 position, float width, float height, float length, Color color); // Draw cube textured - RLAPI void DrawSphere(Vector3 centerPos, float radius, Color color); // Draw sphere - RLAPI void DrawSphereEx(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere with extended parameters - RLAPI void DrawSphereWires(Vector3 centerPos, float radius, int rings, int slices, Color color); // Draw sphere wires - RLAPI void DrawCylinder(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone - RLAPI void DrawCylinderWires(Vector3 position, float radiusTop, float radiusBottom, float height, int slices, Color color); // Draw a cylinder/cone wires - RLAPI void DrawPlane(Vector3 centerPos, Vector2 size, Color color); // Draw a plane XZ - RLAPI void DrawRay(Ray ray, Color color); // Draw a ray line - RLAPI void DrawGrid(int slices, float spacing); // Draw a grid (centered at (0, 0, 0)) - RLAPI void DrawGizmo(Vector3 position); // Draw simple gizmo - //DrawTorus(), DrawTeapot() could be useful? - - //------------------------------------------------------------------------------------ - // Model 3d Loading and Drawing Functions (Module: models) - //------------------------------------------------------------------------------------ - - // Model loading/unloading functions - RLAPI Model LoadModel(const char *fileName); // Load model from files (meshes and materials) - RLAPI Model LoadModelFromMesh(Mesh mesh); // Load model from generated mesh (default material) - RLAPI void UnloadModel(Model model); // Unload model from memory (RAM and/or VRAM) - - // Mesh loading/unloading functions - RLAPI Mesh *LoadMeshes(const char *fileName, int *meshCount); // Load meshes from model file - RLAPI void ExportMesh(Mesh mesh, const char *fileName); // Export mesh data to file - RLAPI void UnloadMesh(Mesh *mesh); // Unload mesh from memory (RAM and/or VRAM) - - // Material loading/unloading functions - RLAPI Material *LoadMaterials(const char *fileName, int *materialCount); // Load materials from model file - RLAPI Material LoadMaterialDefault(void); // Load default material (Supports: DIFFUSE, SPECULAR, NORMAL maps) - RLAPI void UnloadMaterial(Material material); // Unload material from GPU memory (VRAM) - RLAPI void SetMaterialTexture(Material *material, int mapType, Texture2D texture); // Set texture for a material map type (MAP_DIFFUSE, MAP_SPECULAR...) - RLAPI void SetModelMeshMaterial(Model *model, int meshId, int materialId); // Set material for a mesh - - // Model animations loading/unloading functions - RLAPI ModelAnimation *LoadModelAnimations(const char *fileName, int *animsCount); // Load model animations from file - RLAPI void UpdateModelAnimation(Model model, ModelAnimation anim, int frame); // Update model animation pose - RLAPI void UnloadModelAnimation(ModelAnimation anim); // Unload animation data - RLAPI bool IsModelAnimationValid(Model model, ModelAnimation anim); // Check model animation skeleton match - - // Mesh generation functions - RLAPI Mesh GenMeshPoly(int sides, float radius); // Generate polygonal mesh - RLAPI Mesh GenMeshPlane(float width, float length, int resX, int resZ); // Generate plane mesh (with subdivisions) - RLAPI Mesh GenMeshCube(float width, float height, float length); // Generate cuboid mesh - RLAPI Mesh GenMeshSphere(float radius, int rings, int slices); // Generate sphere mesh (standard sphere) - RLAPI Mesh GenMeshHemiSphere(float radius, int rings, int slices); // Generate half-sphere mesh (no bottom cap) - RLAPI Mesh GenMeshCylinder(float radius, float height, int slices); // Generate cylinder mesh - RLAPI Mesh GenMeshTorus(float radius, float size, int radSeg, int sides); // Generate torus mesh - RLAPI Mesh GenMeshKnot(float radius, float size, int radSeg, int sides); // Generate trefoil knot mesh - RLAPI Mesh GenMeshHeightmap(Image heightmap, Vector3 size); // Generate heightmap mesh from image data - RLAPI Mesh GenMeshCubicmap(Image cubicmap, Vector3 cubeSize); // Generate cubes-based map mesh from image data - - // Mesh manipulation functions - RLAPI BoundingBox MeshBoundingBox(Mesh mesh); // Compute mesh bounding box limits - RLAPI void MeshTangents(Mesh *mesh); // Compute mesh tangents - RLAPI void MeshBinormals(Mesh *mesh); // Compute mesh binormals - - // Model drawing functions - RLAPI void DrawModel(Model model, Vector3 position, float scale, Color tint); // Draw a model (with texture if set) - RLAPI void DrawModelEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model with extended parameters - RLAPI void DrawModelWires(Model model, Vector3 position, float scale, Color tint); // Draw a model wires (with texture if set) - RLAPI void DrawModelWiresEx(Model model, Vector3 position, Vector3 rotationAxis, float rotationAngle, Vector3 scale, Color tint); // Draw a model wires (with texture if set) with extended parameters - RLAPI void DrawBoundingBox(BoundingBox box, Color color); // Draw bounding box (wires) - RLAPI void DrawBillboard(Camera camera, Texture2D texture, Vector3 center, float size, Color tint); // Draw a billboard texture - RLAPI void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle sourceRec, Vector3 center, float size, Color tint); // Draw a billboard texture defined by sourceRec - - // Collision detection functions - RLAPI bool CheckCollisionSpheres(Vector3 centerA, float radiusA, Vector3 centerB, float radiusB); // Detect collision between two spheres - RLAPI bool CheckCollisionBoxes(BoundingBox box1, BoundingBox box2); // Detect collision between two bounding boxes - RLAPI bool CheckCollisionBoxSphere(BoundingBox box, Vector3 centerSphere, float radiusSphere); // Detect collision between box and sphere - RLAPI bool CheckCollisionRaySphere(Ray ray, Vector3 spherePosition, float sphereRadius); // Detect collision between ray and sphere - RLAPI bool CheckCollisionRaySphereEx(Ray ray, Vector3 spherePosition, float sphereRadius, Vector3 *collisionPoint); // Detect collision between ray and sphere, returns collision point - RLAPI bool CheckCollisionRayBox(Ray ray, BoundingBox box); // Detect collision between ray and box - RLAPI RayHitInfo GetCollisionRayModel(Ray ray, Model *model); // Get collision info between ray and model - RLAPI RayHitInfo GetCollisionRayTriangle(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3); // Get collision info between ray and triangle - RLAPI RayHitInfo GetCollisionRayGround(Ray ray, float groundHeight); // Get collision info between ray and ground plane (Y-normal plane) - - //------------------------------------------------------------------------------------ - // Shaders System Functions (Module: rlgl) - // NOTE: This functions are useless when using OpenGL 1.1 - //------------------------------------------------------------------------------------ - - // Shader loading/unloading functions - RLAPI char *LoadText(const char *fileName); // Load chars array from text file - RLAPI Shader LoadShader(const char *vsFileName, const char *fsFileName); // Load shader from files and bind default locations - RLAPI Shader LoadShaderCode(char *vsCode, char *fsCode); // Load shader from code strings and bind default locations - RLAPI void UnloadShader(Shader shader); // Unload shader from GPU memory (VRAM) - - RLAPI Shader GetShaderDefault(void); // Get default shader - RLAPI Texture2D GetTextureDefault(void); // Get default texture - - // Shader configuration functions - RLAPI int GetShaderLocation(Shader shader, const char *uniformName); // Get shader uniform location - RLAPI void SetShaderValue(Shader shader, int uniformLoc, const void *value, int uniformType); // Set shader uniform value - RLAPI void SetShaderValueV(Shader shader, int uniformLoc, const void *value, int uniformType, int count); // Set shader uniform value vector - RLAPI void SetShaderValueMatrix(Shader shader, int uniformLoc, Matrix mat); // Set shader uniform value (matrix 4x4) - RLAPI void SetShaderValueTexture(Shader shader, int uniformLoc, Texture2D texture); // Set shader uniform value for texture - RLAPI void SetMatrixProjection(Matrix proj); // Set a custom projection matrix (replaces internal projection matrix) - RLAPI void SetMatrixModelview(Matrix view); // Set a custom modelview matrix (replaces internal modelview matrix) - RLAPI Matrix GetMatrixModelview(); // Get internal modelview matrix - - // Texture maps generation (PBR) - // NOTE: Required shaders should be provided - RLAPI Texture2D GenTextureCubemap(Shader shader, Texture2D skyHDR, int size); // Generate cubemap texture from HDR texture - RLAPI Texture2D GenTextureIrradiance(Shader shader, Texture2D cubemap, int size); // Generate irradiance texture using cubemap data - RLAPI Texture2D GenTexturePrefilter(Shader shader, Texture2D cubemap, int size); // Generate prefilter texture using cubemap data - RLAPI Texture2D GenTextureBRDF(Shader shader, int size); // Generate BRDF texture - - // Shading begin/end functions - RLAPI void BeginShaderMode(Shader shader); // Begin custom shader drawing - RLAPI void EndShaderMode(void); // End custom shader drawing (use default shader) - RLAPI void BeginBlendMode(int mode); // Begin blending mode (alpha, additive, multiplied) - RLAPI void EndBlendMode(void); // End blending mode (reset to default: alpha blending) - RLAPI void BeginScissorMode(int x, int y, int width, int height); // Begin scissor mode (define screen area for following drawing) - RLAPI void EndScissorMode(void); // End scissor mode - - // VR control functions - RLAPI void InitVrSimulator(void); // Init VR simulator for selected device parameters - RLAPI void CloseVrSimulator(void); // Close VR simulator for current device - RLAPI void UpdateVrTracking(Camera *camera); // Update VR tracking (position and orientation) and camera - RLAPI void SetVrConfiguration(VrDeviceInfo info, Shader distortion); // Set stereo rendering configuration parameters - RLAPI bool IsVrSimulatorReady(void); // Detect if VR simulator is ready - RLAPI void ToggleVrMode(void); // Enable/Disable VR experience - RLAPI void BeginVrDrawing(void); // Begin VR simulator stereo rendering - RLAPI void EndVrDrawing(void); // End VR simulator stereo rendering - - //------------------------------------------------------------------------------------ - // Audio Loading and Playing Functions (Module: audio) - //------------------------------------------------------------------------------------ - - // Audio device management functions - RLAPI void InitAudioDevice(void); // Initialize audio device and context - RLAPI void CloseAudioDevice(void); // Close the audio device and context - RLAPI bool IsAudioDeviceReady(void); // Check if audio device has been initialized successfully - RLAPI void SetMasterVolume(float volume); // Set master volume (listener) - - // Wave/Sound loading/unloading functions - RLAPI Wave LoadWave(const char *fileName); // Load wave data from file - RLAPI Wave LoadWaveEx(void *data, int sampleCount, int sampleRate, int sampleSize, int channels); // Load wave data from raw array data - RLAPI Sound LoadSound(const char *fileName); // Load sound from file - RLAPI Sound LoadSoundFromWave(Wave wave); // Load sound from wave data - RLAPI void UpdateSound(Sound sound, const void *data, int samplesCount); // Update sound buffer with new data - RLAPI void UnloadWave(Wave wave); // Unload wave data - RLAPI void UnloadSound(Sound sound); // Unload sound - RLAPI void ExportWave(Wave wave, const char *fileName); // Export wave data to file - RLAPI void ExportWaveAsCode(Wave wave, const char *fileName); // Export wave sample data to code (.h) - - // Wave/Sound management functions - RLAPI void PlaySound(Sound sound); // Play a sound - RLAPI void PauseSound(Sound sound); // Pause a sound - RLAPI void ResumeSound(Sound sound); // Resume a paused sound - RLAPI void StopSound(Sound sound); // Stop playing a sound - RLAPI bool IsSoundPlaying(Sound sound); // Check if a sound is currently playing - RLAPI void SetSoundVolume(Sound sound, float volume); // Set volume for a sound (1.0 is max level) - RLAPI void SetSoundPitch(Sound sound, float pitch); // Set pitch for a sound (1.0 is base level) - RLAPI void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); // Convert wave data to desired format - RLAPI Wave WaveCopy(Wave wave); // Copy a wave to a new wave - RLAPI void WaveCrop(Wave *wave, int initSample, int finalSample); // Crop a wave to defined samples range - RLAPI float *GetWaveData(Wave wave); // Get samples data from wave as a floats array - - // Music management functions - RLAPI Music LoadMusicStream(const char *fileName); // Load music stream from file - RLAPI void UnloadMusicStream(Music music); // Unload music stream - RLAPI void PlayMusicStream(Music music); // Start music playing - RLAPI void UpdateMusicStream(Music music); // Updates buffers for music streaming - RLAPI void StopMusicStream(Music music); // Stop music playing - RLAPI void PauseMusicStream(Music music); // Pause music playing - RLAPI void ResumeMusicStream(Music music); // Resume playing paused music - RLAPI bool IsMusicPlaying(Music music); // Check if music is playing - RLAPI void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level) - RLAPI void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level) - RLAPI void SetMusicLoopCount(Music music, int count); // Set music loop count (loop repeats) - RLAPI float GetMusicTimeLength(Music music); // Get music time length (in seconds) - RLAPI float GetMusicTimePlayed(Music music); // Get current music time played (in seconds) - - // AudioStream management functions - RLAPI AudioStream InitAudioStream(unsigned int sampleRate, unsigned int sampleSize, unsigned int channels); // Init audio stream (to stream raw audio pcm data) - RLAPI void UpdateAudioStream(AudioStream stream, const void *data, int samplesCount); // Update audio stream buffers with data - RLAPI void CloseAudioStream(AudioStream stream); // Close audio stream and free memory - RLAPI bool IsAudioBufferProcessed(AudioStream stream); // Check if any audio stream buffers requires refill - RLAPI void PlayAudioStream(AudioStream stream); // Play audio stream - RLAPI void PauseAudioStream(AudioStream stream); // Pause audio stream - RLAPI void ResumeAudioStream(AudioStream stream); // Resume audio stream - RLAPI bool IsAudioStreamPlaying(AudioStream stream); // Check if audio stream is playing - RLAPI void StopAudioStream(AudioStream stream); // Stop audio stream - RLAPI void SetAudioStreamVolume(AudioStream stream, float volume); // Set volume for audio stream (1.0 is max level) - RLAPI void SetAudioStreamPitch(AudioStream stream, float pitch); // Set pitch for audio stream (1.0 is base level) - - //------------------------------------------------------------------------------------ - // Network (Module: network) - //------------------------------------------------------------------------------------ - - // IN PROGRESS: Check rnet.h for reference - -#if defined(__cplusplus) -} -#endif - -#endif // RAYLIB_H \ No newline at end of file diff --git a/samples/raymarch.rs b/samples/raymarch.rs deleted file mode 100644 index 7411a985..00000000 --- a/samples/raymarch.rs +++ /dev/null @@ -1,81 +0,0 @@ -extern crate raylib; -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -const SHADER: &str = include_str!("static/raymarching.fs"); - -pub fn main() { - let opt = options::Opt::from_args(); - let (mut rl, thread) = opt.open_window("Camera 2D"); - let (w, h) = (opt.width, opt.height); - - let mut camera = Camera3D::perspective( - Vector3::new(2.5, 2.5, 3.0), - Vector3::new(0.0, 0.0, 0.7), - Vector3::new(0.0, 1.0, 0.0), - 65.0, - ); - - rl.set_camera_mode(&camera, CameraMode::CAMERA_FREE); - let mut shader = rl.load_shader_from_memory(&thread, None, Some(SHADER)); - // let s = std::fs::read_to_string("raymarch-static/raymarching.fs").expect("couldn't read"); - // println!("{}", s); - - let view_eye_loc = shader.get_shader_location("viewEye"); - let view_center_loc = shader.get_shader_location("viewCenter"); - let view_up_loc = shader.get_shader_location("viewUp"); - let delta_time_loc = shader.get_shader_location("deltaTime"); - let runtime_loc = shader.get_shader_location("runTime"); - let resolution_loc = shader.get_shader_location("resolution"); - - let resolution: [f32; 2] = [w as f32, h as f32]; - shader.set_shader_value(resolution_loc, resolution); - - let mut run_time = 0.0; - - while !rl.window_should_close() { - // Update - //---------------------------------------------------------------------------------- - rl.update_camera(&mut camera); // Update camera - - let camera_pos = Vector3::new(camera.position.x, camera.position.y, camera.position.z); - let camera_target = Vector3::new(camera.target.x, camera.target.y, camera.target.z); - let camera_up = Vector3::new(camera.up.x, camera.up.y, camera.up.z); - - let delta_time = rl.get_frame_time(); - run_time += delta_time; - - // Set shader required uniform values - shader.set_shader_value(view_eye_loc, camera_pos); - shader.set_shader_value(view_center_loc, camera_target); - shader.set_shader_value(view_up_loc, camera_up); - shader.set_shader_value(delta_time_loc, delta_time); - shader.set_shader_value(runtime_loc, run_time); - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - let mut d = rl.begin_drawing(&thread); - - d.clear_background(Color::RAYWHITE); - - // We only draw a white full-screen rectangle, - // frame is generated in shader using raymarching - { - let mut d = d.begin_shader_mode(&shader); - d.draw_rectangle(0, 0, w, h, Color::WHITE); - } - - d.draw_text( - "(c) Raymarching shader by Iñigo Quilez. MIT License.", - w - 280, - h - 20, - 10, - Color::GRAY, - ); - - //---------------------------------------------------------------------------------- - } -} diff --git a/samples/rgui.rs b/samples/rgui.rs deleted file mode 100644 index e9df553c..00000000 --- a/samples/rgui.rs +++ /dev/null @@ -1,441 +0,0 @@ -#![allow(non_snake_case)] -use raylib::ffi; -use raylib::prelude::*; - -//------------------------------------------------------------------------------------ -// Program main entry point -//------------------------------------------------------------------------------------ -pub fn main() { - // Initialization - //--------------------------------------------------------------------------------------- - let screenWidth = 690; - let screenHeight = 560; - - // let (mut rl, thread) = raylib::init() - // .size(screenWidth, screenHeight) - // .title("rgui") - // .build(); - // let logo = raylib::prelude::Image::load_image("static/logo.png").unwrap(); - // rl.set_window_icon(&logo); - // rl.set_target_fps(60); - - unsafe { - ffi::InitWindow( - screenWidth, - screenHeight, - b"raygui - controls test suite\0".as_ptr() as *const _, - ); - ffi::SetTargetFPS(60); - } - - // GUI controls initialization - //---------------------------------------------------------------------------------- - // let mut dropdownBox000Active = 0; - // let mut dropDown000EditMode = false; - - // let mut dropdownBox001Active = 0; - // let mut dropDown001EditMode = false; - - let mut spinner001Value = 0; - let mut spinnerEditMode = false; - - // let mut valueBox002Value = 0; - // let mut valueBoxEditMode = false; - - // let mut textBoxText = [0u8; 64]; - // textBoxText[..8].clone_from_slice(b"Text box"); - // let mut textBoxEditMode = false; - - // let mut listViewScrollIndex = 0; - // let mut listViewActive = -1; - - // let mut listViewExScrollIndex = 0; - // let mut listViewExActive = 2; - // let mut listViewExFocus = -1; - // let listViewExList = vec![ - // rstr!("This"), - // rstr!("is"), - // rstr!("a"), - // rstr!("list view"), - // rstr!("with"), - // rstr!("disable"), - // rstr!("elements"), - // rstr!("amazing!"), - // ]; - - // let mut multiTextBoxText = [0u8; 256]; - // multiTextBoxText[..14].clone_from_slice(b"Multi text box"); - // let mut multiTextBoxEditMode = false; - // let mut colorPickerValue = Color::RED; - - // let mut sliderValue = 50f32; - // let mut sliderBarValue = 60f32; - // let mut progressValue = 0.4; - - // let mut forceSquaredChecked = false; - - // let mut alphaValue = 0.5; - - // let mut comboBoxActive = 1; - - // let mut toggleGroupActive = 0; - - // let mut viewScroll = rvec2(0, 0); - // //---------------------------------------------------------------------------------- - - // // Custom GUI font loading - // //Font font = LoadFontEx("fonts/rainyhearts16.ttf", 12, 0, 0); - // //GuiSetFont(font); - - let mut exitWindow = false; - // let mut showMessageBox = false; - - // let mut textInput = vec![0u8; 256]; - // let mut showTextInputBox = false; - - // let mut textInputFileName = [0u8; 256]; - - //-------------------------------------------------------------------------------------- - - // Main game loop - while !exitWindow - // Detect window close button or ESC key - { - - use raylib::consts::GuiControl::*; - use raylib::consts::GuiControlProperty::*; - - - use raylib::consts::GuiTextAlignment::*; - - // Update - //---------------------------------------------------------------------------------- - - // exitWindow = rl.window_should_close(); - exitWindow = unsafe { ffi::WindowShouldClose() }; - - // if rl.is_key_pressed(KEY_ESCAPE) { - // showMessageBox = !showMessageBox; - // } - - // if rl.is_key_down(KEY_LEFT_CONTROL) && rl.is_key_pressed(KEY_S) { - // showTextInputBox = true; - // } - - // if rl.is_file_dropped() { - // let droppedFiles = rl.get_dropped_files(); - - // if (droppedFiles.len() > 0) && droppedFiles[0].ends_with(".rgs") { - // rl.gui_load_style(Some(&CString::new(droppedFiles[0].clone()).unwrap())); - // } - - // rl.clear_dropped_files(); - // } - - //---------------------------------------------------------------------------------- - - // Draw - //---------------------------------------------------------------------------------- - // let mut d = rl.begin_drawing(&thread); - // let hex = d.gui_get_style(DEFAULT, BACKGROUND_COLOR as i32); - // d.clear_background(Color::get_color(hex)); - - unsafe { - ffi::BeginDrawing(); - ffi::ClearBackground(Color::WHITE.into()); - } - - // // raygui: controls drawing - // //---------------------------------------------------------------------------------- - // if dropDown000EditMode || dropDown001EditMode { - // d.gui_lock(); - // } - // //GuiDisable(); - - // // First GUI column - // //GuiSetStyle(CHECKBOX, TEXT_ALIGNMENT, GUI_TEXT_ALIGN_LEFT); - // forceSquaredChecked = d.gui_check_box( - // rrect(25, 108, 15, 15), - // Some(rstr!("FORCE CHECK!")), - // forceSquaredChecked, - // ); - - unsafe { - ffi::GuiSetStyle( - TEXTBOX as i32, - TEXT_ALIGNMENT as i32, - GUI_TEXT_ALIGN_CENTER as i32, - ); - } - // dbg!(spinnerEditMode); - // let pos = d.get_mouse_position(); - // let coll = rrect(25, 135, 125, 30).check_collision_point_rec(pos); - // let down = d.is_mouse_button_down(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON); - - // if d.gui_spinner( - // rrect(25, 135, 125, 30), - // None, - // &mut spinner001Value, - // 0, - // 100, - // spinnerEditMode, - // ) { - // spinnerEditMode = dbg!(!spinnerEditMode); - // } - unsafe { - ffi::DrawCircle( - 50, - 50, - 5.0, - if spinnerEditMode { - Color::BLUE.into() - } else { - Color::RED.into() - }, - ); - if ffi::GuiSpinner( - rrect(25, 135, 125, 30).into(), - std::ptr::null(), - &mut spinner001Value, - 0, - 100, - spinnerEditMode, - ) { - spinnerEditMode = dbg!(!spinnerEditMode); - } - // if ffi::GuiSpinner( - // rrect(25, 185, 125, 30).into(), - // std::ptr::null(), - // &mut spinner001Value, - // 0, - // 100, - // false, - // ) { - // // spinnerEditMode = dbg!(!spinnerEditMode); - // } - // if ffi::GuiSpinner( - // rrect(25, 225, 125, 30).into(), - // std::ptr::null(), - // &mut spinner001Value, - // 0, - // 100, - // false, - // ) { - // // spinnerEditMode = dbg!(!spinnerEditMode); - // } - } - // if d.gui_value_box( - // rrect(25, 175, 125, 30), - // None, - // &mut valueBox002Value, - // 0, - // 100, - // valueBoxEditMode, - // ) { - // valueBoxEditMode = !valueBoxEditMode; - // } - // d.gui_set_style(TEXTBOX, TEXT_ALIGNMENT as i32, GUI_TEXT_ALIGN_LEFT as i32); - // if d.gui_text_box(rrect(25, 215, 125, 30), &mut textBoxText, textBoxEditMode) { - // textBoxEditMode = !textBoxEditMode; - // } - - // d.gui_set_style(BUTTON, TEXT_ALIGNMENT as i32, GUI_TEXT_ALIGN_CENTER as i32); - - // let itext = d.gui_icon_text(RICON_FILE_SAVE, Some(rstr!("Save File"))); - // let itext = CString::new(itext).unwrap(); - // if d.gui_button(rrect(25, 255, 125, 30), Some(&itext)) { - // showTextInputBox = true; - // } - - // d.gui_group_box(rrect(25, 310, 125, 150), Some(rstr!("STATES"))); - - // d.gui_lock(); - // d.gui_set_state(GUI_STATE_NORMAL); - // if d.gui_button(rrect(30, 320, 115, 30), Some(rstr!("NORMAL"))) {} - // d.gui_set_state(GUI_STATE_FOCUSED); - // if d.gui_button(rrect(30, 355, 115, 30), Some(rstr!("FOCUSED"))) {} - // d.gui_set_state(GUI_STATE_PRESSED); - // if d.gui_button(rrect(30, 390, 115, 30), Some(rstr!("#15#PRESSED"))) {} - // d.gui_set_state(GUI_STATE_DISABLED); - // if d.gui_button(rrect(30, 425, 115, 30), Some(rstr!("DISABLED"))) {} - // d.gui_set_state(GUI_STATE_NORMAL); - // d.gui_unlock(); - - // comboBoxActive = d.gui_combo_box( - // rrect(25, 470, 125, 30), - // Some(rstr!("ONE;TWO;THREE;FOUR")), - // comboBoxActive, - // ); - - // // NOTE: GuiDropdownBox must draw after any other control that can be covered on unfolding - // d.gui_set_style( - // DROPDOWNBOX, - // TEXT_ALIGNMENT as i32, - // GUI_TEXT_ALIGN_LEFT as i32, - // ); - // if d.gui_dropdown_box( - // rrect(25, 65, 125, 30), - // Some(rstr!("#01#ONE;#02#TWO;#03#THREE;#04#FOUR")), - // &mut dropdownBox001Active, - // dropDown001EditMode, - // ) { - // dropDown001EditMode = !dropDown001EditMode; - // } - - // d.gui_set_style( - // DROPDOWNBOX, - // TEXT_ALIGNMENT as i32, - // GUI_TEXT_ALIGN_CENTER as i32, - // ); - // if d.gui_dropdown_box( - // rrect(25, 25, 125, 30), - // Some(rstr!("ONE;TWO;THREE")), - // &mut dropdownBox000Active, - // dropDown000EditMode, - // ) { - // dropDown000EditMode = !dropDown000EditMode; - // } - - // // Second GUI column - // listViewActive = d.gui_list_view( - // rrect(165, 25, 140, 140), - // Some(rstr!( - // "Charmander;Bulbasaur;#18#Squirtel;Pikachu;Eevee;Pidgey" - // )), - // &mut listViewScrollIndex, - // listViewActive, - // ); - // listViewExActive = d.gui_list_view_ex( - // rrect(165, 180, 140, 200), - // &listViewExList, - // 8, - // &mut listViewExFocus, - // &mut listViewExScrollIndex, - // listViewExActive, - // ); - - // toggleGroupActive = d.gui_toggle_group( - // rrect(165, 400, 140, 25), - // Some(rstr!("#1#ONE\n#3#TWO\n#8#THREE\n#23#")), - // toggleGroupActive, - // ); - - // // Third GUI column - // if d.gui_text_box_multi( - // rrect(320, 25, 225, 140), - // &mut multiTextBoxText, - // multiTextBoxEditMode, - // ) { - // multiTextBoxEditMode = !multiTextBoxEditMode; - // } - // colorPickerValue = d.gui_color_picker(rrect(320, 185, 196, 192), colorPickerValue); - - // sliderValue = d.gui_slider( - // rrect(355, 400, 165, 20), - // Some(rstr!("TEST")), - // Some(&rstr!("{:.2}", sliderValue as f32).unwrap()), - // sliderValue, - // -50.0, - // 100.0, - // ); - // sliderBarValue = d.gui_slider_bar( - // rrect(320, 430, 200, 20), - // None, - // Some(&rstr!("{}", sliderBarValue).unwrap()), - // sliderBarValue, - // 0.0, - // 100.0, - // ); - // progressValue = d.gui_progress_bar( - // rrect(320, 460, 200, 20), - // None, - // None, - // progressValue, - // 0.0, - // 1.0, - // ); - - // // NOTE: View rectangle could be used to perform some scissor test - // let (_view, nextScroll) = d.gui_scroll_panel( - // rrect(560, 25, 100, 160), - // rrect(560, 25, 200, 400), - // viewScroll, - // ); - // viewScroll = nextScroll.into(); - - // d.gui_status_bar( - // rrect(0, d.get_screen_height() - 20, d.get_screen_width(), 20), - // Some(rstr!("This is a status bar")), - // ); - - // alphaValue = d.gui_color_bar_alpha(rrect(320, 490, 200, 30), alphaValue); - - // if showMessageBox { - // d.draw_rectangle( - // 0, - // 0, - // d.get_screen_width(), - // d.get_screen_height(), - // Color::RAYWHITE.fade(0.8), - // ); - // let itext = d.gui_icon_text(RICON_EXIT, Some(rstr!("Close Window"))); - // let itext = CString::new(itext).unwrap(); - // let result = d.gui_message_box( - // rrect( - // d.get_screen_width() / 2 - 125, - // d.get_screen_height() / 2 - 50, - // 250, - // 100, - // ), - // Some(&itext), - // Some(rstr!("Do you really want to exit?")), - // Some(rstr!("Yes;No")), - // ); - - // if ((result == 0) || (result == 2)) { - // showMessageBox = false; - // } else if (result == 1) { - // exitWindow = true; - // } - // } - - // if showTextInputBox { - // d.draw_rectangle( - // 0, - // 0, - // d.get_screen_width(), - // d.get_screen_height(), - // Color::RAYWHITE.fade(0.8), - // ); - // let itext = unsafe { d.gui_icon_text(RICON_FILE_SAVE, Some(rstr!("Save file as..."))) }; - // let itext = CString::new(itext).unwrap(); - // let result = d.gui_text_input_box( - // rrect( - // d.get_screen_width() / 2 - 120, - // d.get_screen_height() / 2 - 60, - // 240, - // 140, - // ), - // Some(&itext), - // Some(rstr!("Introduce a save file name")), - // Some(rstr!("Ok;Cancel")), - // &mut textInput, - // ); - - // if (result == 1) { - // // TODO: Validate textInput value and save - // textInputFileName[..textInput.len()].clone_from_slice(&textInput); - // } - - // if ((result == 0) || (result == 1) || (result == 2)) { - // showTextInputBox = false; - // textInput[0] = b'\0'; - // } - // } - - // d.gui_unlock(); - unsafe { - ffi::EndDrawing(); - } - } -} diff --git a/samples/roguelike.rs b/samples/roguelike.rs deleted file mode 100644 index 43fda09a..00000000 --- a/samples/roguelike.rs +++ /dev/null @@ -1,1921 +0,0 @@ -/// Code almost verbatim from here: http://tomassedovic.github.io/roguelike-tutorial/index.html -/// This only covers up to Part 9 because I'm a human being who needs sleep. Feel free to submit a -/// PR to extend it. -/// IMHO Don't write code like this. Use ECS and other methods to have game objects and components. -/// Only do this as an exercise. -extern crate raylib; -use rand::distributions::WeightedIndex; -use rand::prelude::*; -use rand::Rng; -use raylib::prelude::*; -use serde::{Deserialize, Serialize}; -use std::error::Error; -use std::fs::File; -use std::io::{Read, Write}; -use structopt::StructOpt; -use tcod::map::{FovAlgorithm, Map as FovMap}; - -mod options; - -/// Keep the player at index zero -const PLAYER: usize = 0; - -// Window size -const W: i32 = 800; -const H: i32 = 640; -const SCREEN_WIDTH: i32 = 80; -const SCREEN_HEIGHT: i32 = 50; -const TILE_WIDTH: i32 = W / SCREEN_WIDTH; -const TILE_HEIGHT: i32 = H / SCREEN_HEIGHT; - -// Size for health bars -const BAR_WIDTH: i32 = 20; -const PANEL_HEIGHT: i32 = 7; -const PANEL_Y: i32 = SCREEN_HEIGHT - PANEL_HEIGHT; - -// Size for messages -const MSG_X: i32 = BAR_WIDTH + 2; -const MSG_WIDTH: i32 = SCREEN_WIDTH - BAR_WIDTH - 2; -const MSG_HEIGHT: usize = PANEL_HEIGHT as usize - 1; - -// Size of the map -const MAP_WIDTH: i32 = 80; -const MAP_HEIGHT: i32 = 43; - -// Size of the room -const ROOM_MAX_SIZE: i32 = 10; -const ROOM_MIN_SIZE: i32 = 6; -const MAX_ROOMS: i32 = 30; - -// Color of the world -const COLOR_DARK_WALL: Color = Color::new(0, 0, 100, 255); -const COLOR_DARK_GROUND: Color = Color::new(50, 50, 150, 255); - -// FOV -const FOV_ALGO: FovAlgorithm = FovAlgorithm::Basic; -const FOV_LIGHT_WALLS: bool = true; -const TORCH_RADIUS: i32 = 10; - -// What the inventory menu width looks like -const INVENTORY_WIDTH: i32 = 50; - -// How much an item heals -const HEAL_AMOUNT: i32 = 4; - -// How much damage a lightning spell does -const LIGHTNING_DAMAGE: i32 = 40; -const LIGHTNING_RANGE: i32 = 5; - -// Confusion spell config -const CONFUSE_RANGE: i32 = 8; -const CONFUSE_NUM_TURNS: i32 = 10; - -// Fireball spell config -const FIREBALL_RADIUS: i32 = 3; -const FIREBALL_DAMAGE: i32 = 12; - -// experience and level-ups -const LEVEL_UP_BASE: i32 = 200; -const LEVEL_UP_FACTOR: i32 = 150; - -const LEVEL_SCREEN_WIDTH: i32 = 40; - -const CHARACTER_SCREEN_WIDTH: i32 = 30; -// We can add custom methods to raylib types with extention traits -pub trait RectExt: std::ops::Deref { - fn center(&self) -> (i32, i32) { - let r: &Rectangle = self.deref(); - let center_x = r.y + r.width / 2.0; - let center_y = r.y + r.width / 2.0; - (center_x as i32, center_y as i32) - } -} - -// Boom, rectangles now have a center() method -impl RectExt for &Rectangle {} - -/// Tcod contains the fov map. Unlike the tutorial we won't put framebuffers and other drawing -/// things here -struct Tcod { - fov: FovMap, - mouse: Vector2, -} - -/// This enum tells us if the player has taken an action. This is significant -/// as monsters will not take a turn unless we mark a player action -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] -enum PlayerAction { - TookTurn, - DidntTakeTurn, - Exit, -} - -/// Instead of attaching the closure to a component we mark it with -/// an enum so we can make it serializable -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] -enum DeathCallback { - Player, - Monster, -} - -impl DeathCallback { - /// Simple fn dispatch - fn callback(self, object: &mut Object, game: &mut Game) { - use DeathCallback::*; - let callback: fn(&mut Object, &mut Game) = match self { - Player => player_death, - Monster => monster_death, - }; - callback(object, game); - } -} - -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] -/// An object that can be equipped, yielding bonuses. -struct Equipment { - slot: Slot, - equipped: bool, - power_bonus: i32, - defense_bonus: i32, - max_hp_bonus: i32, -} - -/// Player can hold three items -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] -enum Slot { - LeftHand, - RightHand, - Head, -} - -impl std::fmt::Display for Slot { - fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { - match *self { - Slot::LeftHand => write!(f, "left hand"), - Slot::RightHand => write!(f, "right hand"), - Slot::Head => write!(f, "head"), - } - } -} - -/// Anything that can attack or do damage -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] -struct Fighter { - base_max_hp: i32, - hp: i32, - base_defense: i32, - base_power: i32, - xp: i32, - on_death: DeathCallback, -} - -/// Monsters have to move somehow -#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] -enum Ai { - Basic, - Confused { - previous_ai: Box, - num_turns: i32, - }, -} - -/// Pickups in the world -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize)] -enum Item { - Heal, - Lightning, - Confuse, - Fireball, - Sword, - Shield, -} - -/// What to do with an item after using it -enum UseResult { - UsedUp, - UsedAndKept, - Cancelled, -} - -/// We need to Serialize Colors. Unfortunately we can't use the trait extension -/// method we did before -#[derive(Clone, Copy, Debug, Serialize, Deserialize)] -struct Col(u8, u8, u8, u8); - -impl From for Color { - fn from(col: Col) -> Self { - Self::new(col.0, col.1, col.2, col.3) - } -} - -impl From for Col { - fn from(color: Color) -> Self { - Self(color.r, color.g, color.b, color.a) - } -} - -/// Objects in the game. Items, monsters and the player. Items go in inventory. -/// insead of the objects vector -#[derive(Clone, Debug, Serialize, Deserialize)] -struct Object { - x: i32, - y: i32, - char: String, - color: Col, - name: String, - blocks: bool, - alive: bool, - fighter: Option, - ai: Option, - item: Option, - equipment: Option, - level: i32, - always_visible: bool, -} - -impl Object { - pub fn new(x: i32, y: i32, char: char, name: &str, color: Color, blocks: bool) -> Self { - Object { - x, - y, - char: char.to_string(), - color: color.into(), - name: name.into(), - alive: false, - blocks, - fighter: None, - ai: None, - item: None, - equipment: None, - level: 1, - always_visible: false, - } - } - - pub fn set_pos(&mut self, x: i32, y: i32) { - self.x = x; - self.y = y; - } - - pub fn pos(&self) -> (i32, i32) { - (self.x, self.y) - } - - /// return the distance to some coordinates - pub fn distance(&self, x: i32, y: i32) -> f32 { - (((x - self.x).pow(2) + (y - self.y).pow(2)) as f32).sqrt() - } - - pub fn distance_to(&self, other: &Object) -> f32 { - let dx = other.x - self.x; - let dy = other.y - self.y; - ((dx.pow(2) + dy.pow(2)) as f32).sqrt() - } - - pub fn power(&self, game: &Game) -> i32 { - let base_power = self.fighter.map_or(0, |f| f.base_power); - let bonus: i32 = self - .get_all_equipped(game) - .iter() - .map(|e| e.power_bonus) - .sum(); - base_power + bonus - } - pub fn defense(&self, game: &Game) -> i32 { - let base_defense = self.fighter.map_or(0, |f| f.base_defense); - let bonus: i32 = self - .get_all_equipped(game) - .iter() - .map(|e| e.defense_bonus) - .sum(); - base_defense + bonus - } - - pub fn max_hp(&self, game: &Game) -> i32 { - let base_max_hp = self.fighter.map_or(0, |f| f.base_max_hp); - let bonus: i32 = self - .get_all_equipped(game) - .iter() - .map(|e| e.max_hp_bonus) - .sum(); - base_max_hp + bonus - } - - pub fn take_damage(&mut self, damage: i32, game: &mut Game) -> Option { - if let Some(fighter) = self.fighter.as_mut() { - if damage > 0 { - fighter.hp -= damage; - } - } - - if let Some(fighter) = self.fighter { - if fighter.hp <= 0 { - self.alive = false; - fighter.on_death.callback(self, game); - return Some(fighter.xp); - } - } - None - } - - /// heal by the given amount, without going over the maximum - pub fn heal(&mut self, amount: i32, game: &Game) { - let _max_hp = self.max_hp(game); - if let Some(ref mut fighter) = self.fighter { - fighter.hp += amount; - if fighter.hp > fighter.base_max_hp { - fighter.hp = fighter.base_max_hp; - } - } - } - - pub fn attack(&mut self, target: &mut Object, game: &mut Game) { - let damage = self.power(game) - target.defense(game); - if damage > 0 { - game.messages.add( - &format!( - "{} attacks {} for {} hit points.", - self.name, target.name, damage - ), - Color::WHITE, - ); - if let Some(xp) = target.take_damage(damage, game) { - // yield experience to the player - self.fighter.as_mut().unwrap().xp += xp; - } - } else { - game.messages.add( - &format!( - "{} attacks {} but it has no effect!", - self.name, target.name - ), - Color::WHITE, - ); - } - } - - /// returns a list of equipped items - pub fn get_all_equipped(&self, game: &Game) -> Vec { - if self.name == "player" { - game.inventory - .iter() - .filter(|item| item.equipment.map_or(false, |e| e.equipped)) - .map(|item| item.equipment.unwrap()) - .collect() - } else { - vec![] // other objects have no equipment - } - } - - /// Equip object and show a message about it - pub fn equip(&mut self, messages: &mut Messages) { - if self.item.is_none() { - messages.add( - format!("Can't equip {:?} because it's not an Item.", self), - Color::RED, - ); - return; - }; - if let Some(ref mut equipment) = self.equipment { - if !equipment.equipped { - equipment.equipped = true; - messages.add( - format!("Equipped {} on {}.", self.name, equipment.slot), - Color::GREEN, - ); - } - } else { - messages.add( - format!("Can't equip {:?} because it's not an Equipment.", self), - Color::RED, - ); - } - } - - /// Dequip object and show a message about it - pub fn dequip(&mut self, messages: &mut Messages) { - if self.item.is_none() { - messages.add( - format!("Can't dequip {:?} because it's not an Item.", self), - Color::RED, - ); - return; - }; - if let Some(ref mut equipment) = self.equipment { - if equipment.equipped { - equipment.equipped = false; - messages.add( - format!("Dequipped {} from {}.", self.name, equipment.slot), - Color::YELLOW, - ); - } - } else { - messages.add( - format!("Can't dequip {:?} because it's not an Equipment.", self), - Color::RED, - ); - } - } - - pub fn draw(&self, d: &mut RaylibDrawHandle) { - let c: Color = self.color.into(); - d.draw_text( - &self.char, - self.x * TILE_WIDTH, - self.y * TILE_HEIGHT, - TILE_HEIGHT, - c, - ); - } -} - -struct Transition { - level: u32, - value: u32, -} - -/// Returns a value that depends on level. the table specifies what -/// value occurs after each level, default is 0. -fn from_dungeon_level(table: &[Transition], level: u32) -> u32 { - table - .iter() - .rev() - .find(|transition| level >= transition.level) - .map_or(0, |transition| transition.value) -} - -#[derive(Clone, Copy, Debug, Serialize, Deserialize)] -struct Tile { - blocked: bool, - block_sight: bool, - explored: bool, -} - -impl Tile { - pub fn empty() -> Self { - Self { - blocked: false, - explored: false, - block_sight: false, - } - } - pub fn wall() -> Self { - Self { - blocked: true, - explored: false, - block_sight: true, - } - } -} - -#[derive(Clone, Default, Serialize, Deserialize)] -struct Messages { - messages: Vec<(String, Col)>, -} - -impl Messages { - pub fn new() -> Self { - Self { messages: vec![] } - } - - pub fn add>(&mut self, message: T, color: Color) { - self.messages.push((message.into(), color.into())); - } - - pub fn iter(&self) -> impl DoubleEndedIterator { - self.messages.iter() - } -} - -type Map = Vec>; - -#[derive(Serialize, Deserialize)] -struct Game { - pub map: Map, - messages: Messages, - inventory: Vec, - dungeon_level: u32, -} - -fn new_game(tcod: &mut Tcod) -> (Game, Vec) { - // create object representing the player - let mut player = Object::new(0, 0, '@', "player", Color::WHITE, true); - player.alive = true; - player.fighter = Some(Fighter { - base_max_hp: 100, - hp: 100, - base_defense: 1, - base_power: 2, - xp: 0, - on_death: DeathCallback::Player, - }); - - // the list of objects with just the player - let mut objects = vec![player]; - - let mut game = Game { - // generate map (at this point it's not drawn to the screen) - map: make_map(&mut objects, 1), - messages: Messages::new(), - inventory: vec![], - dungeon_level: 1, - }; - - // initial equipment: a dagger - let mut dagger = Object::new(0, 0, '-', "dagger", Color::BLACK, false); - dagger.item = Some(Item::Sword); - dagger.equipment = Some(Equipment { - equipped: true, - slot: Slot::LeftHand, - max_hp_bonus: 0, - defense_bonus: 0, - power_bonus: 2, - }); - game.inventory.push(dagger); - - initialise_fov(tcod, &game.map); - - // a warm welcoming message! - game.messages.add( - "Welcome stranger! Prepare to perish in the Tombs of the Ancient Kings.", - Color::RED, - ); - - (game, objects) -} -/// Advance to the next level -fn next_level(tcod: &mut Tcod, game: &mut Game, objects: &mut Vec) { - game.messages.add( - "You take a moment to rest, and recover your strength.", - Color::VIOLET, - ); - let heal_hp = objects[PLAYER].max_hp(game) / 2; - objects[PLAYER].heal(heal_hp, game); - - game.messages.add( - "After a rare moment of peace, you descend deeper into \ - the heart of the dungeon...", - Color::RED, - ); - game.dungeon_level += 1; - game.map = make_map(objects, game.dungeon_level); - initialise_fov(tcod, &game.map); -} - -fn initialise_fov(tcod: &mut Tcod, map: &Map) { - // create the FOV map, according to the generated map - for y in 0..MAP_HEIGHT { - for x in 0..MAP_WIDTH { - tcod.fov.set( - x, - y, - !map[x as usize][y as usize].block_sight, - !map[x as usize][y as usize].blocked, - ); - } - } -} - -fn make_map(objects: &mut Vec, level: u32) -> Map { - let mut map = vec![vec![Tile::wall(); MAP_HEIGHT as usize]; MAP_WIDTH as usize]; - assert_eq!(&objects[PLAYER] as *const _, &objects[0] as *const _); - objects.truncate(1); - let room1 = Rectangle::new(20.0, 15.0, 10.0, 15.0); - let room2: Rectangle = Rectangle::new(50.0, 15.0, 10.0, 15.0); - - create_room(&room1, &mut map); - create_room(&room2, &mut map); - create_h_tunnel(25, 55, 23, &mut map); - - let mut rooms = vec![]; - for _ in 0..MAX_ROOMS { - let w = rand::thread_rng().gen_range(ROOM_MIN_SIZE, ROOM_MAX_SIZE + 1); - let h = rand::thread_rng().gen_range(ROOM_MIN_SIZE, ROOM_MAX_SIZE + 1); - let x = rand::thread_rng().gen_range(0, MAP_WIDTH - w); - let y = rand::thread_rng().gen_range(0, MAP_HEIGHT - h); - - let new_room = Rectangle::new(x as f32, y as f32, w as f32, h as f32); - let failed = rooms - .iter() - .any(|other| new_room.check_collision_recs(other)); - - if !failed { - create_room(&new_room, &mut map); - place_objects(new_room, &mut map, objects, level); - - // get the center of the room - let (new_x, new_y) = (&new_room).center(); - - if rooms.is_empty() { - // player room - objects[PLAYER].set_pos(new_x, new_y); - } else { - let (prev_x, prev_y) = (&rooms[rooms.len() - 1]).center(); - // toss a coin and pick if we move horizontally or vertically - if rand::random() { - create_h_tunnel(prev_x, new_x, prev_y, &mut map); - create_v_tunnel(prev_y, new_y, new_x, &mut map); - } else { - create_v_tunnel(prev_y, new_y, prev_x, &mut map); - create_h_tunnel(prev_x, new_x, new_y, &mut map); - } - } - - rooms.push(new_room) - } - } - - // create stairs at the center of the last room - let (last_room_x, last_room_y) = (&rooms[rooms.len() - 1]).center(); - let mut stairs = Object::new(last_room_x, last_room_y, '<', "stairs", Color::WHITE, false); - stairs.always_visible = true; - objects.push(stairs); - - map -} - -fn place_objects(room: Rectangle, map: &Map, objects: &mut Vec, level: u32) { - // monster random table - let max_monsters = from_dungeon_level( - &[ - Transition { level: 1, value: 2 }, - Transition { level: 4, value: 3 }, - Transition { level: 6, value: 5 }, - ], - level, - ); - - // choose random number of monsters - let num_monsters = rand::thread_rng().gen_range(0, max_monsters + 1); - - for _ in 0..num_monsters { - let x = rand::thread_rng().gen_range(room.x + 1.0, room.x + room.width) as i32; - let y = rand::thread_rng().gen_range(room.y + 1.0, room.y + room.height) as i32; - - // monster random table - let troll_chance = from_dungeon_level( - &[ - Transition { - level: 3, - value: 15, - }, - Transition { - level: 5, - value: 30, - }, - Transition { - level: 7, - value: 60, - }, - ], - level, - ); - - let monsters = ["orc", "troll"]; - let monster_weights = [80, troll_chance]; - let moster_distribution = WeightedIndex::new(&monster_weights).unwrap(); - let mut rng = thread_rng(); - - let mut monster = match monsters[moster_distribution.sample(&mut rng)] { - "orc" => { - // create an orc - let mut orc = Object::new(x, y, 'o', "orc", Color::GREEN.fade(0.8), true); - orc.fighter = Some(Fighter { - base_max_hp: 20, - hp: 20, - base_defense: 0, - base_power: 4, - xp: 35, - on_death: DeathCallback::Monster, - }); - orc.ai = Some(Ai::Basic); - - orc - } - "troll" => { - // create a troll - let mut troll = Object::new(x, y, 'T', "troll", Color::GREEN, true); - troll.fighter = Some(Fighter { - base_max_hp: 30, - hp: 30, - base_defense: 2, - base_power: 8, - xp: 100, - on_death: DeathCallback::Monster, - }); - troll.ai = Some(Ai::Basic); - troll - } - _ => unreachable!(), - }; - - monster.alive = true; - objects.push(monster) - } - - // place items - // choose random number of items - // maximum number of items per room - let max_items = from_dungeon_level( - &[ - Transition { level: 1, value: 1 }, - Transition { level: 4, value: 2 }, - ], - level, - ); - - // item random table - let items = [ - Item::Heal, - Item::Lightning, - Item::Fireball, - Item::Confuse, - Item::Sword, - Item::Shield, - ]; - let item_weights = [ - 32, - from_dungeon_level( - &[Transition { - level: 4, - value: 25, - }], - level, - ), - from_dungeon_level( - &[Transition { - level: 6, - value: 25, - }], - level, - ), - from_dungeon_level( - &[Transition { - level: 2, - value: 10, - }], - level, - ), - from_dungeon_level(&[Transition { level: 4, value: 5 }], level), - from_dungeon_level( - &[Transition { - level: 8, - value: 15, - }], - level, - ), - ]; - - // choose random number of items - let num_items = rand::thread_rng().gen_range(0, max_items + 1); - for _ in 0..num_items { - // choose random spot for this item - let x = rand::thread_rng().gen_range(room.x as i32 + 1, (room.x + room.width) as i32); - let y = rand::thread_rng().gen_range(room.y as i32 + 1, (room.y + room.height) as i32); - - // only place it if the tile is not blocked - if !is_blocked(x, y, map, objects) { - let item_distribution = WeightedIndex::new(&item_weights).unwrap(); - let mut item = match items[item_distribution.sample(&mut thread_rng())] { - Item::Heal => { - // create a healing potion - let mut object = - Object::new(x, y, '!', "healing potion", Color::MAGENTA, false); - object.item = Some(Item::Heal); - object - } - Item::Lightning => { - // create a lightning bolt scroll - let mut object = - Object::new(x, y, '#', "scroll of lightning bolt", Color::YELLOW, false); - object.item = Some(Item::Lightning); - object - } - Item::Fireball => { - // create a fireball scroll - let mut object = - Object::new(x, y, '#', "scroll of fireball", Color::YELLOW, false); - object.item = Some(Item::Fireball); - object - } - Item::Confuse => { - // create a confuse scroll - let mut object = - Object::new(x, y, '#', "scroll of confusion", Color::YELLOW, false); - object.item = Some(Item::Confuse); - object - } - Item::Shield => { - // create a shield - let mut object = Object::new(x, y, '[', "shield", Color::ORANGE, false); - object.item = Some(Item::Shield); - object.equipment = Some(Equipment { - equipped: false, - slot: Slot::LeftHand, - max_hp_bonus: 0, - defense_bonus: 1, - power_bonus: 0, - }); - object - } - - Item::Sword => { - // create a sword - let mut object = Object::new(x, y, '/', "sword", Color::BLACK, false); - object.item = Some(Item::Sword); - object.equipment = Some(Equipment { - equipped: false, - slot: Slot::RightHand, - max_hp_bonus: 0, - defense_bonus: 0, - power_bonus: 3, - }); - object - } - }; - - item.always_visible = true; - objects.push(item); - } - } -} - -fn is_blocked(x: i32, y: i32, map: &Map, objects: &[Object]) -> bool { - if map[x as usize][y as usize].blocked { - return true; - } - - objects - .iter() - .any(|object| object.blocks && object.pos() == (x, y)) -} - -/// find closest enemy, up to a maximum range, and in the player's FOV -fn closest_monster(tcod: &Tcod, objects: &[Object], max_range: i32) -> Option { - let mut closest_enemy = None; - let mut closest_dist = (max_range + 1) as f32; // start with (slightly more than) maximum range - - for (id, object) in objects.iter().enumerate() { - if (id != PLAYER) - && object.fighter.is_some() - && object.ai.is_some() - && tcod.fov.is_in_fov(object.x, object.y) - { - // calculate distance between this object and the player - let dist = objects[PLAYER].distance_to(object); - if dist < closest_dist { - // it's closer, so remember it - closest_enemy = Some(id); - closest_dist = dist; - } - } - } - closest_enemy -} - -fn create_room(room: &Rectangle, map: &mut Map) { - for x in ((room.x + 1.0) as usize)..((room.x + room.width) as usize) { - for y in (room.y + 1.0) as usize..(room.y + room.height) as usize { - map[x][y] = Tile::empty(); - } - } -} - -fn create_h_tunnel(x1: i32, x2: i32, y: i32, map: &mut Map) { - for x in x1.min(x2)..(x1.max(x2) + 1) { - map[x as usize][y as usize] = Tile::empty(); - } -} - -fn create_v_tunnel(y1: i32, y2: i32, x: i32, map: &mut Map) { - for y in y1.min(y2)..(y1.max(y2) + 1) { - map[x as usize][y as usize] = Tile::empty(); - } -} - -fn get_names_under_mouse(mouse: Vector2, objects: &[Object], fov_map: &FovMap) -> String { - let (x, y) = (mouse.x as i32 / TILE_WIDTH, mouse.y as i32 / TILE_HEIGHT); - - let names = objects - .iter() - .filter(|obj| obj.pos() == (x, y) && fov_map.is_in_fov(obj.x, obj.y)) - .map(|obj| obj.name.clone()) - .collect::>(); - - names.join(", ") -} - -fn get_equipped_in_slot(slot: Slot, inventory: &[Object]) -> Option { - for (inventory_id, item) in inventory.iter().enumerate() { - if item - .equipment - .as_ref() - .map_or(false, |e| e.equipped && e.slot == slot) - { - return Some(inventory_id); - } - } - None -} - -fn play_game( - rl: &mut RaylibHandle, - thread: &RaylibThread, - tcod: &mut Tcod, - game: &mut Game, - objects: &mut Vec, -) { - // force FOV "recompute" through the game loop - let previous_player_positon = (-1, -1); - - while !rl.window_should_close() { - // logic - // handle game logic - level_up(rl, thread, game, objects); - - if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) { - tcod.mouse = rl.get_mouse_position(); - } - - let player_action = handle_keys(rl, thread, tcod, game, objects); - if player_action == PlayerAction::Exit { - save_game(game, objects).unwrap(); - break; - } - if objects[PLAYER].alive && player_action != PlayerAction::DidntTakeTurn { - for id in 0..objects.len() { - if objects[id].ai.is_some() { - ai_take_turn(id, &tcod, game, objects); - } - } - } - - // drawing - let mut d = rl.begin_drawing(&thread); - d.clear_background(Color::GRAY); - let player = &objects[PLAYER]; - let fov_recompute = previous_player_positon != (player.x, player.y); - render_all(tcod, &mut d, game, objects, fov_recompute); - } -} - -fn main() { - let mut opt = options::Opt::from_args(); - opt.width = 800; - opt.height = 640; - let (mut rl, thread) = opt.open_window("Roguelike"); - let (_w, _h) = (opt.width, opt.height); - rl.set_target_fps(20); - - // build FOV map - let mut tcod = Tcod { - fov: FovMap::new(MAP_WIDTH, MAP_HEIGHT), - mouse: Vector2::default(), - }; - - main_menu(&mut rl, &thread, &mut tcod); -} - -fn handle_keys( - rl: &mut RaylibHandle, - thread: &RaylibThread, - tcod: &mut Tcod, - game: &mut Game, - objects: &mut Vec, -) -> PlayerAction { - use raylib::consts::KeyboardKey::*; - use PlayerAction::*; - - let pressed_key = rl.get_key_pressed_number(); - - if rl.is_key_down(KEY_LEFT_ALT) && rl.is_key_pressed(KEY_ENTER) { - rl.toggle_fullscreen(); - return DidntTakeTurn; - } - - if rl.is_key_pressed(KEY_Q) { - return Exit; - } - - let player_alive = objects[PLAYER].alive; - if player_alive { - if rl.is_key_pressed(KEY_W) { - player_move_or_attack(0, -1, game, objects); - } else if rl.is_key_pressed(KEY_S) { - player_move_or_attack(0, 1, game, objects); - } else if rl.is_key_pressed(KEY_A) { - player_move_or_attack(-1, 0, game, objects); - } else if rl.is_key_pressed(KEY_D) { - player_move_or_attack(1, 0, game, objects); - } else if rl.is_key_pressed(KEY_G) { - let item_id = objects - .iter() - .position(|object| object.pos() == objects[PLAYER].pos() && object.item.is_some()); - if let Some(item_id) = item_id { - pick_item_up(item_id, game, objects); - } - } else if rl.is_key_pressed(KEY_I) { - // menus - let mut exit = false; - while !rl.window_should_close() { - let inventory_index = { - let mut d = rl.begin_drawing(thread); - render_all(tcod, &mut d, game, objects, false); - inventory_menu( - &game.inventory, - "Press the key next to an item to use it, or any other to cancel.", - pressed_key, - &mut d, - ) - }; - // using items - if let Some(inventory_index) = inventory_index { - use_item(rl, &thread, inventory_index, tcod, game, objects); - break; - } - if exit { - break; - } - if let Some(_key) = rl.get_key_pressed_number() { - exit = true; - } - } - } else if rl.is_key_pressed(KEY_F) { - let mut exit = false; - while !rl.window_should_close() { - let inventory_index = { - let mut d = rl.begin_drawing(thread); - render_all(tcod, &mut d, game, objects, false); - inventory_menu( - &game.inventory, - "Press the key next to an item to drop it, or any other to cancel.\n'", - pressed_key, - &mut d, - ) - }; - // using items - if let Some(inventory_index) = inventory_index { - drop_item(inventory_index, game, objects); - break; - } - if exit { - break; - } - if let Some(_key) = rl.get_key_pressed_number() { - exit = true; - } - } - } else if rl.is_key_pressed(KEY_COMMA) { - let player_on_stairs = objects - .iter() - .any(|object| object.pos() == objects[PLAYER].pos() && object.name == "stairs"); - if player_on_stairs { - next_level(tcod, game, objects); - } - return DidntTakeTurn; - } else if rl.is_key_pressed(KEY_C) { - while !rl.window_should_close() { - let player = &objects[PLAYER]; - let level = player.level; - let level_up_xp = LEVEL_UP_BASE + player.level * LEVEL_UP_FACTOR; - if let Some(fighter) = player.fighter.as_ref() { - let msg = format!( - "Character information - -Level: {} -Experience: {} -Experience to level up: {} - -Maximum HP: {} -Attack: {} -Defense: {}", - level, - fighter.xp, - level_up_xp, - player.max_hp(game), - player.power(game), - player.defense(game) - ); - { - let mut d = rl.begin_drawing(thread); - render_all(tcod, &mut d, game, objects, false); - msgbox(&msg, CHARACTER_SCREEN_WIDTH, pressed_key, &mut d); - } - if let Some(_key) = rl.get_key_pressed_number() { - break; - } - } - } - } else { - return DidntTakeTurn; - } - return TookTurn; - } - return DidntTakeTurn; -} - -/// add to the player's inventory and remove from the map -fn pick_item_up(object_id: usize, game: &mut Game, objects: &mut Vec) { - if game.inventory.len() >= 26 { - game.messages.add( - format!( - "Your inventory is full, cannot pick up {}.", - objects[object_id].name - ), - Color::RED, - ); - } else { - let item = objects.swap_remove(object_id); - game.messages - .add(format!("You picked up a {}!", item.name), Color::GREEN); - let index = game.inventory.len(); - let slot = item.equipment.map(|e| e.slot); - game.inventory.push(item); - - if let Some(slot) = slot { - if get_equipped_in_slot(slot, &game.inventory).is_none() { - game.inventory[index].equip(&mut game.messages); - } - } - } -} - -fn drop_item(inventory_id: usize, game: &mut Game, objects: &mut Vec) { - let mut item = game.inventory.remove(inventory_id); - if item.equipment.is_some() { - item.dequip(&mut game.messages); - } - item.set_pos(objects[PLAYER].x, objects[PLAYER].y); - game.messages - .add(format!("You dropped a {}.", item.name), Color::YELLOW); - objects.push(item); -} - -fn use_item( - rl: &mut RaylibHandle, - thread: &RaylibThread, - inventory_id: usize, - tcod: &mut Tcod, - game: &mut Game, - objects: &mut [Object], -) { - use Item::*; - // just call the "use_function" if it is defined - if let Some(item) = game.inventory[inventory_id].item { - let on_use = match item { - Heal => cast_heal, - Lightning => cast_lightning, - Confuse => cast_confuse, - Fireball => cast_fireball, - Sword => toggle_equipment, - Shield => toggle_equipment, - }; - match on_use(rl, thread, inventory_id, tcod, game, objects) { - UseResult::UsedUp => { - // destroy after use, unless it was cancelled for some reason - game.inventory.remove(inventory_id); - } - UseResult::UsedAndKept => {} // do nothing - UseResult::Cancelled => { - game.messages.add("Cancelled", Color::WHITE); - } - } - } else { - game.messages.add( - format!("The {} cannot be used.", game.inventory[inventory_id].name), - Color::WHITE, - ); - } -} - -fn cast_heal( - _rl: &mut RaylibHandle, - _thread: &RaylibThread, - _inventory_id: usize, - _tcod: &mut Tcod, - game: &mut Game, - objects: &mut [Object], -) -> UseResult { - // heal the player - if let Some(fighter) = objects[PLAYER].fighter { - if fighter.hp == fighter.base_max_hp { - game.messages - .add("You are already at full health.", Color::RED); - return UseResult::Cancelled; - } - game.messages - .add("Your wounds start to feel better!", Color::VIOLET); - objects[PLAYER].heal(HEAL_AMOUNT, game); - return UseResult::UsedUp; - } - UseResult::Cancelled -} - -fn cast_lightning( - _rl: &mut RaylibHandle, - _thread: &RaylibThread, - _inventory_id: usize, - tcod: &mut Tcod, - game: &mut Game, - objects: &mut [Object], -) -> UseResult { - // find closest enemy (inside a maximum range and damage it) - let monster_id = closest_monster(tcod, objects, LIGHTNING_RANGE); - if let Some(monster_id) = monster_id { - // zap it! - game.messages.add( - format!( - "A lightning bolt strikes the {} with a loud thunder! \ - The damage is {} hit points.", - objects[monster_id].name, LIGHTNING_DAMAGE - ), - Color::BLUE, - ); - if let Some(xp) = objects[monster_id].take_damage(LIGHTNING_DAMAGE, game) { - objects[PLAYER].fighter.as_mut().unwrap().xp += xp; - } - UseResult::UsedUp - } else { - // no enemy found within maximum range - game.messages - .add("No enemy is close enough to strike.", Color::RED); - UseResult::Cancelled - } -} - -fn cast_confuse( - rl: &mut RaylibHandle, - thread: &RaylibThread, - _inventory_id: usize, - tcod: &mut Tcod, - game: &mut Game, - objects: &mut [Object], -) -> UseResult { - // find closest enemy in-range and confuse it - game.messages.add( - "Left-click an enemy to confuse it, or right-click to cancel.", - Color::BLUE, - ); - let monster_id = target_monster(rl, thread, tcod, game, objects, Some(CONFUSE_RANGE as f32)); - if let Some(monster_id) = monster_id { - let old_ai = objects[monster_id].ai.take().unwrap_or(Ai::Basic); - // replace the monster's AI with a "confused" one; after - // some turns it will restore the old AI - objects[monster_id].ai = Some(Ai::Confused { - previous_ai: Box::new(old_ai), - num_turns: CONFUSE_NUM_TURNS, - }); - game.messages.add( - format!( - "The eyes of {} look vacant, as he starts to stumble around!", - objects[monster_id].name - ), - Color::GREEN, - ); - UseResult::UsedUp - } else { - // no enemy fonud within maximum range - game.messages - .add("No enemy is close enough to strike.", Color::RED); - UseResult::Cancelled - } -} - -fn cast_fireball( - rl: &mut RaylibHandle, - thread: &RaylibThread, - _inventory_id: usize, - tcod: &mut Tcod, - game: &mut Game, - objects: &mut [Object], -) -> UseResult { - // ask the player for a target tile to throw a fireball at - game.messages.add( - "Left-click a target tile for the fireball, or right-click to cancel.", - Color::BLUE, - ); - let (x, y) = match target_tile(rl, thread, tcod, game, objects, None) { - Some(tile_pos) => tile_pos, - None => return UseResult::Cancelled, - }; - game.messages.add( - format!( - "The fireball explodes, burning everything within {} tiles!", - FIREBALL_RADIUS - ), - Color::ORANGE, - ); - - let mut xp_to_gain = 0; - for (id, obj) in objects.iter_mut().enumerate() { - if obj.distance(x, y) <= FIREBALL_RADIUS as f32 && obj.fighter.is_some() { - game.messages.add( - format!( - "The {} gets burned for {} hit points.", - obj.name, FIREBALL_DAMAGE - ), - Color::ORANGE, - ); - if let Some(xp) = obj.take_damage(FIREBALL_DAMAGE, game) { - if id != PLAYER { - xp_to_gain += xp; - } - } - } - } - objects[PLAYER].fighter.as_mut().unwrap().xp += xp_to_gain; - - UseResult::UsedUp -} - -fn toggle_equipment( - _rl: &mut RaylibHandle, - _thread: &RaylibThread, - inventory_id: usize, - _tcod: &mut Tcod, - game: &mut Game, - _objects: &mut [Object], -) -> UseResult { - let equipment = match game.inventory[inventory_id].equipment { - Some(equipment) => equipment, - None => return UseResult::Cancelled, - }; - // if the slot is already being used, dequip whatever is there first - if let Some(current) = get_equipped_in_slot(equipment.slot, &game.inventory) { - game.inventory[current].dequip(&mut game.messages); - } else { - game.inventory[inventory_id].equip(&mut game.messages); - } - UseResult::UsedAndKept -} - -fn player_move_or_attack(dx: i32, dy: i32, game: &mut Game, objects: &mut [Object]) { - let x = objects[PLAYER].x + dx; - let y = objects[PLAYER].y + dy; - - // try to find an attackable object there - let target_id = objects - .iter() - .position(|object| object.fighter.is_some() && object.pos() == (x, y)); - - match target_id { - Some(target_id) => { - let (player, target) = mut_two(PLAYER, target_id, objects); - player.attack(target, game); - } - None => move_by(PLAYER, dx, dy, &game.map, objects), - } -} - -fn ai_take_turn(monster_id: usize, tcod: &Tcod, game: &mut Game, objects: &mut [Object]) { - use Ai::*; - if let Some(ai) = objects[monster_id].ai.take() { - let new_ai = match ai { - Basic => ai_basic(monster_id, tcod, game, objects), - Confused { - previous_ai, - num_turns, - } => ai_confused(monster_id, tcod, game, objects, previous_ai, num_turns), - }; - objects[monster_id].ai = Some(new_ai); - } -} - -fn ai_basic(monster_id: usize, tcod: &Tcod, game: &mut Game, objects: &mut [Object]) -> Ai { - // a basic monster takes its turn. If you can see it, it can see you - let (monster_x, monster_y) = objects[monster_id].pos(); - if tcod.fov.is_in_fov(monster_x, monster_y) { - if objects[monster_id].distance_to(&objects[PLAYER]) >= 2.0 { - // move towards player if far away - let (player_x, player_y) = objects[PLAYER].pos(); - move_towards(monster_id, player_x, player_y, &game.map, objects); - } else if objects[PLAYER].fighter.map_or(false, |f| f.hp > 0) { - // close enough, attack! (if the player is still alive.) - let (monster, player) = mut_two(monster_id, PLAYER, objects); - monster.attack(player, game); - } - } - Ai::Basic -} - -fn ai_confused( - monster_id: usize, - _tcod: &Tcod, - game: &mut Game, - objects: &mut [Object], - previous_ai: Box, - num_turns: i32, -) -> Ai { - if num_turns >= 0 { - // still confused ... - // move in a random direction, and decrease the number of turns confused - move_by( - monster_id, - rand::thread_rng().gen_range(-1, 2), - rand::thread_rng().gen_range(-1, 2), - &game.map, - objects, - ); - Ai::Confused { - previous_ai: previous_ai, - num_turns: num_turns - 1, - } - } else { - // restore the previous AI (this one will be deleted) - game.messages.add( - format!("The {} is no longer confused!", objects[monster_id].name), - Color::RED, - ); - *previous_ai - } -} - -fn move_towards(id: usize, target_x: i32, target_y: i32, map: &Map, objects: &mut [Object]) { - let dx = target_x - objects[id].x; - let dy = target_y - objects[id].y; - let distance = ((dx.pow(2) + dy.pow(2)) as f32).sqrt(); - - // normalize it to length 1 (preseving direction), then round it - // convert to integer so the movement is restricted to the map grid - let dx = (dx as f32 / distance).round() as i32; - let dy = (dy as f32 / distance).round() as i32; - move_by(id, dx, dy, map, objects); -} - -fn move_by(id: usize, dx: i32, dy: i32, map: &Map, objects: &mut [Object]) { - let (x, y) = objects[id].pos(); - if !is_blocked(x + dx, y + dy, map, objects) { - objects[id].set_pos(x + dx, y + dy); - } -} - -fn level_up(rl: &mut RaylibHandle, thread: &RaylibThread, game: &mut Game, objects: &mut [Object]) { - let player = &mut objects[PLAYER]; - let level_up_xp = LEVEL_UP_BASE + player.level * LEVEL_UP_FACTOR; - // see if the player's experience is enough to level-up - if player.fighter.as_ref().map_or(0, |f| f.xp) >= level_up_xp { - // it is! level up - player.level += 1; - game.messages.add( - format!( - "Your battle skills grow stronger! You reached level {}!", - player.level - ), - Color::YELLOW, - ); - let fighter = player.fighter.as_mut().unwrap(); - let mut choice = None; - while choice.is_none() { - let pressed_key = rl.get_key_pressed_number(); - let mut d = rl.begin_drawing(thread); - // keep asking until a choice is made - choice = menu( - "Level up! Choose a stat to raise:\n", - &[ - format!("Constitution (+20 HP, from {})", fighter.base_max_hp), - format!("Strength (+1 attack, from {})", fighter.base_power), - format!("Agility (+1 defense, from {})", fighter.base_defense), - ], - LEVEL_SCREEN_WIDTH, - pressed_key, - &mut d, - ); - } - fighter.xp -= level_up_xp; - match choice.unwrap() { - 0 => { - fighter.base_max_hp += 20; - fighter.hp += 20; - } - 1 => { - fighter.base_power += 1; - } - 2 => { - fighter.base_defense += 1; - } - _ => unreachable!(), - } - } -} - -fn player_death(player: &mut Object, game: &mut Game) { - game.messages.add("You died!", Color::RED); - - player.char = "%".to_owned(); - player.color = Color::DARKPURPLE.into(); -} - -fn monster_death(monster: &mut Object, game: &mut Game) { - game.messages - .add(&format!("{} is dead!", monster.name), Color::ORANGE); - // transform it into a nasty corpse! it doesn't block, can't be - // attacked and doesn't move - game.messages.add( - format!( - "{} is dead! You gain {} experience points.", - monster.name, - monster.fighter.unwrap().xp - ), - Color::ORANGE, - ); - monster.char = "%".to_owned(); - monster.color = Color::DARKPURPLE.into(); - monster.blocks = false; - monster.fighter = None; - monster.ai = None; - monster.name = format!("remains of {}", monster.name); -} - -fn render_bar( - d: &mut RaylibDrawHandle, - x: i32, - y: i32, - total_width: i32, - name: &str, - value: i32, - maximum: i32, - bar_color: Color, - back_color: Color, -) { - let bar_width = (value as f32 / maximum as f32 * total_width as f32) as i32; - - d.draw_rectangle( - x * TILE_WIDTH, - y * TILE_HEIGHT, - total_width * TILE_WIDTH, - TILE_HEIGHT, - back_color, - ); - - if bar_width > 0 { - d.draw_rectangle( - x * TILE_WIDTH, - y * TILE_HEIGHT, - bar_width * TILE_WIDTH, - TILE_HEIGHT, - bar_color, - ); - } - - d.draw_text( - &format!("{}: {}/{}", name, value, maximum), - (x + total_width / 2) * TILE_WIDTH, - y * TILE_HEIGHT, - TILE_HEIGHT, - Color::WHITE, - ); -} - -fn main_menu(rl: &mut RaylibHandle, thread: &RaylibThread, tcod: &mut Tcod) { - let img = - Image::load_image("static/menu_background.png").expect("could not load background image"); - let (w, h) = (img.width(), img.height()); - let img = rl - .load_texture_from_image(&thread, &img) - .expect("could not load texture from image"); - img.set_texture_wrap(thread, raylib::consts::TextureWrap::TEXTURE_WRAP_CLAMP); - - while !rl.window_should_close() { - // show the background image, at twice the regular console resolution - let pressed_key = rl.get_key_pressed_number(); - let choice = { - let mut d = rl.begin_drawing(thread); - d.clear_background(Color::BLACK); - d.draw_texture_pro( - &img, - Rectangle::new(0.0, 0.0, w as f32, h as f32), - Rectangle::new(0.0, 0.0, 800.0, 640.0), - Vector2::new(0.0, 0.0), - 0.0, - Color::WHITE, - ); - // Game title - d.draw_text( - "TOMBS OF THE ANCIENT KINGS", - (SCREEN_WIDTH / 2) * TILE_WIDTH, - (SCREEN_HEIGHT / 2 - 4) * TILE_HEIGHT, - TILE_HEIGHT, - Color::YELLOW, - ); - d.draw_text( - "By Yours Truly", - (SCREEN_WIDTH / 2) * TILE_WIDTH, - (SCREEN_HEIGHT / 2 - 2) * TILE_HEIGHT, - TILE_HEIGHT, - Color::YELLOW, - ); - // show options and wait for the player's choice - let choices = &["Play a new game", "Continue last game", "Quit"]; - menu("", choices, 24, pressed_key, &mut d) - }; - match choice { - Some(0) => { - // new game - let (mut game, mut objects) = new_game(tcod); - play_game(rl, thread, tcod, &mut game, &mut objects); - } - Some(1) => { - // load game - match load_game() { - Ok((mut game, mut objects)) => { - initialise_fov(tcod, &game.map); - play_game(rl, thread, tcod, &mut game, &mut objects); - } - Err(_e) => { - { - let mut d = rl.begin_drawing(thread); - msgbox("\nNo saved game to load.\n", 24, pressed_key, &mut d); - } - continue; - } - } - } - Some(2) => { - // quit - break; - } - _ => {} - } - } -} - -fn msgbox(text: &str, width: i32, pressed_key: Option, d: &mut RaylibDrawHandle) { - let options: &[&str] = &[]; - menu(text, options, width, pressed_key, d); -} - -fn inventory_menu( - inventory: &[Object], - header: &str, - pressed_key: Option, - root: &mut RaylibDrawHandle, -) -> Option { - // how a menu with each item of the inventory as an option - let options = if inventory.len() == 0 { - vec!["Inventory is empty.".into()] - } else { - inventory - .iter() - .map(|item| { - // show additional information, in case it's equipped - match item.equipment { - Some(equipment) if equipment.equipped => { - format!("{} (on {})", item.name, equipment.slot) - } - _ => item.name.clone(), - } - }) - .collect() - }; - - let inventory_index = menu(header, &options, INVENTORY_WIDTH, pressed_key, root); - - // if an item was chosen, return it - if inventory.len() > 0 { - inventory_index - } else { - None - } -} - -fn render_all( - tcod: &mut Tcod, - d: &mut RaylibDrawHandle, - game: &mut Game, - objects: &mut [Object], - fov_recompute: bool, -) { - if fov_recompute { - let player = &objects[PLAYER]; - tcod.fov - .compute_fov(player.x, player.y, TORCH_RADIUS, FOV_LIGHT_WALLS, FOV_ALGO); - } - - for y in 0..MAP_HEIGHT { - for x in 0..MAP_WIDTH { - let visible = tcod.fov.is_in_fov(x, y); - let wall = game.map[x as usize][y as usize].block_sight; - let color = match (visible, wall) { - // outside field of view - // (false, _) => COLOR_DARK_WALL, - (false, true) => COLOR_DARK_WALL, - (false, false) => COLOR_DARK_GROUND, - // inside fov - (true, true) => COLOR_DARK_WALL, - (true, false) => COLOR_DARK_GROUND, - }; - - let explored = &mut game.map[x as usize][y as usize].explored; - if visible { - *explored = true; - } - - if *explored { - d.draw_rectangle( - x * TILE_WIDTH, - y * TILE_HEIGHT, - TILE_WIDTH, - TILE_HEIGHT, - color, - ); - } - } - } - - let mut to_draw: Vec<_> = objects - .iter() - .filter(|o| { - tcod.fov.is_in_fov(o.x, o.y) - || (o.always_visible && game.map[o.x as usize][o.y as usize].explored) - }) - .collect(); - to_draw.sort_by(|o1, o2| o1.blocks.cmp(&o2.blocks)); - - for object in &to_draw { - if tcod.fov.is_in_fov(object.x, object.y) { - object.draw(d) - } - } - - // GUI - d.draw_text( - &format!("Dungeon Level: {} ", game.dungeon_level), - TILE_WIDTH, - 3 * TILE_HEIGHT, - TILE_HEIGHT, - Color::WHITE, - ); - - let hp = objects[PLAYER].fighter.map_or(0, |f| f.hp); - let max_hp = objects[PLAYER].max_hp(game); - render_bar( - d, - 1, - 1 + PANEL_Y, - BAR_WIDTH, - "HP", - hp, - max_hp, - Color::RED, - Color::PURPLE, - ); - - // print the game messages - let mut y = MSG_HEIGHT as i32; - for &(ref msg, color) in game.messages.iter().rev() { - let msg_height = measure_text(msg, TILE_HEIGHT) as f32 / (MSG_WIDTH * TILE_WIDTH) as f32; - let msg_height = msg_height.ceil() as i32; - y -= msg_height; - if y < 0 { - break; - } - let color: Color = color.into(); - d.draw_text( - msg, - MSG_X * TILE_WIDTH, - (PANEL_Y + y) * TILE_HEIGHT, - TILE_HEIGHT, - color, - ); - } - - // Stuff under mouse - d.draw_text( - &get_names_under_mouse(tcod.mouse, objects, &tcod.fov), - TILE_WIDTH, - PANEL_HEIGHT * TILE_HEIGHT, - TILE_HEIGHT, - Color::WHITE, - ); -} - -fn target_tile( - rl: &mut RaylibHandle, - thread: &RaylibThread, - tcod: &mut Tcod, - game: &mut Game, - objects: &mut [Object], - max_range: Option, -) -> Option<(i32, i32)> { - while !rl.window_should_close() { - let pos = rl.get_mouse_position(); - let (x, y) = (pos.x as i32 / TILE_WIDTH, pos.y as i32 / TILE_HEIGHT); - let in_fov = (x < MAP_WIDTH) && (y < MAP_HEIGHT) && tcod.fov.is_in_fov(x, y); - let in_range = max_range.map_or(true, |range| objects[PLAYER].distance(x, y) <= range); - if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_LEFT_BUTTON) - && in_fov - && in_range - { - return Some((x, y)); - } - - if rl.is_mouse_button_pressed(raylib::consts::MouseButton::MOUSE_RIGHT_BUTTON) { - return None; - } - // ... - let mut d = rl.begin_drawing(thread); - render_all(tcod, &mut d, game, objects, false); - } - None -} - -fn target_monster( - rl: &mut RaylibHandle, - thread: &RaylibThread, - tcod: &mut Tcod, - game: &mut Game, - objects: &mut [Object], - max_range: Option, -) -> Option { - match target_tile(rl, thread, tcod, game, objects, max_range) { - Some((x, y)) => { - // return the first clicked monster, otherwise continue looping - for (id, obj) in objects.iter().enumerate() { - if obj.pos() == (x, y) && obj.fighter.is_some() && id != PLAYER { - return Some(id); - } - } - } - None => return None, - } - None -} - -fn mut_two(first_index: usize, second_index: usize, items: &mut [T]) -> (&mut T, &mut T) { - assert!(first_index != second_index); - let split_at_index = first_index.max(second_index); - let (first_slice, second_slice) = items.split_at_mut(split_at_index); - if first_index < second_index { - (&mut first_slice[first_index], &mut second_slice[0]) - } else { - (&mut second_slice[0], &mut first_slice[second_index]) - } -} - -fn menu>( - header: &str, - options: &[T], - width: i32, - pressed_key: Option, - d: &mut RaylibDrawHandle, -) -> Option { - assert!( - options.len() <= 26, - "Cannot have a menu with more than 26 options." - ); - - // calculate total height for the header (after auto-wrap) and one line per option - let header_height = measure_text(header, TILE_HEIGHT) / (width * TILE_WIDTH); - let header_height = if header.is_empty() { - 0 - } else { - header_height.max(1) - }; - let height = options.len() as i32 + header_height; - - let x = SCREEN_WIDTH / 2 - width / 2; - let y = SCREEN_HEIGHT / 2 - height / 2; - let (x, y) = (x * TILE_WIDTH, y * TILE_HEIGHT); - d.draw_text(header, x, y, TILE_HEIGHT, Color::WHITE); - - for (index, option_text) in options.iter().enumerate() { - let menu_letter = (b'a' + index as u8) as char; - let text = format!("({}) {}", menu_letter, option_text.as_ref()); - d.draw_text( - &text, - x, - y + (header_height + index as i32) * TILE_HEIGHT, - TILE_HEIGHT, - Color::WHITE, - ); - } - - if let Some(pressed_key) = pressed_key { - dbg!(pressed_key); - use std::num::Wrapping; - let index = Wrapping(pressed_key) - Wrapping('a' as u32); - let index: u32 = index.0; - if (index as usize) < options.len() { - Some(index as usize) - } else { - None - } - } else { - None - } -} - -fn save_game(game: &Game, objects: &[Object]) -> Result<(), Box> { - let save_data = serde_json::to_string(&(game, objects))?; - let mut file = File::create("savegame")?; - file.write_all(save_data.as_bytes())?; - Ok(()) -} - -fn load_game() -> Result<(Game, Vec), Box> { - let mut json_save_state = String::new(); - let mut file = File::open("savegame")?; - file.read_to_string(&mut json_save_state)?; - let result = serde_json::from_str::<(Game, Vec)>(&json_save_state)?; - Ok(result) -} diff --git a/samples/specs.rs b/samples/specs.rs deleted file mode 100644 index a7e056e2..00000000 --- a/samples/specs.rs +++ /dev/null @@ -1,214 +0,0 @@ -//! Die if you touch fire -#[macro_use] -extern crate specs_derive; -use raylib::prelude::*; -use specs::prelude::*; -use std::collections::HashMap; - -use structopt::StructOpt; - -mod options; - -/// Assume square grid -const TILE_COUNT: i32 = 20; -const MARGIN: i32 = 2; - -#[derive(Clone, Component)] -struct Pos(i32, i32); - -impl From<&Pos> for Vector2 { - fn from(pos: &Pos) -> Vector2 { - Vector2::new(pos.0 as f32, pos.1 as f32) - } -} - -impl Into<(i32, i32)> for Pos { - fn into(self) -> (i32, i32) { - (self.0, self.1) - } -} - -#[derive(Component)] -struct Fire; - -#[derive(Component)] -struct Tile; - -#[derive(Component)] -struct Player; - -type EntityMap = HashMap<(i32, i32), Entity>; - -#[derive(PartialEq, Clone, Copy)] -enum GameState { - PLAYING, - LOST, -} - -struct DeathSys; - -impl<'a> System<'a> for DeathSys { - type SystemData = ( - WriteExpect<'a, GameState>, - ReadStorage<'a, Player>, - ReadStorage<'a, Fire>, - ); - - fn run(&mut self, (mut gs, players, fire): Self::SystemData) { - // Touch fire then die - if let Some(_) = (&players, &fire).join().nth(0) { - *gs = GameState::LOST; - println!("Lost"); - } - } -} - -struct PlayerSys; - -impl<'a> System<'a> for PlayerSys { - type SystemData = ( - Entities<'a>, - ReadExpect<'a, RaylibHandle>, - ReadExpect<'a, EntityMap>, - WriteStorage<'a, Player>, - ReadStorage<'a, Pos>, - ); - - fn run(&mut self, (ents, rl, emap, mut players, pos): Self::SystemData) { - use raylib::consts::KeyboardKey::*; - - let player = (&*ents, &pos, &players).join().nth(0).unwrap(); - - let mut new_pos = player.1.clone(); - if rl.is_key_pressed(KEY_D) { - new_pos.0 += 1; - } else if rl.is_key_pressed(KEY_A) { - new_pos.0 -= 1; - } else if rl.is_key_pressed(KEY_W) { - new_pos.1 -= 1; - } else if rl.is_key_pressed(KEY_S) { - new_pos.1 += 1; - } else { - return; - } - - let p_ent = player.0; - - match emap.get(&new_pos.into()) { - Some(e) => { - players.insert(*e, Player).unwrap(); - players.remove(p_ent); - } - _ => println!("Nothing"), - } - } -} - -// System is not thread safe -struct DrawSys { - thread: RaylibThread, -} -impl<'a> System<'a> for DrawSys { - type SystemData = ( - WriteExpect<'a, RaylibHandle>, - ReadStorage<'a, Player>, - ReadStorage<'a, Tile>, - ReadStorage<'a, Pos>, - ReadStorage<'a, Fire>, - ); - - fn run(&mut self, (mut rl, player, tiles, pos, fire): Self::SystemData) { - let (_, sh) = (rl.get_screen_width(), rl.get_screen_height()); - let tw = sh / TILE_COUNT - 2 * MARGIN; - - let margin = Vector2::new(MARGIN as f32, MARGIN as f32); - let size = Vector2::new(tw as f32, tw as f32) + margin; - let tile_size = Vector2::new(tw as f32, tw as f32); - - let mut d = rl.begin_drawing(&self.thread); - d.clear_background(Color::BLACK); - // draw the tiles - for (pos, _) in (&pos, &tiles).join() { - let p: Vector2 = pos.into(); - d.draw_rectangle_v(p * size + margin, tile_size, Color::RAYWHITE); - } - // draw the fire tiles - for (pos, _, _) in (&pos, &tiles, &fire).join() { - let p: Vector2 = pos.into(); - d.draw_rectangle_v(p * size + margin, tile_size, Color::RED); - } - // draw the player tiles - for (pos, _, _) in (&pos, &tiles, &player).join() { - let p: Vector2 = pos.into(); - d.draw_rectangle_v(p * size + margin, tile_size, Color::GREEN); - } - } -} - -fn main() { - let opt = options::Opt::from_args(); - let (rl, thread) = opt.open_window("Specs Example"); - let (_w, _h) = (opt.width, opt.height); - - let mut world = World::new(); - register_components(&mut world); - let emap = init_world(&rl, &mut world); - - world.insert(rl); - // Raylib Thread is not safe to send between threads, but we can force it with an ARC - // It's up to the user to ensure the only systems that use it are - // thread local otherwise you will segfault - world.insert(emap); - world.insert(GameState::PLAYING); - let mut dispatcher = DispatcherBuilder::new() - .with(DeathSys, "death_sys", &[]) - .with(PlayerSys, "player_sys", &[]) - // Drawing must be done on the same thread - .with_thread_local(DrawSys { thread }) - .build(); - dispatcher.setup(&mut world); - while !window_should_close(&world) && !player_lost(&world) { - dispatcher.dispatch(&mut world); - } -} - -fn window_should_close(world: &World) -> bool { - let rl = world.read_resource::(); - rl.window_should_close() -} - -fn player_lost(world: &World) -> bool { - let gs = world.read_resource::(); - *gs == GameState::LOST -} - -fn register_components(world: &mut World) { - world.register::(); - world.register::(); - world.register::(); - world.register::(); -} - -fn init_world(rl: &RaylibHandle, world: &mut World) -> EntityMap { - let (_, sh) = (rl.get_screen_width(), rl.get_screen_height()); - let _tw = sh / TILE_COUNT; - - let mut placed_player = false; - let mut emap = EntityMap::new(); - - for x in 0..TILE_COUNT { - for y in 0..TILE_COUNT { - let mut eb = world.create_entity().with(Tile).with(Pos(x, y)); - if !placed_player && get_random_value::(0, 100) < 10 { - placed_player = true; - eb = eb.with(Player); - } else if get_random_value::(0, 100) < 10 { - eb = eb.with(Fire); - } - - let e = eb.build(); - emap.insert((x, y), e); - } - } - emap -} diff --git a/samples/static/exists.txt b/samples/static/exists.txt deleted file mode 100644 index 5ab2f8a4..00000000 --- a/samples/static/exists.txt +++ /dev/null @@ -1 +0,0 @@ -Hello \ No newline at end of file diff --git a/samples/static/logo.png b/samples/static/logo.png deleted file mode 100644 index 0a620629..00000000 Binary files a/samples/static/logo.png and /dev/null differ diff --git a/samples/static/menu_background.png b/samples/static/menu_background.png deleted file mode 100644 index 3690898e..00000000 Binary files a/samples/static/menu_background.png and /dev/null differ diff --git a/samples/static/raylib-rust_16x16.png b/samples/static/raylib-rust_16x16.png deleted file mode 100644 index 5f7ea686..00000000 Binary files a/samples/static/raylib-rust_16x16.png and /dev/null differ diff --git a/samples/static/raymarching.fs b/samples/static/raymarching.fs deleted file mode 100644 index 7c9fbcb1..00000000 --- a/samples/static/raymarching.fs +++ /dev/null @@ -1,432 +0,0 @@ -#version 330 - -// Input vertex attributes (from vertex shader) -in vec2 fragTexCoord; -in vec4 fragColor; - -// Output fragment color -out vec4 finalColor; - -uniform vec3 viewEye; -uniform vec3 viewCenter; -uniform vec3 viewUp; -uniform float deltaTime; -uniform float runTime; -uniform vec2 resolution; - -// The MIT License -// Copyright © 2013 Inigo Quilez -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - -// A list of useful distance function to simple primitives, and an example on how to -// do some interesting boolean operations, repetition and displacement. -// -// More info here: http://www.iquilezles.org/www/articles/distfunctions/distfunctions.htm - -#define AA 1 // make this 1 is your machine is too slow - -//------------------------------------------------------------------ - -float sdPlane( vec3 p ) -{ - return p.y; -} - -float sdSphere( vec3 p, float s ) -{ - return length(p)-s; -} - -float sdBox( vec3 p, vec3 b ) -{ - vec3 d = abs(p) - b; - return min(max(d.x,max(d.y,d.z)),0.0) + length(max(d,0.0)); -} - -float sdEllipsoid( in vec3 p, in vec3 r ) -{ - return (length( p/r ) - 1.0) * min(min(r.x,r.y),r.z); -} - -float udRoundBox( vec3 p, vec3 b, float r ) -{ - return length(max(abs(p)-b,0.0))-r; -} - -float sdTorus( vec3 p, vec2 t ) -{ - return length( vec2(length(p.xz)-t.x,p.y) )-t.y; -} - -float sdHexPrism( vec3 p, vec2 h ) -{ - vec3 q = abs(p); -#if 0 - return max(q.z-h.y,max((q.x*0.866025+q.y*0.5),q.y)-h.x); -#else - float d1 = q.z-h.y; - float d2 = max((q.x*0.866025+q.y*0.5),q.y)-h.x; - return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); -#endif -} - -float sdCapsule( vec3 p, vec3 a, vec3 b, float r ) -{ - vec3 pa = p-a, ba = b-a; - float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 ); - return length( pa - ba*h ) - r; -} - -float sdEquilateralTriangle( in vec2 p ) -{ - const float k = sqrt(3.0); - p.x = abs(p.x) - 1.0; - p.y = p.y + 1.0/k; - if( p.x + k*p.y > 0.0 ) p = vec2( p.x - k*p.y, -k*p.x - p.y )/2.0; - p.x += 2.0 - 2.0*clamp( (p.x+2.0)/2.0, 0.0, 1.0 ); - return -length(p)*sign(p.y); -} - -float sdTriPrism( vec3 p, vec2 h ) -{ - vec3 q = abs(p); - float d1 = q.z-h.y; -#if 1 - // distance bound - float d2 = max(q.x*0.866025+p.y*0.5,-p.y)-h.x*0.5; -#else - // correct distance - h.x *= 0.866025; - float d2 = sdEquilateralTriangle(p.xy/h.x)*h.x; -#endif - return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); -} - -float sdCylinder( vec3 p, vec2 h ) -{ - vec2 d = abs(vec2(length(p.xz),p.y)) - h; - return min(max(d.x,d.y),0.0) + length(max(d,0.0)); -} - -float sdCone( in vec3 p, in vec3 c ) -{ - vec2 q = vec2( length(p.xz), p.y ); - float d1 = -q.y-c.z; - float d2 = max( dot(q,c.xy), q.y); - return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); -} - -float sdConeSection( in vec3 p, in float h, in float r1, in float r2 ) -{ - float d1 = -p.y - h; - float q = p.y - h; - float si = 0.5*(r1-r2)/h; - float d2 = max( sqrt( dot(p.xz,p.xz)*(1.0-si*si)) + q*si - r2, q ); - return length(max(vec2(d1,d2),0.0)) + min(max(d1,d2), 0.); -} - -float sdPryamid4(vec3 p, vec3 h ) // h = { cos a, sin a, height } -{ - // Tetrahedron = Octahedron - Cube - float box = sdBox( p - vec3(0,-2.0*h.z,0), vec3(2.0*h.z) ); - - float d = 0.0; - d = max( d, abs( dot(p, vec3( -h.x, h.y, 0 )) )); - d = max( d, abs( dot(p, vec3( h.x, h.y, 0 )) )); - d = max( d, abs( dot(p, vec3( 0, h.y, h.x )) )); - d = max( d, abs( dot(p, vec3( 0, h.y,-h.x )) )); - float octa = d - h.z; - return max(-box,octa); // Subtraction - } - -float length2( vec2 p ) -{ - return sqrt( p.x*p.x + p.y*p.y ); -} - -float length6( vec2 p ) -{ - p = p*p*p; p = p*p; - return pow( p.x + p.y, 1.0/6.0 ); -} - -float length8( vec2 p ) -{ - p = p*p; p = p*p; p = p*p; - return pow( p.x + p.y, 1.0/8.0 ); -} - -float sdTorus82( vec3 p, vec2 t ) -{ - vec2 q = vec2(length2(p.xz)-t.x,p.y); - return length8(q)-t.y; -} - -float sdTorus88( vec3 p, vec2 t ) -{ - vec2 q = vec2(length8(p.xz)-t.x,p.y); - return length8(q)-t.y; -} - -float sdCylinder6( vec3 p, vec2 h ) -{ - return max( length6(p.xz)-h.x, abs(p.y)-h.y ); -} - -//------------------------------------------------------------------ - -float opS( float d1, float d2 ) -{ - return max(-d2,d1); -} - -vec2 opU( vec2 d1, vec2 d2 ) -{ - return (d1.x0.0 ) tmax = min( tmax, tp1 ); - float tp2 = (1.6-ro.y)/rd.y; if( tp2>0.0 ) { if( ro.y>1.6 ) tmin = max( tmin, tp2 ); - else tmax = min( tmax, tp2 ); } -#endif - - float t = tmin; - float m = -1.0; - for( int i=0; i<64; i++ ) - { - float precis = 0.0005*t; - vec2 res = map( ro+rd*t ); - if( res.xtmax ) break; - t += res.x; - m = res.y; - } - - if( t>tmax ) m=-1.0; - return vec2( t, m ); -} - - -float calcSoftshadow( in vec3 ro, in vec3 rd, in float mint, in float tmax ) -{ - float res = 1.0; - float t = mint; - for( int i=0; i<16; i++ ) - { - float h = map( ro + rd*t ).x; - res = min( res, 8.0*h/t ); - t += clamp( h, 0.02, 0.10 ); - if( h<0.001 || t>tmax ) break; - } - return clamp( res, 0.0, 1.0 ); -} - -vec3 calcNormal( in vec3 pos ) -{ - vec2 e = vec2(1.0,-1.0)*0.5773*0.0005; - return normalize( e.xyy*map( pos + e.xyy ).x + - e.yyx*map( pos + e.yyx ).x + - e.yxy*map( pos + e.yxy ).x + - e.xxx*map( pos + e.xxx ).x ); - /* - vec3 eps = vec3( 0.0005, 0.0, 0.0 ); - vec3 nor = vec3( - map(pos+eps.xyy).x - map(pos-eps.xyy).x, - map(pos+eps.yxy).x - map(pos-eps.yxy).x, - map(pos+eps.yyx).x - map(pos-eps.yyx).x ); - return normalize(nor); - */ -} - -float calcAO( in vec3 pos, in vec3 nor ) -{ - float occ = 0.0; - float sca = 1.0; - for( int i=0; i<5; i++ ) - { - float hr = 0.01 + 0.12*float(i)/4.0; - vec3 aopos = nor * hr + pos; - float dd = map( aopos ).x; - occ += -(dd-hr)*sca; - sca *= 0.95; - } - return clamp( 1.0 - 3.0*occ, 0.0, 1.0 ); -} - -// http://iquilezles.org/www/articles/checkerfiltering/checkerfiltering.htm -float checkersGradBox( in vec2 p ) -{ - // filter kernel - vec2 w = fwidth(p) + 0.001; - // analytical integral (box filter) - vec2 i = 2.0*(abs(fract((p-0.5*w)*0.5)-0.5)-abs(fract((p+0.5*w)*0.5)-0.5))/w; - // xor pattern - return 0.5 - 0.5*i.x*i.y; -} - -vec3 render( in vec3 ro, in vec3 rd ) -{ - vec3 col = vec3(0.7, 0.9, 1.0) +rd.y*0.8; - vec2 res = castRay(ro,rd); - float t = res.x; - float m = res.y; - if( m>-0.5 ) - { - vec3 pos = ro + t*rd; - vec3 nor = calcNormal( pos ); - vec3 ref = reflect( rd, nor ); - - // material - col = 0.45 + 0.35*sin( vec3(0.05,0.08,0.10)*(m-1.0) ); - if( m<1.5 ) - { - - float f = checkersGradBox( 5.0*pos.xz ); - col = 0.3 + f*vec3(0.1); - } - - // lighting - float occ = calcAO( pos, nor ); - vec3 lig = normalize( vec3(cos(-0.4 * runTime), sin(0.7 * runTime), -0.6) ); - vec3 hal = normalize( lig-rd ); - float amb = clamp( 0.5+0.5*nor.y, 0.0, 1.0 ); - float dif = clamp( dot( nor, lig ), 0.0, 1.0 ); - float bac = clamp( dot( nor, normalize(vec3(-lig.x,0.0,-lig.z))), 0.0, 1.0 )*clamp( 1.0-pos.y,0.0,1.0); - float dom = smoothstep( -0.1, 0.1, ref.y ); - float fre = pow( clamp(1.0+dot(nor,rd),0.0,1.0), 2.0 ); - - dif *= calcSoftshadow( pos, lig, 0.02, 2.5 ); - dom *= calcSoftshadow( pos, ref, 0.02, 2.5 ); - - float spe = pow( clamp( dot( nor, hal ), 0.0, 1.0 ),16.0)* - dif * - (0.04 + 0.96*pow( clamp(1.0+dot(hal,rd),0.0,1.0), 5.0 )); - - vec3 lin = vec3(0.0); - lin += 1.30*dif*vec3(1.00,0.80,0.55); - lin += 0.40*amb*vec3(0.40,0.60,1.00)*occ; - lin += 0.50*dom*vec3(0.40,0.60,1.00)*occ; - lin += 0.50*bac*vec3(0.25,0.25,0.25)*occ; - lin += 0.25*fre*vec3(1.00,1.00,1.00)*occ; - col = col*lin; - col += 10.00*spe*vec3(1.00,0.90,0.70); - - col = mix( col, vec3(0.8,0.9,1.0), 1.0-exp( -0.0002*t*t*t ) ); - } - - return vec3( clamp(col,0.0,1.0) ); -} - -mat3 setCamera( in vec3 ro, in vec3 ta, float cr ) -{ - vec3 cw = normalize(ta-ro); - vec3 cp = vec3(sin(cr), cos(cr),0.0); - vec3 cu = normalize( cross(cw,cp) ); - vec3 cv = normalize( cross(cu,cw) ); - return mat3( cu, cv, cw ); -} - -void main() -{ - vec3 tot = vec3(0.0); -#if AA>1 - for( int m=0; m1 - } - tot /= float(AA*AA); -#endif - - finalColor = vec4( tot, 1.0 ); -} \ No newline at end of file diff --git a/samples/static/shader/pbr.fs b/samples/static/shader/pbr.fs deleted file mode 100644 index 38d56c5d..00000000 --- a/samples/static/shader/pbr.fs +++ /dev/null @@ -1,298 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Physically based rendering fragment shader -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 - -#define MAX_REFLECTION_LOD 4.0 -#define MAX_DEPTH_LAYER 20 -#define MIN_DEPTH_LAYER 10 - -#define MAX_LIGHTS 4 -#define LIGHT_DIRECTIONAL 0 -#define LIGHT_POINT 1 - -struct MaterialProperty { - vec3 color; - int useSampler; - sampler2D sampler; -}; - -struct Light { - int enabled; - int type; - vec3 position; - vec3 target; - vec4 color; -}; - -// Input vertex attributes (from vertex shader) -in vec3 fragPosition; -in vec2 fragTexCoord; -in vec3 fragNormal; -in vec3 fragTangent; -in vec3 fragBinormal; - -// Input material values -uniform MaterialProperty albedo; -uniform MaterialProperty normals; -uniform MaterialProperty metalness; -uniform MaterialProperty roughness; -uniform MaterialProperty occlusion; -uniform MaterialProperty emission; -uniform MaterialProperty height; - -// Input uniform values -uniform samplerCube irradianceMap; -uniform samplerCube prefilterMap; -uniform sampler2D brdfLUT; - -// Input lighting values -uniform Light lights[MAX_LIGHTS]; - -// Other uniform values -uniform int renderMode; -uniform vec3 viewPos; -vec2 texCoord; - -// Constant values -const float PI = 3.14159265359; - -// Output fragment color -out vec4 finalColor; - -vec3 ComputeMaterialProperty(MaterialProperty property); -float DistributionGGX(vec3 N, vec3 H, float roughness); -float GeometrySchlickGGX(float NdotV, float roughness); -float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness); -vec3 fresnelSchlick(float cosTheta, vec3 F0); -vec3 fresnelSchlickRoughness(float cosTheta, vec3 F0, float roughness); -vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir); - -vec3 ComputeMaterialProperty(MaterialProperty property) -{ - vec3 result = vec3(0.0, 0.0, 0.0); - - if (property.useSampler == 1) result = texture(property.sampler, texCoord).rgb; - else result = property.color; - - return result; -} - -float DistributionGGX(vec3 N, vec3 H, float roughness) -{ - float a = roughness*roughness; - float a2 = a*a; - float NdotH = max(dot(N, H), 0.0); - float NdotH2 = NdotH*NdotH; - - float nom = a2; - float denom = (NdotH2*(a2 - 1.0) + 1.0); - denom = PI*denom*denom; - - return nom/denom; -} - -float GeometrySchlickGGX(float NdotV, float roughness) -{ - float r = (roughness + 1.0); - float k = r*r/8.0; - - float nom = NdotV; - float denom = NdotV*(1.0 - k) + k; - - return nom/denom; -} -float GeometrySmith(vec3 N, vec3 V, vec3 L, float roughness) -{ - float NdotV = max(dot(N, V), 0.0); - float NdotL = max(dot(N, L), 0.0); - float ggx2 = GeometrySchlickGGX(NdotV, roughness); - float ggx1 = GeometrySchlickGGX(NdotL, roughness); - - return ggx1*ggx2; -} - -vec3 fresnelSchlick(float cosTheta, vec3 F0) -{ - return F0 + (1.0 - F0)*pow(1.0 - cosTheta, 5.0); -} - -vec3 fresnelSchlickRoughness(float cosTheta, vec3 F0, float roughness) -{ - return F0 + (max(vec3(1.0 - roughness), F0) - F0)*pow(1.0 - cosTheta, 5.0); -} - -vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir) -{ - // Calculate the number of depth layers and calculate the size of each layer - float numLayers = mix(MAX_DEPTH_LAYER, MIN_DEPTH_LAYER, abs(dot(vec3(0.0, 0.0, 1.0), viewDir))); - float layerDepth = 1.0/numLayers; - - // Calculate depth of current layer - float currentLayerDepth = 0.0; - - // Calculate the amount to shift the texture coordinates per layer (from vector P) - // Note: height amount is stored in height material attribute color R channel (sampler use is independent) - vec2 P = viewDir.xy*height.color.r; - vec2 deltaTexCoords = P/numLayers; - - // Store initial texture coordinates and depth values - vec2 currentTexCoords = texCoords; - float currentDepthMapValue = texture(height.sampler, currentTexCoords).r; - - while (currentLayerDepth < currentDepthMapValue) - { - // Shift texture coordinates along direction of P - currentTexCoords -= deltaTexCoords; - - // Get depth map value at current texture coordinates - currentDepthMapValue = texture(height.sampler, currentTexCoords).r; - - // Get depth of next layer - currentLayerDepth += layerDepth; - } - - // Get texture coordinates before collision (reverse operations) - vec2 prevTexCoords = currentTexCoords + deltaTexCoords; - - // Get depth after and before collision for linear interpolation - float afterDepth = currentDepthMapValue - currentLayerDepth; - float beforeDepth = texture(height.sampler, prevTexCoords).r - currentLayerDepth + layerDepth; - - // Interpolation of texture coordinates - float weight = afterDepth/(afterDepth - beforeDepth); - vec2 finalTexCoords = prevTexCoords*weight + currentTexCoords*(1.0 - weight); - - return finalTexCoords; -} - -void main() -{ - // Calculate TBN and RM matrices - mat3 TBN = transpose(mat3(fragTangent, fragBinormal, fragNormal)); - - // Calculate lighting required attributes - vec3 normal = normalize(fragNormal); - vec3 view = normalize(viewPos - fragPosition); - vec3 refl = reflect(-view, normal); - - // Check if parallax mapping is enabled and calculate texture coordinates to use based on height map - // NOTE: remember that 'texCoord' variable must be assigned before calling any ComputeMaterialProperty() function - if (height.useSampler == 1) texCoord = ParallaxMapping(fragTexCoord, view); - else texCoord = fragTexCoord; // Use default texture coordinates - - // Fetch material values from texture sampler or color attributes - vec3 color = ComputeMaterialProperty(albedo); - vec3 metal = ComputeMaterialProperty(metalness); - vec3 rough = ComputeMaterialProperty(roughness); - vec3 emiss = ComputeMaterialProperty(emission); - vec3 ao = ComputeMaterialProperty(occlusion); - - // Check if normal mapping is enabled - if (normals.useSampler == 1) - { - // Fetch normal map color and transform lighting values to tangent space - normal = ComputeMaterialProperty(normals); - normal = normalize(normal*2.0 - 1.0); - normal = normalize(normal*TBN); - - // Convert tangent space normal to world space due to cubemap reflection calculations - refl = normalize(reflect(-view, normal)); - } - - // Calculate reflectance at normal incidence - vec3 F0 = vec3(0.04); - F0 = mix(F0, color, metal.r); - - // Calculate lighting for all lights - vec3 Lo = vec3(0.0); - vec3 lightDot = vec3(0.0); - - for (int i = 0; i < MAX_LIGHTS; i++) - { - if (lights[i].enabled == 1) - { - // Calculate per-light radiance - vec3 light = vec3(0.0); - vec3 radiance = lights[i].color.rgb; - if (lights[i].type == LIGHT_DIRECTIONAL) light = -normalize(lights[i].target - lights[i].position); - else if (lights[i].type == LIGHT_POINT) - { - light = normalize(lights[i].position - fragPosition); - float distance = length(lights[i].position - fragPosition); - float attenuation = 1.0/(distance*distance); - radiance *= attenuation; - } - - // Cook-torrance BRDF - vec3 high = normalize(view + light); - float NDF = DistributionGGX(normal, high, rough.r); - float G = GeometrySmith(normal, view, light, rough.r); - vec3 F = fresnelSchlick(max(dot(high, view), 0.0), F0); - vec3 nominator = NDF*G*F; - float denominator = 4*max(dot(normal, view), 0.0)*max(dot(normal, light), 0.0) + 0.001; - vec3 brdf = nominator/denominator; - - // Store to kS the fresnel value and calculate energy conservation - vec3 kS = F; - vec3 kD = vec3(1.0) - kS; - - // Multiply kD by the inverse metalness such that only non-metals have diffuse lighting - kD *= 1.0 - metal.r; - - // Scale light by dot product between normal and light direction - float NdotL = max(dot(normal, light), 0.0); - - // Add to outgoing radiance Lo - // Note: BRDF is already multiplied by the Fresnel so it doesn't need to be multiplied again - Lo += (kD*color/PI + brdf)*radiance*NdotL*lights[i].color.a; - lightDot += radiance*NdotL + brdf*lights[i].color.a; - } - } - - // Calculate ambient lighting using IBL - vec3 F = fresnelSchlickRoughness(max(dot(normal, view), 0.0), F0, rough.r); - vec3 kS = F; - vec3 kD = 1.0 - kS; - kD *= 1.0 - metal.r; - - // Calculate indirect diffuse - vec3 irradiance = texture(irradianceMap, fragNormal).rgb; - vec3 diffuse = color*irradiance; - - // Sample both the prefilter map and the BRDF lut and combine them together as per the Split-Sum approximation - vec3 prefilterColor = textureLod(prefilterMap, refl, rough.r*MAX_REFLECTION_LOD).rgb; - vec2 brdf = texture(brdfLUT, vec2(max(dot(normal, view), 0.0), rough.r)).rg; - vec3 reflection = prefilterColor*(F*brdf.x + brdf.y); - - // Calculate final lighting - vec3 ambient = (kD*diffuse + reflection)*ao; - - // Calculate fragment color based on render mode - vec3 fragmentColor = ambient + Lo + emiss; // Physically Based Rendering - - if (renderMode == 1) fragmentColor = color; // Albedo - else if (renderMode == 2) fragmentColor = normal; // Normals - else if (renderMode == 3) fragmentColor = metal; // Metalness - else if (renderMode == 4) fragmentColor = rough; // Roughness - else if (renderMode == 5) fragmentColor = ao; // Ambient Occlusion - else if (renderMode == 6) fragmentColor = emiss; // Emission - else if (renderMode == 7) fragmentColor = lightDot; // Lighting - else if (renderMode == 8) fragmentColor = kS; // Fresnel - else if (renderMode == 9) fragmentColor = irradiance; // Irradiance - else if (renderMode == 10) fragmentColor = reflection; // Reflection - - // Apply HDR tonemapping - fragmentColor = fragmentColor/(fragmentColor + vec3(1.0)); - - // Apply gamma correction - fragmentColor = pow(fragmentColor, vec3(1.0/2.2)); - - // Calculate final fragment color - finalColor = vec4(fragmentColor, 1.0); -} diff --git a/samples/static/shader/pbr.vs b/samples/static/shader/pbr.vs deleted file mode 100644 index 8bd3faa1..00000000 --- a/samples/static/shader/pbr.vs +++ /dev/null @@ -1,49 +0,0 @@ -/******************************************************************************************* -* -* rPBR [shader] - Physically based rendering vertex shader -* -* Copyright (c) 2017 Victor Fisac -* -**********************************************************************************************/ - -#version 330 - -// Input vertex attributes -in vec3 vertexPosition; -in vec2 vertexTexCoord; -in vec3 vertexNormal; -in vec4 vertexTangent; - -// Input uniform values -uniform mat4 mvp; -uniform mat4 matModel; - -// Output vertex attributes (to fragment shader) -out vec3 fragPosition; -out vec2 fragTexCoord; -out vec3 fragNormal; -out vec3 fragTangent; -out vec3 fragBinormal; - -void main() -{ - // Calculate binormal from vertex normal and tangent - vec3 vertexBinormal = cross(vertexNormal, vec3(vertexTangent)); - - // Calculate fragment normal based on normal transformations - mat3 normalMatrix = transpose(inverse(mat3(matModel))); - - // Calculate fragment position based on model transformations - fragPosition = vec3(matModel*vec4(vertexPosition, 1.0f)); - - // Send vertex attributes to fragment shader - fragTexCoord = vertexTexCoord; - fragNormal = normalize(normalMatrix*vertexNormal); - fragTangent = normalize(normalMatrix*vec3(vertexTangent)); - fragTangent = normalize(fragTangent - dot(fragTangent, fragNormal)*fragNormal); - fragBinormal = normalize(normalMatrix*vertexBinormal); - fragBinormal = cross(fragNormal, fragTangent); - - // Calculate final vertex position - gl_Position = mvp*vec4(vertexPosition, 1.0); -} \ No newline at end of file diff --git a/samples/static/wave.ogg b/samples/static/wave.ogg deleted file mode 100644 index a5b0dea4..00000000 Binary files a/samples/static/wave.ogg and /dev/null differ diff --git a/samples/static/white_noise.mp3 b/samples/static/white_noise.mp3 deleted file mode 100644 index 2c57eab0..00000000 Binary files a/samples/static/white_noise.mp3 and /dev/null differ diff --git a/samples/texture.rs b/samples/texture.rs deleted file mode 100644 index c95f89de..00000000 --- a/samples/texture.rs +++ /dev/null @@ -1,26 +0,0 @@ -extern crate raylib; -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -fn main() { - let opt = options::Opt::from_args(); - let (mut rl, thread) = opt.open_window("Texture"); - let (_w, _h) = (opt.width, opt.height); - let i = Image::load_image("static/billboard.png").expect("could not load image billboard"); - let _ = rl - .load_texture(&thread, "static/billboard.png") - .expect("could not load texture billboard"); - let t = rl - .load_texture_from_image(&thread, &i) - .expect("could not load texture from image"); - - rl.set_target_fps(60); - while !rl.window_should_close() { - // Detect window close button or ESC key - let mut d = rl.begin_drawing(&thread); - d.clear_background(Color::BLACK); - d.draw_texture(&t, 0, 0, Color::WHITE); - } -} diff --git a/samples/yaw_pitch_roll.rs b/samples/yaw_pitch_roll.rs deleted file mode 100644 index 97e82331..00000000 --- a/samples/yaw_pitch_roll.rs +++ /dev/null @@ -1,307 +0,0 @@ -extern crate raylib; -use raylib::prelude::*; -use structopt::StructOpt; - -mod options; - -fn main() { - let mut opt = options::Opt::from_args(); - opt.width = 800; - opt.height = 450; - let (mut rl, thread) = opt.open_window("Yaw Pitch Roll"); - let (screen_width, _) = (opt.width, opt.height); - let ray_white = Color::new(255, 255, 255, 255); - - let tex_angle_gauge = rl.load_texture(&thread, "static/angle_gauge.png").unwrap(); - let tex_background = rl.load_texture(&thread, "static/background.png").unwrap(); - let tex_pitch = rl.load_texture(&thread, "static/pitch.png").unwrap(); - let tex_plane = rl.load_texture(&thread, "static/plane.png").unwrap(); - - let mut framebuffer = rl.load_render_texture(&thread, 192, 192).unwrap(); - - let mut model = rl.load_model(&thread, "static/plane.obj").unwrap(); - { - let materials = model.materials_mut(); - let mat = &mut materials[0]; - let mats = mat.maps_mut(); - let texture = unsafe { - let mut t = rl - .load_texture(&thread, "static/plane_diffuse.png") - .unwrap(); - t.gen_texture_mipmaps(); - t.unwrap() - // Because we are unwraping we are required to manually unload the texture and can't rely on Drop. - // We don't do that here since we don't need to unload until the end of main anyway. - }; - mats[raylib::consts::MaterialMapIndex::MATERIAL_MAP_ALBEDO as usize].texture = texture; - } - - let camera = Camera3D::perspective( - Vector3::new(0.0, 60.0, -120.0), - Vector3::new(0.0, 12.0, 0.0), - Vector3::new(0.0, 1.0, 0.0), - 30.0, - ); - let mut pitch = 0.0f32; - let mut roll = 0.0f32; - let mut yaw = 0.0f32; - - rl.set_target_fps(60); - while !rl.window_should_close() { - // Update - //---------------------------------------------------------------------------------- - - // Plane roll (x-axis) controls - if rl.is_key_down(raylib::consts::KeyboardKey::KEY_LEFT) { - roll += 1.0; - } else if rl.is_key_down(raylib::consts::KeyboardKey::KEY_RIGHT) { - roll -= 1.0; - } else { - if roll > 0.0 { - roll -= 0.5; - } else if roll < 0.0 { - roll += 0.5; - } - } - - // Plane yaw (y-axis) controls - if rl.is_key_down(raylib::consts::KeyboardKey::KEY_S) { - yaw += 1.0; - } else if rl.is_key_down(raylib::consts::KeyboardKey::KEY_A) { - yaw -= 1.0; - } else { - if yaw > 0.0 { - yaw -= 0.5; - } else if yaw < 0.0 { - yaw += 0.5; - } - } - - // Plane pitch (z-axis) controls - if rl.is_key_down(raylib::consts::KeyboardKey::KEY_DOWN) { - pitch += 0.6; - } else if rl.is_key_down(raylib::consts::KeyboardKey::KEY_UP) { - pitch -= 0.6; - } else { - if pitch > 0.3 { - pitch -= 0.3; - } else if pitch < -0.3 { - pitch += 0.3; - } - } - - // Wraps the phase of an angle to fit between -180 and +180 degrees - let mut pitch_offset = pitch; - while pitch_offset > 180.0 { - pitch_offset -= 360.0; - } - while pitch_offset < -180.0 { - pitch_offset += 360.0; - } - pitch_offset *= 10.0; - - // Detect window close button or ESC key - let mut d = rl.begin_drawing(&thread); - d.clear_background(ray_white); - - let mat = Matrix::rotate_xyz(Vector3::new( - pitch.to_radians(), - yaw.to_radians(), - roll.to_radians(), - )); - - model.set_transform(&mat); - - // Draw framebuffer texture (Ahrs Display) - let center_x = (framebuffer.texture().width() / 2) as f32; - let center_y = (framebuffer.texture().height() / 2) as f32; - let scale_factor = 0.5; - { - let mut d = d.begin_texture_mode(&thread, &mut framebuffer); - { - let mut d = d.begin_blend_mode(raylib::consts::BlendMode::BLEND_ALPHA); - d.draw_texture_pro( - &tex_background, - Rectangle::new( - 0.0, - 0.0, - tex_background.width() as f32, - tex_background.height() as f32, - ), - Rectangle::new( - center_x, - center_y, - tex_background.width() as f32 * scale_factor, - tex_background.height() as f32 * scale_factor, - ), - Vector2::new( - tex_background.width() as f32 / 2.0 * scale_factor, - tex_background.height() as f32 / 2.0 * scale_factor - + pitch_offset * scale_factor, - ), - roll, - Color::WHITE, - ); - - d.draw_texture_pro( - &tex_pitch, - Rectangle::new( - 0.0, - 0.0, - tex_pitch.width() as f32, - tex_pitch.height() as f32 as f32, - ), - Rectangle::new( - center_x, - center_y, - tex_pitch.width() as f32 * scale_factor, - tex_pitch.height() as f32 * scale_factor, - ), - Vector2::new( - tex_pitch.width() as f32 / 2.0 * scale_factor, - tex_pitch.height() as f32 / 2.0 * scale_factor - + pitch_offset * scale_factor, - ), - roll, - Color::WHITE, - ); - - d.draw_texture_pro( - &tex_plane, - Rectangle::new( - 0.0, - 0.0, - tex_plane.width() as f32, - tex_plane.height() as f32 as f32, - ), - Rectangle::new( - center_x, - center_y, - tex_plane.width() as f32 * scale_factor, - tex_plane.height() as f32 * scale_factor, - ), - Vector2::new( - tex_plane.width() as f32 / 2.0 * scale_factor, - tex_plane.height() as f32 / 2.0 * scale_factor, - ), - 0.0, - Color::WHITE, - ); - } - } - // Draw 3D model (recomended to draw 3D always before 2D) - { - let mut d = d.begin_mode3D(camera); - - d.draw_model(&model, Vector3::new(0.0, 6.0, 0.0), 1.0, Color::WHITE); // Draw 3d model with texture - d.draw_grid(10, 10.0); - } - - // Draw 2D GUI stuff - draw_angle_gauge(&mut d, &tex_angle_gauge, 80, 70, roll, "roll", Color::RED); - draw_angle_gauge( - &mut d, - &tex_angle_gauge, - 190, - 70, - pitch, - "pitch", - Color::GREEN, - ); - draw_angle_gauge( - &mut d, - &tex_angle_gauge, - 300, - 70, - yaw, - "yaw", - Color::SKYBLUE, - ); - - d.draw_rectangle(30, 360, 260, 70, Color::SKYBLUE.fade(0.5)); - d.draw_rectangle_lines(30, 360, 260, 70, Color::DARKBLUE.fade(0.5)); - d.draw_text( - "Pitch controlled with: KEY_UP / KEY_DOWN", - 40, - 370, - 10, - Color::DARKGRAY, - ); - d.draw_text( - "Roll controlled with: KEY_LEFT / KEY_RIGHT", - 40, - 390, - 10, - Color::DARKGRAY, - ); - d.draw_text( - "Yaw controlled with: KEY_A / KEY_S", - 40, - 410, - 10, - Color::DARKGRAY, - ); - - // Draw framebuffer texture - d.draw_texture_rec( - framebuffer.texture(), - Rectangle::new( - 0.0, - 0.0, - framebuffer.texture.width as f32, - -framebuffer.texture.height as f32, - ), - Vector2::new( - screen_width as f32 - framebuffer.texture.width as f32 - 20.0, - 20.0, - ), - Color::WHITE.fade(0.8), - ); - } -} - -// Draw angle gauge controls -fn draw_angle_gauge( - d: &mut RaylibDrawHandle, - angle_gauge: &Texture2D, - x: i32, - y: i32, - angle: f32, - title: &str, - color: Color, -) { - let src_rec = Rectangle::new( - 0.0, - 0.0, - angle_gauge.width() as f32, - angle_gauge.height() as f32, - ); - let dst_rec = Rectangle::new( - x as f32, - y as f32, - angle_gauge.width() as f32, - angle_gauge.height() as f32, - ); - let origin = Vector2::new( - angle_gauge.width() as f32 / 2.0, - angle_gauge.height() as f32 / 2.0, - ); - let text_size = 20; - - d.draw_texture_pro(angle_gauge, src_rec, dst_rec, origin, angle, color); - - d.draw_text( - &format!("{:5.1}", angle), - x - measure_text(&format!("{:5.1}", angle), text_size) / 2, - y + 10, - text_size, - Color::DARKGRAY, - ); - d.draw_text( - title, - x - measure_text(title, text_size) / 2, - y + 60, - text_size, - Color::DARKGRAY, - ); -} diff --git a/showcase/.cargo/config.toml b/showcase/.cargo/config.toml deleted file mode 100644 index bb7eeedb..00000000 --- a/showcase/.cargo/config.toml +++ /dev/null @@ -1,4 +0,0 @@ -[target.wasm32-unknown-emscripten] -#rustflags = ["-C", "link-args=-s USE_GLFW=3 -s ASSERTIONS=1 -s ASYNCIFY=1 --profiling"] -# rustflags = ["-C", "link-args=-s USE_GLFW=3 -s FORCE_FILESYSTEM=1 -s ALLOW_MEMORY_GROWTH=1 -s ASYNCIFY --preload-file /root/raylib-rs/showcase/original@original"] -rustflags = ["-C", "link-args=-s USE_GLFW=3 -s FORCE_FILESYSTEM=1 -s ALLOW_MEMORY_GROWTH=1 -s ASYNCIFY --preload-file showcase/original@original"] \ No newline at end of file diff --git a/showcase/original/models/resources/angle_gauge.png b/showcase/original/models/resources/angle_gauge.png deleted file mode 100644 index f7871de6..00000000 Binary files a/showcase/original/models/resources/angle_gauge.png and /dev/null differ diff --git a/showcase/original/models/resources/background.png b/showcase/original/models/resources/background.png deleted file mode 100644 index 69a74b72..00000000 Binary files a/showcase/original/models/resources/background.png and /dev/null differ diff --git a/showcase/original/models/resources/billboard.png b/showcase/original/models/resources/billboard.png deleted file mode 100644 index e2fe398d..00000000 Binary files a/showcase/original/models/resources/billboard.png and /dev/null differ diff --git a/showcase/original/models/resources/guy/guy.blend b/showcase/original/models/resources/guy/guy.blend deleted file mode 100644 index 3880467d..00000000 Binary files a/showcase/original/models/resources/guy/guy.blend and /dev/null differ diff --git a/showcase/original/models/resources/guy/guy.iqm b/showcase/original/models/resources/guy/guy.iqm deleted file mode 100644 index 36bed5e0..00000000 Binary files a/showcase/original/models/resources/guy/guy.iqm and /dev/null differ diff --git a/showcase/original/models/resources/guy/guyanim.iqm b/showcase/original/models/resources/guy/guyanim.iqm deleted file mode 100644 index 824a68a3..00000000 Binary files a/showcase/original/models/resources/guy/guyanim.iqm and /dev/null differ diff --git a/showcase/original/models/resources/guy/guytex.png b/showcase/original/models/resources/guy/guytex.png deleted file mode 100644 index 7f813552..00000000 Binary files a/showcase/original/models/resources/guy/guytex.png and /dev/null differ diff --git a/showcase/original/models/resources/pbr/trooper.obj b/showcase/original/models/resources/pbr/trooper.obj deleted file mode 100644 index 8342149b..00000000 --- a/showcase/original/models/resources/pbr/trooper.obj +++ /dev/null @@ -1,18312 +0,0 @@ -# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware -# File Created: 26.04.2017 15:31:30 - -# -# object asdf -# - -v 0.000000 0.622922 0.713143 -v 0.000000 0.729854 0.627920 -v 0.000000 0.786583 0.636084 -v 0.000000 1.045946 0.570983 -v 0.000000 1.031233 0.544927 -v 0.000000 1.298009 0.514342 -v 0.000000 1.149254 0.538029 -v 0.000000 0.849328 0.558225 -v 0.000000 1.010490 0.528641 -v 0.000000 0.812325 0.602129 -v 0.000000 0.826873 0.574585 -v 0.000000 0.598750 0.710767 -v 0.000000 0.597623 0.667964 -v 0.084179 0.001562 0.626712 -v 0.000000 0.019620 0.500428 -v 0.169721 0.247278 0.492525 -v 0.000000 0.672880 0.668161 -v 0.151477 0.524575 0.652958 -v 0.131329 0.580069 0.661848 -v 0.114890 0.690102 0.619225 -v 0.089181 0.737425 0.627349 -v 0.053560 0.774530 0.633427 -v 0.049246 0.664280 0.667001 -v 0.186382 0.271672 0.580150 -v 0.311559 0.308788 0.348438 -v 0.378840 0.342231 0.214617 -v 0.183507 0.569029 0.586468 -v 0.209450 0.536520 0.545413 -v 0.198080 0.521331 0.574546 -v 0.267398 0.403558 0.503948 -v 0.256089 0.441711 0.491998 -v 0.285742 0.459568 0.464178 -v 0.306543 0.432843 0.469860 -v 0.165325 0.437671 0.633861 -v 0.247099 0.266255 0.460384 -v 0.411737 0.577071 0.405239 -v 0.391126 0.593584 0.404410 -v 0.423157 0.665068 0.384484 -v 0.450381 0.650863 0.385873 -v 0.455839 0.767810 0.367329 -v 0.485703 0.759030 0.374794 -v 0.459863 0.861942 0.364012 -v 0.441495 0.926861 0.380699 -v 0.464600 0.938004 0.400564 -v 0.486272 0.860457 0.381569 -v 0.412950 0.958719 0.400066 -v 0.433231 0.969863 0.422984 -v 0.384666 0.993819 0.454111 -v 0.373370 0.975991 0.421316 -v 0.268595 1.001637 0.475054 -v 0.282018 1.019372 0.506357 -v 0.140747 1.022724 0.522858 -v 0.142861 1.038352 0.553143 -v 0.382002 0.526733 0.421956 -v 0.358027 0.549805 0.420654 -v 0.283231 1.129298 0.472519 -v 0.407676 1.103160 0.412405 -v 0.142742 1.145411 0.517657 -v 0.475980 1.051464 0.381820 -v 0.436937 1.273467 0.377742 -v 0.509148 1.215159 0.336059 -v 0.304083 1.289812 0.450362 -v 0.143813 1.298790 0.497732 -v 0.110535 0.005395 0.599741 -v 0.144636 0.007877 0.604104 -v 0.293295 0.114109 0.276156 -v 0.260152 0.107644 0.254081 -v 0.197065 0.074325 0.379573 -v 0.227388 0.078784 0.397485 -v 0.237847 0.407594 0.541883 -v 0.231621 0.449564 0.516437 -v 0.160737 0.631269 0.602314 -v 0.444186 0.859839 0.371886 -v 0.434630 0.774993 0.376796 -v 0.411293 0.784139 0.372012 -v 0.403227 0.683902 0.400076 -v 0.388978 0.692028 0.396861 -v 0.369494 0.625951 0.429479 -v 0.358286 0.634576 0.424258 -v 0.342018 0.588721 0.453890 -v 0.331282 0.598798 0.447604 -v 0.289939 0.540541 0.495245 -v 0.281628 0.555508 0.488272 -v 0.309166 0.574121 0.466919 -v 0.261032 0.532563 0.515138 -v 0.258024 0.548682 0.507222 -v 0.202005 0.604862 0.553457 -v 0.205910 0.611484 0.542729 -v 0.223742 0.580733 0.532442 -v 0.221625 0.567634 0.541178 -v 0.178827 0.658546 0.552711 -v 0.173035 0.649694 0.573047 -v 0.125737 0.710486 0.599078 -v 0.141059 0.725485 0.557956 -v 0.098129 0.758054 0.597822 -v 0.108767 0.774398 0.560327 -v 0.061667 0.811050 0.570191 -v 0.057506 0.797335 0.602919 -v 0.154331 0.735616 0.545874 -v 0.190511 0.669141 0.544146 -v 0.120866 0.788022 0.551539 -v 0.065878 0.831958 0.557455 -v 0.439622 0.164783 0.046454 -v 0.403369 0.158676 0.035724 -v 0.454695 0.393247 0.013123 -v 0.498859 0.652598 0.320131 -v 0.478108 0.569070 0.289071 -v 0.518749 0.756759 0.340138 -v 0.527035 0.864085 0.351082 -v 0.550736 0.898387 0.334364 -v 0.544386 1.063371 0.335370 -v 0.545633 0.957967 0.341651 -v 0.533646 1.144131 0.326771 -v 0.422309 0.390526 0.007474 -v 0.113420 0.036204 0.643019 -v 0.134754 0.038875 0.643369 -v 0.135221 0.496068 0.699086 -v 0.113959 0.491977 0.697827 -v 0.100398 0.533113 0.702830 -v 0.121035 0.544521 0.704907 -v 0.076885 0.568295 0.706604 -v 0.093612 0.585987 0.709064 -v 0.041615 0.592176 0.710046 -v 0.050283 0.614831 0.711977 -v 0.432885 0.496493 0.293853 -v 0.400949 0.430460 0.265742 -v 0.096783 0.628475 0.664271 -v 0.052102 0.724350 0.626520 -v 0.138353 1.005327 0.509887 -v 0.263014 0.984554 0.465959 -v 0.365811 0.960416 0.411823 -v 0.394256 0.940253 0.388419 -v 0.410052 0.910315 0.375204 -v 0.419575 0.862522 0.366444 -v 0.380631 0.699220 0.401037 -v 0.349108 0.645921 0.427353 -v 0.323965 0.614964 0.450672 -v 0.278554 0.580382 0.490828 -v 0.300994 0.592376 0.471315 -v 0.254464 0.581187 0.510285 -v 0.215870 0.620817 0.535316 -v 0.557803 0.755616 0.295922 -v 0.546731 0.661016 0.259888 -v 0.531596 0.568778 0.214190 -v 0.503308 0.414580 0.027689 -v 0.523063 0.514749 0.176710 -v 0.512466 0.454397 0.115234 -v 0.566009 0.866797 0.314610 -v 0.335534 0.135443 0.125461 -v 0.370979 0.144594 0.147925 -v 0.133099 0.006781 0.635881 -v 0.115421 0.004489 0.635349 -v 0.107225 0.496826 0.657458 -v 0.098172 0.534477 0.662574 -v 0.078210 0.567301 0.665019 -v 0.042684 0.588742 0.667999 -v 0.138654 0.035774 0.498835 -v 0.177433 0.045028 0.511062 -v 0.232130 0.302131 0.350816 -v 0.394011 0.379101 0.048138 -v 0.329111 0.350753 0.175490 -v 0.508459 0.549937 -0.030999 -v 0.447154 0.538399 -0.038645 -v 0.521728 0.703778 -0.084572 -v 0.462647 0.692239 -0.093682 -v 0.541601 0.885421 -0.147515 -v 0.482814 0.888664 -0.158438 -v 0.406864 0.426440 0.035170 -v 0.422535 0.552211 -0.000368 -v 0.437495 0.703889 -0.055161 -v 0.460158 0.902545 -0.122292 -v 0.511690 0.951481 0.370465 -v 0.119837 0.785737 0.545637 -v 0.065203 0.830441 0.550092 -v 0.000000 0.847636 0.551977 -v 0.318931 0.563527 0.473299 -v 0.325282 0.505009 0.439221 -v 0.347680 0.478912 0.441207 -v 0.233389 0.598793 0.525692 -v 0.241209 0.558521 0.519476 -v 0.239296 0.542350 0.529470 -v 0.216445 0.488345 0.537085 -v 0.216352 0.460240 0.561593 -v 0.135568 0.289508 0.673741 -v 0.114279 0.286852 0.673442 -v 0.109956 0.290610 0.632618 -v 0.462678 0.445515 0.162601 -v 0.475992 0.504367 0.232227 -v 0.419538 0.415538 0.178370 -v 0.084165 0.004645 0.599219 -v 0.084146 0.352002 0.640173 -v 0.084146 0.482690 0.655758 -v 0.078088 0.516461 0.660174 -v 0.061269 0.547527 0.662898 -v 0.033034 0.565643 0.665350 -v 0.000000 0.572762 0.665373 -v 0.000000 0.569438 0.693598 -v 0.061279 0.544283 0.690643 -v 0.084179 0.479331 0.683015 -v 0.033134 0.562394 0.692770 -v 0.078102 0.513276 0.687002 -v 0.084179 0.347638 0.662632 -v 0.084179 0.353069 0.668186 -v 0.084179 0.340460 0.666706 -v -0.151477 0.524575 0.652958 -v -0.183508 0.569029 0.586468 -v -0.131329 0.580069 0.661848 -v -0.160737 0.631269 0.602314 -v -0.052102 0.724350 0.626520 -v -0.053560 0.774530 0.633427 -v -0.049247 0.664280 0.667001 -v -0.311559 0.308788 0.348438 -v -0.293295 0.114109 0.276156 -v -0.378840 0.342231 0.214617 -v -0.370979 0.144594 0.147925 -v -0.198080 0.521331 0.574546 -v -0.209450 0.536520 0.545413 -v -0.267398 0.403558 0.503948 -v -0.306543 0.432843 0.469860 -v -0.256090 0.441711 0.491998 -v -0.285742 0.459568 0.464178 -v -0.165325 0.437671 0.633861 -v -0.247100 0.266255 0.460384 -v -0.227388 0.078784 0.397485 -v -0.411737 0.577071 0.405239 -v -0.450381 0.650863 0.385873 -v -0.391126 0.593584 0.404410 -v -0.423157 0.665068 0.384484 -v -0.485704 0.759030 0.374794 -v -0.455839 0.767810 0.367329 -v -0.459864 0.861942 0.364012 -v -0.486272 0.860457 0.381569 -v -0.441495 0.926861 0.380699 -v -0.464600 0.938004 0.400564 -v -0.433231 0.969863 0.422984 -v -0.412950 0.958719 0.400066 -v -0.282018 1.019372 0.506357 -v -0.268596 1.001637 0.475054 -v -0.384666 0.993819 0.454111 -v -0.373370 0.975991 0.421316 -v -0.142861 1.038352 0.553143 -v -0.140747 1.022724 0.522858 -v -0.478108 0.569070 0.289071 -v -0.498859 0.652598 0.320131 -v -0.518749 0.756759 0.340138 -v -0.527035 0.864085 0.351082 -v -0.382002 0.526733 0.421956 -v -0.358028 0.549805 0.420654 -v -0.283231 1.129298 0.472519 -v -0.407676 1.103160 0.412405 -v -0.142742 1.145411 0.517657 -v -0.511691 0.951481 0.370465 -v -0.475980 1.051464 0.381820 -v -0.436937 1.273467 0.377742 -v -0.509148 1.215159 0.336059 -v -0.304083 1.289812 0.450362 -v -0.143813 1.298790 0.497732 -v -0.115421 0.004489 0.635349 -v -0.110535 0.005395 0.599741 -v -0.133099 0.006781 0.635881 -v -0.144636 0.007877 0.604104 -v -0.197066 0.074325 0.379573 -v -0.260152 0.107644 0.254081 -v -0.335534 0.135443 0.125461 -v -0.177433 0.045028 0.511062 -v -0.138654 0.035774 0.498835 -v -0.237847 0.407594 0.541883 -v -0.231621 0.449564 0.516437 -v -0.186382 0.271672 0.580150 -v -0.057506 0.797335 0.602919 -v -0.098130 0.758054 0.597822 -v -0.089181 0.737425 0.627349 -v -0.125738 0.710486 0.599078 -v -0.114890 0.690102 0.619225 -v -0.202006 0.604862 0.553457 -v -0.173035 0.649694 0.573047 -v -0.221625 0.567634 0.541178 -v -0.261032 0.532563 0.515138 -v -0.289939 0.540541 0.495245 -v -0.369494 0.625951 0.429479 -v -0.403228 0.683902 0.400076 -v -0.434630 0.774993 0.376796 -v -0.444187 0.859839 0.371886 -v -0.394256 0.940253 0.388419 -v -0.410053 0.910315 0.375204 -v -0.263014 0.984554 0.465959 -v -0.365811 0.960416 0.411823 -v -0.138353 1.005327 0.509887 -v -0.342018 0.588721 0.453890 -v -0.325282 0.505009 0.439221 -v -0.318931 0.563527 0.473299 -v -0.419575 0.862522 0.366444 -v -0.411293 0.784139 0.372012 -v -0.388978 0.692028 0.396861 -v -0.358286 0.634576 0.424258 -v -0.331282 0.598798 0.447604 -v -0.309166 0.574121 0.466919 -v -0.281628 0.555508 0.488272 -v -0.258024 0.548682 0.507222 -v -0.223743 0.580733 0.532442 -v -0.205910 0.611484 0.542729 -v -0.178827 0.658546 0.552711 -v -0.141059 0.725485 0.557956 -v -0.108768 0.774398 0.560327 -v -0.061667 0.811050 0.570191 -v -0.190511 0.669141 0.544146 -v -0.154331 0.735616 0.545874 -v -0.120866 0.788022 0.551539 -v -0.065878 0.831958 0.557455 -v -0.566009 0.866797 0.314610 -v -0.557803 0.755616 0.295922 -v -0.403369 0.158676 0.035724 -v -0.422309 0.390526 0.007474 -v -0.439623 0.164783 0.046454 -v -0.454695 0.393247 0.013123 -v -0.232130 0.302131 0.350816 -v -0.329112 0.350753 0.175490 -v -0.169721 0.247278 0.492525 -v -0.394011 0.379101 0.048138 -v -0.113420 0.036204 0.643019 -v -0.134754 0.038875 0.643369 -v -0.114279 0.286852 0.673442 -v -0.135568 0.289508 0.673741 -v -0.121036 0.544521 0.704907 -v -0.100398 0.533113 0.702830 -v -0.135221 0.496068 0.699086 -v -0.113959 0.491977 0.697827 -v -0.093612 0.585987 0.709064 -v -0.076885 0.568295 0.706604 -v -0.050284 0.614831 0.711977 -v -0.041615 0.592176 0.710046 -v -0.347680 0.478912 0.441207 -v -0.400949 0.430460 0.265742 -v -0.432885 0.496493 0.293853 -v -0.419538 0.415538 0.178370 -v -0.475992 0.504367 0.232227 -v -0.546731 0.661016 0.259888 -v -0.096783 0.628475 0.664271 -v -0.380631 0.699220 0.401037 -v -0.349108 0.645921 0.427353 -v -0.323965 0.614964 0.450672 -v -0.278554 0.580382 0.490828 -v -0.300994 0.592376 0.471315 -v -0.254465 0.581187 0.510285 -v -0.233389 0.598793 0.525692 -v -0.215870 0.620817 0.535316 -v -0.065203 0.830441 0.550092 -v -0.119838 0.785737 0.545637 -v -0.550737 0.898387 0.334364 -v -0.533646 1.144131 0.326771 -v -0.544386 1.063371 0.335370 -v -0.508459 0.549937 -0.030999 -v -0.503308 0.414580 0.027689 -v -0.042684 0.588742 0.667999 -v -0.078210 0.567301 0.665019 -v -0.098173 0.534477 0.662574 -v -0.107225 0.496826 0.657458 -v -0.109956 0.290610 0.632618 -v -0.084165 0.004645 0.599219 -v -0.216445 0.488345 0.537085 -v -0.216353 0.460240 0.561593 -v -0.239297 0.542350 0.529470 -v -0.241209 0.558521 0.519476 -v -0.447154 0.538399 -0.038645 -v -0.521729 0.703778 -0.084572 -v -0.462647 0.692239 -0.093682 -v -0.541601 0.885421 -0.147515 -v -0.482814 0.888664 -0.158438 -v -0.406864 0.426440 0.035170 -v -0.422535 0.552211 -0.000368 -v -0.437495 0.703889 -0.055161 -v -0.460158 0.902545 -0.122292 -v -0.512467 0.454397 0.115234 -v -0.462678 0.445515 0.162601 -v -0.545633 0.957967 0.341651 -v -0.523063 0.514749 0.176710 -v -0.531596 0.568778 0.214190 -v -0.084146 0.352002 0.640173 -v -0.084146 0.482690 0.655758 -v -0.078088 0.516461 0.660174 -v -0.061269 0.547527 0.662898 -v -0.033034 0.565643 0.665350 -v -0.033135 0.562394 0.692770 -v -0.078102 0.513276 0.687002 -v -0.084179 0.479331 0.683015 -v -0.061279 0.544283 0.690643 -v -0.084179 0.001562 0.626712 -v -0.084179 0.340460 0.666706 -v -0.084179 0.347638 0.662632 -v -0.084179 0.353069 0.668186 -v 0.472678 0.498641 0.495580 -v 0.455134 0.363052 0.415115 -v 0.495820 0.677998 0.552178 -v 0.508480 0.873301 0.617343 -v 0.418954 1.198035 0.746808 -v 0.226891 1.228586 0.775409 -v 0.000000 1.239688 0.783618 -v 0.507938 0.922792 0.636298 -v 0.498280 1.034902 0.679668 -v 0.463011 1.172257 0.732715 -v 0.526901 0.501753 0.487367 -v 0.503139 0.380206 0.406528 -v 0.557002 0.682570 0.546605 -v 0.557258 0.890442 0.616173 -v 0.440330 1.260757 0.756994 -v 0.237063 1.291562 0.788802 -v 0.000000 1.303438 0.798479 -v 0.551565 1.044372 0.673726 -v 0.519555 1.199309 0.727544 -v 0.578629 0.860338 0.602969 -v 0.453456 0.387867 0.009125 -v 0.514033 0.413414 0.006748 -v 0.538383 0.540815 -0.041315 -v 0.563228 0.698624 -0.097146 -v 0.578629 0.889788 -0.165692 -v 0.401001 1.304767 0.242620 -v 0.335796 1.309552 0.340186 -v 0.121185 1.312348 0.465164 -v 0.000000 1.311687 0.475739 -v 0.556904 0.925710 -0.185852 -v 0.553961 0.965324 -0.221030 -v 0.547991 1.040282 -0.269386 -v 0.533706 1.185715 -0.306229 -v 0.460050 0.394654 0.460563 -v 0.507153 0.403294 0.446925 -v 0.485571 1.116606 0.710684 -v 0.535991 1.130023 0.705238 -v 0.542214 1.125565 -0.298134 -v 0.531238 0.518132 0.263921 -v 0.559660 0.689425 0.272826 -v 0.578629 0.873101 0.278899 -v 0.557889 0.905482 0.281533 -v 0.551597 1.042421 0.292352 -v 0.539814 1.135696 0.301089 -v 0.518906 1.213291 0.458865 -v 0.454415 0.367847 0.251116 -v 0.507363 0.391047 0.248269 -v 0.521461 1.231712 -0.295396 -v 0.551526 1.040605 -0.117034 -v 0.544234 1.105747 -0.107437 -v 0.462265 1.300027 0.118026 -v 0.521878 1.217109 0.125659 -v 0.497751 1.296740 -0.210064 -v 0.439391 1.282255 0.525135 -v 0.237065 1.307015 0.594925 -v 0.000000 1.310493 0.630779 -v 0.457592 0.372454 0.442336 -v 0.504071 0.386924 0.431313 -v 0.509748 1.274034 -0.264504 -v 0.457855 0.385287 0.432539 -v 0.454862 0.383365 0.250964 -v 0.455654 0.378042 0.411305 -v 0.460638 1.175477 0.718840 -v 0.417039 1.199882 0.732548 -v 0.495675 0.682478 0.538474 -v 0.472448 0.503090 0.481931 -v 0.508165 0.878296 0.603678 -v 0.225296 1.229162 0.761042 -v 0.000000 1.239799 0.766477 -v 0.497310 1.039942 0.666166 -v 0.507395 0.928064 0.622852 -v 0.483919 1.120965 0.697020 -v 0.459794 0.402406 0.446365 -v 0.496029 0.399310 0.418886 -v 0.524404 0.529557 0.264265 -v 0.499299 0.405394 0.253953 -v 0.496064 0.396443 0.403086 -v 0.493704 1.202905 0.706920 -v 0.491877 1.222469 0.271484 -v 0.432994 1.237217 0.726031 -v 0.406565 1.283041 0.245873 -v 0.545063 0.682278 0.529418 -v 0.548665 0.682341 0.276431 -v 0.514660 0.503906 0.469355 -v 0.558168 0.861778 0.586649 -v 0.561787 0.869876 0.282683 -v 0.227789 1.268357 0.761172 -v 0.344000 1.286400 0.347772 -v 0.123232 1.293313 0.475684 -v 0.000000 1.276835 0.764351 -v 0.000000 1.291718 0.487812 -v 0.544438 0.891741 0.598331 -v 0.547857 0.901451 0.284972 -v 0.533694 1.044316 0.657349 -v 0.542418 1.041574 0.280644 -v 0.541725 0.940231 0.285367 -v 0.538157 0.929880 0.613045 -v 0.523336 1.130394 0.687416 -v 0.532723 1.127003 0.276865 -v 0.438828 1.287197 0.115931 -v 0.467218 1.288406 -0.109583 -v 0.497531 0.413366 0.432461 -v 0.417627 1.255699 0.520493 -v 0.573825 0.913823 -0.177280 -v 0.573955 0.895149 0.280376 -v 0.574051 0.881109 0.610551 -v 0.435214 1.306286 0.112960 -v 0.483731 1.303610 -0.110598 -v 0.460597 1.307026 -0.109257 -v 0.517924 1.185677 -0.279932 -v 0.527570 1.125716 -0.273598 -v 0.533346 1.041535 -0.244216 -v 0.538489 0.966120 -0.193288 -v 0.545807 0.923712 -0.158500 -v 0.559396 0.890681 -0.141981 -v 0.541768 0.699706 -0.078683 -v 0.522827 0.542499 -0.018996 -v 0.502348 0.421501 0.023788 -v 0.454188 0.400027 0.020421 -v 0.490524 1.185677 -0.282528 -v 0.493804 1.125716 -0.277663 -v 0.490550 1.185908 -0.305724 -v 0.493268 1.125560 -0.301537 -v 0.498703 1.041535 -0.252803 -v 0.498387 1.041395 -0.273887 -v 0.502402 0.966120 -0.203136 -v 0.501880 0.968429 -0.229786 -v 0.501328 0.910853 -0.182371 -v 0.501295 0.908990 -0.160008 -v 0.496870 0.699706 -0.084306 -v 0.496949 0.701241 -0.103441 -v 0.477537 0.542852 -0.032825 -v 0.477593 0.543778 -0.048374 -v 0.497124 1.262500 -0.242720 -v 0.509349 1.220731 -0.273629 -v 0.490045 1.279480 -0.202366 -v 0.485872 1.230418 -0.296101 -v 0.486558 1.220731 -0.276225 -v 0.478962 1.262500 -0.247944 -v 0.477158 1.274252 -0.264501 -v 0.467497 1.298303 -0.209259 -v 0.470183 1.284062 -0.202366 -v 0.516461 1.240163 -0.107947 -v 0.524456 1.220080 -0.155722 -v 0.534875 1.172294 -0.175250 -v 0.542633 1.125781 -0.154095 -v 0.534875 1.173073 -0.039573 -v 0.524411 1.219834 -0.058684 -v 0.540902 1.125098 -0.060120 -v 0.534875 1.111311 -0.107437 -v 0.534875 1.128549 -0.151332 -v 0.534875 1.237813 -0.108846 -v 0.534875 1.218874 -0.154189 -v 0.534875 1.128377 -0.063540 -v 0.534875 1.218432 -0.061318 -v 0.473441 1.302867 -0.010762 -v 0.452160 1.306359 -0.010008 -v 0.457523 1.287529 -0.009930 -v 0.529670 1.121062 -0.010335 -v 0.465373 1.263467 0.126383 -v 0.515162 1.259525 -0.190287 -v 0.507844 1.272916 -0.111218 -v 0.504476 1.273514 -0.025759 -v 0.526132 1.220835 -0.227576 -v 0.497090 1.270667 0.125320 -v 0.488818 1.255423 0.493359 -v 0.490346 1.237550 0.741165 -v 0.443790 1.189769 0.740555 -v 0.441632 1.192343 0.726499 -v 0.467913 1.224439 0.715903 -v 0.469037 1.237820 0.508236 -v 0.245138 1.311425 0.423078 -v 0.247845 1.290506 0.430310 -v 0.440425 1.267422 0.260726 -v 0.476756 1.273515 -0.009293 -v 0.482988 1.277877 -0.109284 -v 0.502717 1.204145 0.512725 -v 0.501746 1.227849 -0.007411 -v 0.505001 1.225114 -0.109696 -v -0.524404 0.529557 0.264265 -v -0.499299 0.405394 0.253953 -v -0.496064 0.396443 0.403086 -v -0.491877 1.222469 0.271484 -v -0.440425 1.267422 0.260726 -v -0.465373 1.263467 0.126383 -v -0.460050 0.394654 0.460563 -v -0.507153 0.403294 0.446925 -v -0.472678 0.498641 0.495580 -v -0.526901 0.501753 0.487367 -v -0.495820 0.677998 0.552178 -v -0.557002 0.682570 0.546605 -v -0.578629 0.860338 0.602969 -v -0.508480 0.873301 0.617343 -v -0.226891 1.228586 0.775409 -v -0.418954 1.198035 0.746808 -v -0.237063 1.291562 0.788802 -v -0.440330 1.260757 0.756994 -v -0.557258 0.890442 0.616173 -v -0.507938 0.922792 0.636298 -v -0.498280 1.034902 0.679668 -v -0.551565 1.044372 0.673726 -v -0.443790 1.189769 0.740555 -v -0.463011 1.172257 0.732715 -v -0.490346 1.237550 0.741165 -v -0.519555 1.199309 0.727544 -v -0.485571 1.116606 0.710684 -v -0.535991 1.130023 0.705238 -v -0.455134 0.363052 0.415115 -v -0.454415 0.367847 0.251116 -v -0.503139 0.380206 0.406528 -v -0.507363 0.391047 0.248269 -v -0.531238 0.518132 0.263921 -v -0.559660 0.689425 0.272826 -v -0.578629 0.873101 0.278899 -v -0.237065 1.307015 0.594925 -v -0.439391 1.282255 0.525135 -v -0.551597 1.042421 0.292352 -v -0.557889 0.905482 0.281533 -v -0.488818 1.255423 0.493359 -v -0.518906 1.213291 0.458865 -v -0.539814 1.135696 0.301089 -v -0.574051 0.881109 0.610551 -v -0.573955 0.895149 0.280376 -v -0.457592 0.372454 0.442336 -v -0.504071 0.386924 0.431313 -v -0.545063 0.682278 0.529418 -v -0.548665 0.682341 0.276431 -v -0.514660 0.503906 0.469355 -v -0.561787 0.869876 0.282683 -v -0.558168 0.861778 0.586649 -v -0.247845 1.290506 0.430310 -v -0.227789 1.268357 0.761172 -v -0.123232 1.293313 0.475684 -v -0.547857 0.901451 0.284972 -v -0.544438 0.891741 0.598331 -v -0.533694 1.044316 0.657349 -v -0.542418 1.041574 0.280644 -v -0.538157 0.929880 0.613045 -v -0.541725 0.940231 0.285367 -v -0.523336 1.130394 0.687416 -v -0.532723 1.127003 0.276865 -v -0.502717 1.204145 0.512725 -v -0.493704 1.202905 0.706920 -v -0.521878 1.217109 0.125659 -v -0.478962 1.262500 -0.247944 -v -0.477158 1.274252 -0.264501 -v -0.486558 1.220731 -0.276225 -v -0.485872 1.230418 -0.296101 -v -0.470183 1.284062 -0.202366 -v -0.467497 1.298303 -0.209259 -v -0.517924 1.185677 -0.279932 -v -0.527570 1.125716 -0.273598 -v -0.529670 1.121062 -0.010335 -v -0.533346 1.041535 -0.244216 -v -0.538489 0.966120 -0.193288 -v -0.559396 0.890681 -0.141981 -v -0.545807 0.923712 -0.158500 -v -0.541768 0.699706 -0.078683 -v -0.522827 0.542499 -0.018996 -v -0.502348 0.421501 0.023788 -v -0.514033 0.413414 0.006748 -v -0.453456 0.387867 0.009125 -v -0.538383 0.540815 -0.041315 -v -0.563228 0.698624 -0.097146 -v -0.578629 0.889788 -0.165692 -v -0.573825 0.913823 -0.177280 -v -0.556904 0.925710 -0.185852 -v -0.551526 1.040605 -0.117034 -v -0.245138 1.311425 0.423078 -v -0.335796 1.309552 0.340186 -v -0.401001 1.304767 0.242620 -v -0.462265 1.300027 0.118026 -v -0.121185 1.312348 0.465164 -v -0.497531 0.413366 0.432461 -v -0.454862 0.383365 0.250964 -v -0.455654 0.378042 0.411305 -v -0.457855 0.385287 0.432539 -v -0.441632 1.192343 0.726499 -v -0.460638 1.175477 0.718840 -v -0.495675 0.682478 0.538474 -v -0.472448 0.503090 0.481931 -v -0.508165 0.878296 0.603678 -v -0.417039 1.199882 0.732548 -v -0.225296 1.229162 0.761042 -v -0.497310 1.039942 0.666166 -v -0.507395 0.928064 0.622852 -v -0.483919 1.120965 0.697020 -v -0.454188 0.400027 0.020421 -v -0.459794 0.402406 0.446365 -v -0.496029 0.399310 0.418886 -v -0.467913 1.224439 0.715903 -v -0.432994 1.237217 0.726031 -v -0.469037 1.237820 0.508236 -v -0.496949 0.701241 -0.103441 -v -0.477593 0.543778 -0.048374 -v -0.553961 0.965324 -0.221030 -v -0.501880 0.968429 -0.229786 -v -0.547991 1.040282 -0.269386 -v -0.498387 1.041395 -0.273887 -v -0.542214 1.125565 -0.298134 -v -0.493268 1.125560 -0.301537 -v -0.501328 0.910853 -0.182371 -v -0.533706 1.185715 -0.306229 -v -0.490550 1.185908 -0.305724 -v -0.406565 1.283041 0.245873 -v -0.344000 1.286400 0.347772 -v -0.438828 1.287197 0.115931 -v -0.435214 1.306286 0.112960 -v -0.473441 1.302867 -0.010762 -v -0.452160 1.306359 -0.010008 -v -0.417627 1.255699 0.520493 -v -0.457523 1.287529 -0.009930 -v -0.467218 1.288406 -0.109583 -v -0.460597 1.307026 -0.109257 -v -0.493804 1.125716 -0.277663 -v -0.490524 1.185677 -0.282528 -v -0.498703 1.041535 -0.252803 -v -0.502402 0.966120 -0.203136 -v -0.501295 0.908990 -0.160008 -v -0.496870 0.699706 -0.084306 -v -0.477537 0.542852 -0.032825 -v -0.509349 1.220731 -0.273629 -v -0.497124 1.262500 -0.242720 -v -0.521461 1.231712 -0.295396 -v -0.509748 1.274034 -0.264504 -v -0.497751 1.296740 -0.210064 -v -0.490045 1.279480 -0.202366 -v -0.483731 1.303610 -0.110598 -v -0.501746 1.227849 -0.007411 -v -0.505001 1.225114 -0.109696 -v -0.524456 1.220080 -0.155722 -v -0.534875 1.172294 -0.175250 -v -0.526132 1.220835 -0.227576 -v -0.516461 1.240163 -0.107947 -v -0.507844 1.272916 -0.111218 -v -0.515162 1.259525 -0.190287 -v -0.524411 1.219834 -0.058684 -v -0.504476 1.273514 -0.025759 -v -0.497090 1.270667 0.125320 -v -0.544234 1.105747 -0.107437 -v -0.540902 1.125098 -0.060120 -v -0.542633 1.125781 -0.154095 -v -0.534875 1.111311 -0.107437 -v -0.534875 1.128549 -0.151332 -v -0.534875 1.237813 -0.108846 -v -0.534875 1.218874 -0.154189 -v -0.534875 1.173073 -0.039573 -v -0.534875 1.128377 -0.063540 -v -0.534875 1.218432 -0.061318 -v -0.476756 1.273515 -0.009293 -v -0.482988 1.277877 -0.109284 -v 0.000000 0.275313 -0.663685 -v 0.000000 0.401435 -0.692916 -v 0.000000 0.482880 -0.796468 -v 0.000000 0.553547 -0.851344 -v 0.000000 0.832426 -0.872868 -v 0.000000 0.893900 -0.856622 -v 0.000000 0.927457 -0.832146 -v 0.000000 1.131149 -0.815607 -v 0.000000 1.220981 -0.796999 -v 0.000000 1.284136 -0.768631 -v 0.000000 1.310340 -0.741967 -v 0.000000 0.743029 -0.878336 -v 0.000000 0.425120 -0.718862 -v 0.000000 1.403912 -0.699561 -v 0.000000 1.546331 -0.229220 -v 0.000000 1.540559 -0.376814 -v 0.000000 1.522687 -0.517027 -v 0.000000 1.479294 -0.625103 -v 0.000000 1.543301 -0.073087 -v 0.000000 1.533419 0.076839 -v 0.000000 1.516212 0.199947 -v 0.000000 1.346225 0.433512 -v 0.000000 1.420419 0.392736 -v 0.000000 1.484265 0.311647 -v 0.000000 1.296991 0.443624 -v 0.000000 1.027557 -0.826267 -v 0.000000 0.649856 -0.873601 -v 0.000000 0.378046 -0.678510 -v 0.000000 0.273635 -0.628613 -v 0.000000 1.296991 0.502498 -v 0.466306 0.386360 -0.136250 -v 0.454450 0.392430 -0.287917 -v 0.425859 0.398485 -0.412160 -v 0.368089 0.401568 -0.521642 -v 0.297157 0.403666 -0.596314 -v 0.205207 0.403504 -0.649593 -v 0.105847 0.402057 -0.682957 -v 0.480393 0.409301 -0.301310 -v 0.452650 0.418753 -0.431928 -v 0.390228 0.422728 -0.545312 -v 0.312241 0.424274 -0.619736 -v 0.215618 0.424967 -0.674609 -v 0.111099 0.424687 -0.705398 -v 0.639960 0.513162 -0.272312 -v 0.599536 0.452946 -0.199652 -v 0.565749 0.452970 -0.370140 -v 0.619839 0.518132 -0.424157 -v 0.571177 0.525431 -0.548174 -v 0.523320 0.460508 -0.502629 -v 0.494740 0.534493 -0.657377 -v 0.451475 0.468040 -0.610905 -v 0.395924 0.543049 -0.744076 -v 0.362309 0.473311 -0.693480 -v 0.123652 0.483032 -0.786924 -v 0.245744 0.479214 -0.754807 -v 0.265657 0.549179 -0.808178 -v 0.132838 0.553184 -0.842528 -v 0.661515 0.618840 -0.315200 -v 0.644798 0.622977 -0.442636 -v 0.595960 0.628675 -0.572599 -v 0.513801 0.635011 -0.677834 -v 0.409901 0.641868 -0.763748 -v 0.275951 0.645809 -0.830733 -v 0.136471 0.649791 -0.865248 -v 0.617504 0.863480 -0.269102 -v 0.648789 0.803643 -0.321878 -v 0.621909 0.816086 -0.447824 -v 0.582346 0.882561 -0.430587 -v 0.544359 0.883943 -0.558911 -v 0.574742 0.819434 -0.574193 -v 0.483138 0.885529 -0.663189 -v 0.504765 0.823740 -0.679602 -v 0.270124 0.894651 -0.811084 -v 0.274073 0.830747 -0.832120 -v 0.134353 0.831969 -0.865275 -v 0.126694 0.894325 -0.844375 -v 0.555684 0.924913 -0.215786 -v 0.542490 0.930013 -0.409367 -v 0.506223 0.929637 -0.540696 -v 0.453039 0.926990 -0.643237 -v 0.251092 0.934623 -0.761604 -v 0.131933 0.935714 -0.801735 -v 0.118270 0.928204 -0.817928 -v 0.541290 1.131051 -0.329770 -v 0.522547 1.221382 -0.333103 -v 0.527345 1.130042 -0.414468 -v 0.507335 1.220849 -0.419783 -v 0.466574 1.222041 -0.533019 -v 0.483032 1.131700 -0.538807 -v 0.401709 1.220497 -0.629408 -v 0.423966 1.131922 -0.637852 -v 0.499345 1.281729 -0.300617 -v 0.483534 1.282236 -0.412917 -v 0.440056 1.282233 -0.516511 -v 0.377487 1.282191 -0.611856 -v 0.305615 1.282151 -0.683800 -v 0.322480 1.219805 -0.699842 -v 0.218417 1.284231 -0.727081 -v 0.236803 1.222103 -0.751386 -v 0.135989 1.220931 -0.782210 -v 0.117495 1.283165 -0.757567 -v 0.445922 0.403746 -0.027623 -v 0.505883 0.408960 -0.050173 -v 0.468055 0.381464 -0.035311 -v 0.580665 0.890722 -0.197061 -v 0.138959 0.743105 -0.870690 -v 0.596701 0.725339 -0.578856 -v 0.516370 0.731493 -0.688300 -v 0.642316 0.719345 -0.447379 -v 0.661834 0.716038 -0.329195 -v 0.520064 0.454769 -0.062988 -v 0.548213 0.459164 -0.113006 -v 0.546190 0.422366 -0.110464 -v 0.592898 0.490111 -0.196279 -v 0.620879 0.540437 -0.260291 -v 0.638525 0.622410 -0.295973 -v 0.630203 0.789048 -0.299916 -v 0.608579 0.835674 -0.253307 -v 0.639084 0.716171 -0.308229 -v 0.579652 0.842662 -0.180699 -v 0.561758 0.716544 -0.140073 -v 0.443242 1.310225 -0.388568 -v 0.404913 1.310202 -0.498226 -v 0.349724 1.310198 -0.586795 -v 0.282673 1.309843 -0.654823 -v 0.198588 1.310222 -0.700834 -v 0.106783 1.310295 -0.731039 -v 0.385868 1.400122 -0.400909 -v 0.310421 1.467857 -0.390880 -v 0.266173 1.457967 -0.524738 -v 0.311280 1.398134 -0.549305 -v 0.103505 1.534730 -0.378049 -v 0.099605 1.515760 -0.515166 -v 0.098392 1.474770 -0.620740 -v 0.251767 1.392396 -0.618851 -v 0.196272 1.456735 -0.592215 -v 0.175834 1.395176 -0.666718 -v 0.098528 1.399139 -0.691758 -v 0.180286 1.497351 -0.508038 -v 0.205987 1.515010 -0.381370 -v 0.418065 1.396418 -0.086963 -v 0.401971 1.392277 0.064915 -v 0.338078 1.463460 0.067784 -v 0.344507 1.467198 -0.084766 -v 0.109455 1.537381 -0.075093 -v 0.108976 1.527873 0.075027 -v 0.225309 1.511005 0.071866 -v 0.230138 1.517579 -0.079762 -v 0.314399 1.385814 0.295828 -v 0.278741 1.440388 0.260842 -v 0.314098 1.453090 0.186838 -v 0.372752 1.383205 0.193041 -v 0.211867 1.461839 0.285578 -v 0.225744 1.402438 0.355029 -v 0.110084 1.478708 0.303265 -v 0.110939 1.417340 0.385419 -v 0.108071 1.511040 0.195934 -v 0.214860 1.493880 0.189970 -v 0.495293 1.130906 -0.311334 -v 0.486364 1.216647 -0.318528 -v 0.468907 1.289028 -0.251379 -v 0.473660 1.269780 -0.286016 -v 0.504737 0.925614 -0.191771 -v 0.507862 0.810263 -0.150418 -v 0.495591 0.714721 -0.119267 -v 0.491635 1.132654 -0.106675 -v 0.432580 1.329079 0.074886 -v 0.465204 1.286335 -0.088443 -v 0.450412 1.329108 -0.088832 -v 0.444194 1.291131 0.083885 -v 0.401969 1.292611 0.206764 -v 0.333440 1.292107 0.313494 -v 0.234143 1.294910 0.394789 -v 0.113326 1.296983 0.434097 -v 0.328881 1.326787 0.307695 -v 0.394160 1.326788 0.203723 -v 0.233009 1.336604 0.387698 -v 0.114571 1.344287 0.424379 -v 0.462744 1.311686 -0.259062 -v 0.109254 1.540182 -0.231520 -v 0.229079 1.519875 -0.231583 -v 0.343282 1.468938 -0.231173 -v 0.417230 1.398320 -0.239037 -v 0.471985 0.567307 -0.075478 -v 0.540053 0.567203 -0.095331 -v 0.136825 1.029733 -0.811013 -v 0.147588 1.027527 -0.794752 -v 0.249720 1.023759 -0.756375 -v 0.498972 1.029689 -0.542891 -v 0.441643 1.029899 -0.640491 -v 0.536198 1.028551 -0.419037 -v 0.547465 1.036499 -0.298053 -v 0.501330 1.041592 -0.279615 -v 0.258015 0.928087 -0.777295 -v 0.153096 1.129226 -0.801359 -v 0.162876 1.115404 -0.786713 -v 0.250912 1.115393 -0.756707 -v 0.455484 0.349625 -0.025968 -v 0.450950 0.357358 -0.135180 -v 0.438576 0.364976 -0.278590 -v 0.416686 0.370766 -0.404924 -v 0.359161 0.375531 -0.513272 -v 0.288606 0.376913 -0.584422 -v 0.201735 0.377912 -0.635053 -v 0.105106 0.378058 -0.667741 -v 0.278818 0.741071 -0.838910 -v 0.418408 0.737259 -0.769866 -v 0.566206 0.782571 -0.334788 -v 0.553921 0.735774 -0.319053 -v 0.527469 0.510938 -0.261160 -v 0.545175 0.507375 -0.277553 -v 0.569095 0.515103 -0.296617 -v 0.593006 0.554095 -0.321349 -v 0.605831 0.626748 -0.341959 -v 0.599099 0.764999 -0.356748 -v 0.585171 0.784938 -0.352159 -v 0.608177 0.717896 -0.357361 -v 0.529242 0.562382 -0.273853 -v 0.344794 1.128248 -0.717305 -v 0.367282 1.027340 -0.714399 -v 0.384778 0.927942 -0.710487 -v 0.402272 0.889632 -0.739208 -v 0.412484 0.828200 -0.759841 -v 0.365095 0.934093 -0.708841 -v 0.347186 1.025898 -0.709747 -v 0.255804 1.130180 -0.766157 -v 0.328548 1.115315 -0.714309 -v 0.401698 0.161159 0.035348 -v 0.377051 0.160724 0.006376 -v 0.368521 0.406688 0.091378 -v 0.343597 0.404088 0.094562 -v 0.413219 0.715576 0.027679 -v 0.436055 0.716322 0.023696 -v 0.382800 0.574088 0.054618 -v 0.404840 0.573925 0.050695 -v 0.331589 0.254574 0.135128 -v 0.303326 0.254948 0.136872 -v 0.320307 0.205128 0.145554 -v 0.292115 0.205551 0.145640 -v 0.432841 0.801786 0.021187 -v 0.455617 0.802996 0.018481 -v 0.337860 0.157653 0.114579 -v 0.311484 0.156788 0.114977 -v 0.295638 0.172621 0.137148 -v 0.324782 0.174236 0.135367 -v 0.415282 0.162208 0.019281 -v 0.349958 0.233448 -0.504833 -v 0.399038 0.215040 -0.405576 -v 0.285763 0.249069 -0.573785 -v 0.101710 0.271338 -0.652303 -v 0.421193 0.195600 -0.276785 -v 0.426462 0.177916 -0.130665 -v 0.198180 0.262088 -0.622766 -v 0.322960 0.231834 -0.482911 -v 0.365646 0.212881 -0.392210 -v 0.264730 0.247261 -0.545574 -v 0.094875 0.269410 -0.617867 -v 0.386129 0.193272 -0.273976 -v 0.391105 0.175399 -0.131456 -v 0.185617 0.260371 -0.590118 -v 0.480064 1.136059 0.081115 -v 0.487545 0.819099 0.080478 -v 0.432745 0.818974 0.083847 -v 0.467901 1.284465 0.089812 -v 0.445221 1.289194 0.217243 -v 0.375291 1.292107 0.352815 -v 0.263750 1.294910 0.452360 -v 0.127368 1.296983 0.489311 -v 0.500087 1.137085 0.083727 -v 0.507598 0.816962 0.082356 -v 0.378612 0.402151 -0.029888 -v 0.352383 0.438381 -0.235280 -v 0.352669 0.408344 -0.049001 -v 0.512539 0.970340 0.083013 -v 0.492501 0.970961 0.080783 -v 0.502190 0.964727 -0.102247 -v 0.363441 0.220628 0.091202 -v 0.555135 0.924435 -0.296496 -v 0.534707 0.472766 -0.108628 -v 0.385031 0.311832 -0.044641 -v 0.389544 0.345010 -0.250336 -v 0.374571 0.365985 -0.367508 -v 0.336980 0.385292 -0.460572 -v 0.282361 0.399908 -0.526535 -v 0.200756 0.413689 -0.577795 -v 0.104426 0.424403 -0.610495 -v 0.000000 0.426302 -0.622922 -v 0.000000 0.518012 -0.581708 -v 0.095767 0.514240 -0.569918 -v 0.181719 0.504288 -0.533168 -v 0.250913 0.491717 -0.481709 -v 0.303037 0.475351 -0.416525 -v 0.335127 0.460809 -0.336618 -v 0.000000 0.443393 -0.583372 -v 0.351251 0.330560 -0.061170 -v 0.353121 0.362843 -0.247197 -v 0.094819 0.437749 -0.574202 -v 0.180289 0.427513 -0.539896 -v 0.250278 0.414870 -0.491564 -v 0.303258 0.400518 -0.429420 -v 0.335573 0.384386 -0.350114 -v 0.308468 0.200412 0.127973 -v 0.366319 0.181806 0.035711 -v 0.368809 0.228761 0.029032 -v 0.314214 0.247332 0.123412 -v 0.307475 0.243242 0.115479 -v 0.360379 0.226428 0.028026 -v 0.303706 0.202899 0.120956 -v 0.356610 0.186085 0.033502 -v -0.466306 0.386360 -0.136250 -v -0.468055 0.381464 -0.035311 -v -0.450950 0.357358 -0.135180 -v -0.455484 0.349625 -0.025968 -v -0.425859 0.398485 -0.412160 -v -0.454450 0.392430 -0.287917 -v -0.416686 0.370766 -0.404924 -v -0.438576 0.364976 -0.278590 -v -0.368089 0.401568 -0.521642 -v -0.359161 0.375531 -0.513272 -v -0.297157 0.403666 -0.596314 -v -0.288606 0.376913 -0.584422 -v -0.105847 0.402057 -0.682957 -v -0.205207 0.403504 -0.649593 -v -0.105106 0.378058 -0.667741 -v -0.201735 0.377912 -0.635053 -v -0.480393 0.409301 -0.301310 -v -0.452650 0.418753 -0.431928 -v -0.390228 0.422728 -0.545312 -v -0.312241 0.424274 -0.619736 -v -0.215618 0.424967 -0.674609 -v -0.111099 0.424687 -0.705398 -v -0.599536 0.452946 -0.199652 -v -0.565749 0.452970 -0.370140 -v -0.639960 0.513162 -0.272312 -v -0.619839 0.518132 -0.424157 -v -0.523320 0.460508 -0.502629 -v -0.571177 0.525431 -0.548174 -v -0.451475 0.468040 -0.610905 -v -0.494740 0.534493 -0.657377 -v -0.362309 0.473311 -0.693480 -v -0.395924 0.543049 -0.744076 -v -0.245744 0.479214 -0.754807 -v -0.123652 0.483032 -0.786924 -v -0.265657 0.549179 -0.808178 -v -0.132838 0.553184 -0.842528 -v -0.661515 0.618840 -0.315200 -v -0.644798 0.622977 -0.442636 -v -0.595960 0.628675 -0.572599 -v -0.513801 0.635011 -0.677834 -v -0.409901 0.641868 -0.763748 -v -0.275951 0.645809 -0.830733 -v -0.136471 0.649791 -0.865248 -v -0.617504 0.863480 -0.269102 -v -0.648789 0.803643 -0.321878 -v -0.582346 0.882561 -0.430587 -v -0.621909 0.816086 -0.447824 -v -0.574742 0.819434 -0.574193 -v -0.544359 0.883943 -0.558911 -v -0.504765 0.823740 -0.679602 -v -0.483138 0.885529 -0.663189 -v -0.134353 0.831969 -0.865275 -v -0.126694 0.894325 -0.844375 -v -0.542490 0.930013 -0.409367 -v -0.506223 0.929637 -0.540696 -v -0.453039 0.926990 -0.643237 -v -0.384778 0.927942 -0.710487 -v -0.402272 0.889632 -0.739208 -v -0.258015 0.928087 -0.777295 -v -0.270124 0.894651 -0.811084 -v -0.118270 0.928204 -0.817928 -v -0.536198 1.028551 -0.419037 -v -0.547465 1.036499 -0.298053 -v -0.555135 0.924435 -0.296496 -v -0.555684 0.924913 -0.215786 -v -0.498972 1.029689 -0.542891 -v -0.441643 1.029899 -0.640491 -v -0.365095 0.934093 -0.708841 -v -0.251092 0.934623 -0.761604 -v -0.347186 1.025898 -0.709747 -v -0.249720 1.023759 -0.756375 -v -0.131933 0.935714 -0.801735 -v -0.147588 1.027527 -0.794752 -v -0.136825 1.029733 -0.811013 -v -0.541290 1.131051 -0.329770 -v -0.527345 1.130042 -0.414468 -v -0.522547 1.221382 -0.333103 -v -0.507335 1.220849 -0.419783 -v -0.483032 1.131700 -0.538807 -v -0.466574 1.222041 -0.533019 -v -0.423966 1.131922 -0.637852 -v -0.401709 1.220497 -0.629408 -v -0.499345 1.281729 -0.300617 -v -0.483534 1.282236 -0.412917 -v -0.440056 1.282233 -0.516511 -v -0.377487 1.282191 -0.611856 -v -0.322480 1.219805 -0.699842 -v -0.305615 1.282151 -0.683800 -v -0.236803 1.222103 -0.751386 -v -0.218417 1.284231 -0.727081 -v -0.135989 1.220931 -0.782210 -v -0.117495 1.283165 -0.757567 -v -0.462744 1.311686 -0.259062 -v -0.443242 1.310225 -0.388568 -v -0.404913 1.310202 -0.498226 -v -0.349724 1.310198 -0.586795 -v -0.282673 1.309843 -0.654823 -v -0.198588 1.310222 -0.700834 -v -0.106783 1.310295 -0.731039 -v -0.504737 0.925614 -0.191771 -v -0.501330 1.041592 -0.279615 -v -0.495293 1.130906 -0.311334 -v -0.486364 1.216647 -0.318528 -v -0.468907 1.289028 -0.251379 -v -0.473660 1.269780 -0.286016 -v -0.445922 0.403746 -0.027623 -v -0.505883 0.408960 -0.050173 -v -0.507862 0.810263 -0.150418 -v -0.579652 0.842662 -0.180699 -v -0.561758 0.716544 -0.140073 -v -0.495591 0.714721 -0.119267 -v -0.580665 0.890722 -0.197061 -v -0.138959 0.743105 -0.870690 -v -0.418408 0.737259 -0.769866 -v -0.278818 0.741071 -0.838910 -v -0.412484 0.828200 -0.759841 -v -0.274073 0.830747 -0.832120 -v -0.596701 0.725339 -0.578856 -v -0.516370 0.731493 -0.688300 -v -0.642316 0.719345 -0.447379 -v -0.661834 0.716038 -0.329195 -v -0.546190 0.422366 -0.110464 -v -0.520064 0.454769 -0.062988 -v -0.548213 0.459164 -0.113006 -v -0.620879 0.540437 -0.260291 -v -0.592898 0.490111 -0.196279 -v -0.638525 0.622410 -0.295973 -v -0.608579 0.835674 -0.253307 -v -0.630203 0.789048 -0.299916 -v -0.639084 0.716171 -0.308229 -v -0.553921 0.735774 -0.319053 -v -0.566206 0.782571 -0.334788 -v -0.534707 0.472766 -0.108628 -v -0.527469 0.510938 -0.261160 -v -0.545175 0.507375 -0.277553 -v -0.569095 0.515103 -0.296617 -v -0.593006 0.554095 -0.321349 -v -0.605831 0.626748 -0.341959 -v -0.585171 0.784938 -0.352159 -v -0.599099 0.764999 -0.356748 -v -0.608177 0.717896 -0.357361 -v -0.540053 0.567203 -0.095331 -v -0.471985 0.567307 -0.075478 -v -0.529242 0.562382 -0.273853 -v -0.385868 1.400122 -0.400909 -v -0.311280 1.398134 -0.549305 -v -0.251767 1.392396 -0.618851 -v -0.175834 1.395176 -0.666718 -v -0.098528 1.399139 -0.691758 -v -0.266173 1.457967 -0.524738 -v -0.310421 1.467857 -0.390880 -v -0.103505 1.534730 -0.378049 -v -0.099605 1.515760 -0.515166 -v -0.098392 1.474770 -0.620740 -v -0.196272 1.456735 -0.592215 -v -0.180286 1.497351 -0.508038 -v -0.205987 1.515010 -0.381370 -v -0.418065 1.396418 -0.086963 -v -0.344507 1.467198 -0.084766 -v -0.401971 1.392277 0.064915 -v -0.338078 1.463460 0.067784 -v -0.109455 1.537381 -0.075093 -v -0.108976 1.527873 0.075027 -v -0.230138 1.517579 -0.079762 -v -0.225309 1.511005 0.071866 -v -0.314399 1.385814 0.295828 -v -0.372752 1.383205 0.193041 -v -0.278741 1.440388 0.260842 -v -0.314098 1.453090 0.186838 -v -0.211867 1.461839 0.285578 -v -0.225744 1.402438 0.355029 -v -0.110939 1.417340 0.385419 -v -0.110084 1.478708 0.303265 -v -0.108071 1.511040 0.195934 -v -0.214860 1.493880 0.189970 -v -0.491635 1.132654 -0.106675 -v -0.465204 1.286335 -0.088443 -v -0.502190 0.964727 -0.102247 -v -0.444194 1.291131 0.083885 -v -0.480064 1.136059 0.081115 -v -0.432580 1.329079 0.074886 -v -0.450412 1.329108 -0.088832 -v -0.333440 1.292107 0.313494 -v -0.401969 1.292611 0.206764 -v -0.328881 1.326787 0.307695 -v -0.394160 1.326788 0.203723 -v -0.234143 1.294910 0.394789 -v -0.233009 1.336604 0.387698 -v -0.114571 1.344287 0.424379 -v -0.113326 1.296983 0.434097 -v -0.109254 1.540182 -0.231520 -v -0.229079 1.519875 -0.231583 -v -0.343282 1.468938 -0.231173 -v -0.417230 1.398320 -0.239037 -v -0.404840 0.573925 0.050695 -v -0.368521 0.406688 0.091378 -v -0.153096 1.129226 -0.801359 -v -0.250912 1.115393 -0.756707 -v -0.162876 1.115404 -0.786713 -v -0.328548 1.115315 -0.714309 -v -0.401698 0.161159 0.035348 -v -0.363441 0.220628 0.091202 -v -0.337860 0.157653 0.114579 -v -0.415282 0.162208 0.019281 -v -0.426462 0.177916 -0.130665 -v -0.421193 0.195600 -0.276785 -v -0.399038 0.215040 -0.405576 -v -0.349958 0.233448 -0.504833 -v -0.285763 0.249069 -0.573785 -v -0.101710 0.271338 -0.652303 -v -0.198180 0.262088 -0.622766 -v -0.436055 0.716322 0.023696 -v -0.344794 1.128248 -0.717305 -v -0.367282 1.027340 -0.714399 -v -0.255804 1.130180 -0.766157 -v -0.331589 0.254574 0.135128 -v -0.492501 0.970961 0.080783 -v -0.455617 0.802996 0.018481 -v -0.487545 0.819099 0.080478 -v -0.320307 0.205128 0.145554 -v -0.311484 0.156788 0.114977 -v -0.377051 0.160724 0.006376 -v -0.382800 0.574088 0.054618 -v -0.343597 0.404088 0.094562 -v -0.303326 0.254948 0.136872 -v -0.413219 0.715576 0.027679 -v -0.292115 0.205551 0.145640 -v -0.432841 0.801786 0.021187 -v -0.432745 0.818974 0.083847 -v -0.324782 0.174236 0.135367 -v -0.295638 0.172621 0.137148 -v -0.322960 0.231834 -0.482911 -v -0.365646 0.212881 -0.392210 -v -0.264730 0.247261 -0.545574 -v -0.094875 0.269410 -0.617867 -v -0.386129 0.193272 -0.273976 -v -0.391105 0.175399 -0.131456 -v -0.185617 0.260371 -0.590118 -v -0.445221 1.289194 0.217243 -v -0.467901 1.284465 0.089812 -v -0.375291 1.292107 0.352815 -v -0.263750 1.294910 0.452360 -v -0.127368 1.296983 0.489311 -v -0.512539 0.970340 0.083013 -v -0.500087 1.137085 0.083727 -v -0.366319 0.181806 0.035711 -v -0.368809 0.228761 0.029032 -v -0.374571 0.365985 -0.367508 -v -0.336980 0.385292 -0.460572 -v -0.282361 0.399908 -0.526535 -v -0.104426 0.424403 -0.610495 -v -0.389544 0.345010 -0.250336 -v -0.385031 0.311832 -0.044641 -v -0.200756 0.413689 -0.577795 -v -0.378612 0.402151 -0.029888 -v -0.352669 0.408344 -0.049001 -v -0.507598 0.816962 0.082356 -v -0.308468 0.200412 0.127973 -v -0.314214 0.247332 0.123412 -v -0.353121 0.362843 -0.247197 -v -0.352383 0.438381 -0.235280 -v -0.335573 0.384386 -0.350114 -v -0.335127 0.460809 -0.336618 -v -0.351251 0.330560 -0.061170 -v -0.094819 0.437749 -0.574202 -v -0.095767 0.514240 -0.569918 -v -0.180289 0.427513 -0.539896 -v -0.181719 0.504288 -0.533168 -v -0.250278 0.414870 -0.491564 -v -0.250913 0.491717 -0.481709 -v -0.303258 0.400518 -0.429420 -v -0.303037 0.475351 -0.416525 -v -0.307475 0.243242 0.115479 -v -0.360379 0.226428 0.028026 -v -0.303706 0.202899 0.120956 -v -0.356610 0.186085 0.033502 -v 0.045195 0.106111 0.726884 -v 0.000000 0.124316 0.731242 -v -0.045195 0.106111 0.726884 -v -0.063915 0.062158 0.716360 -v -0.045195 0.018206 0.705836 -v 0.000000 0.000000 0.701477 -v 0.045195 0.018206 0.705836 -v 0.063915 0.062158 0.716360 -v 0.039704 0.095512 0.747571 -v 0.000000 0.111505 0.751401 -v -0.039704 0.095512 0.747571 -v -0.056150 0.056899 0.738326 -v -0.039704 0.018286 0.729080 -v 0.000000 0.002292 0.725251 -v 0.039704 0.018286 0.729080 -v 0.056150 0.056899 0.738326 -v 0.024381 0.119402 0.730066 -v -0.024381 0.119402 0.730066 -v -0.058861 0.085869 0.722037 -v -0.058861 0.038447 0.710683 -v -0.024381 0.004915 0.702654 -v 0.024381 0.004915 0.702654 -v 0.058861 0.038447 0.710683 -v 0.058861 0.085869 0.722037 -v 0.021419 0.107188 0.750366 -v -0.021419 0.107188 0.750366 -v -0.051710 0.077729 0.743313 -v -0.051710 0.036068 0.733338 -v -0.021419 0.006610 0.726285 -v 0.021419 0.006610 0.726285 -v 0.051710 0.036068 0.733338 -v 0.051710 0.077729 0.743313 -v 0.000000 0.058196 0.733203 -v -0.037584 0.095022 0.740514 -v 0.000000 0.110160 0.744144 -v 0.037584 0.095022 0.740514 -v 0.053152 0.058473 0.731753 -v 0.037584 0.021924 0.722991 -v 0.000000 0.006786 0.719362 -v -0.037584 0.021924 0.722991 -v -0.053152 0.058473 0.731753 -v -0.058981 0.107430 0.632200 -v -0.064044 0.083671 0.626511 -v -0.058981 0.059912 0.620822 -v -0.045286 0.039630 0.615966 -v -0.024431 0.026312 0.612777 -v 0.000000 0.021387 0.611598 -v 0.024431 0.026312 0.612777 -v 0.045286 0.039630 0.615966 -v 0.058981 0.059912 0.620822 -v 0.064044 0.083671 0.626511 -v 0.058981 0.107430 0.632200 -v 0.045286 0.127712 0.637056 -v 0.024431 0.141031 0.640245 -v 0.000000 0.145955 0.641424 -v -0.024431 0.141031 0.640245 -v -0.045286 0.127712 0.637056 -v -0.015701 0.191440 0.662358 -v -0.029510 0.208600 0.659555 -v -0.047927 0.206062 0.647498 -v -0.052534 0.186364 0.638244 -v -0.038724 0.169204 0.641047 -v -0.020307 0.171742 0.653104 -v -0.027832 0.180575 0.695644 -v -0.041393 0.197977 0.692247 -v -0.059481 0.195683 0.679370 -v -0.064010 0.175987 0.669892 -v -0.050449 0.158585 0.673290 -v -0.032361 0.160879 0.686166 -v -0.016500 0.186147 0.678574 -v -0.021067 0.166450 0.669208 -v -0.039320 0.164034 0.656742 -v -0.053005 0.181315 0.653641 -v -0.048437 0.201012 0.663007 -v -0.030185 0.203428 0.675474 -v 0.062761 0.192783 0.661866 -v 0.048977 0.209954 0.658914 -v 0.030654 0.207413 0.646686 -v 0.026115 0.187701 0.637409 -v 0.039898 0.170530 0.640361 -v 0.058221 0.173071 0.652589 -v 0.050406 0.181970 0.694964 -v 0.036870 0.199368 0.691450 -v 0.018871 0.197059 0.678451 -v 0.014409 0.177351 0.668966 -v 0.027946 0.159954 0.672480 -v 0.045944 0.162263 0.685479 -v 0.061352 0.187275 0.678726 -v 0.056851 0.167565 0.669345 -v 0.038690 0.165140 0.656731 -v 0.025031 0.182424 0.653499 -v 0.029532 0.202134 0.662880 -v 0.047692 0.204559 0.675494 -v -0.072228 0.298449 0.698603 -v -0.072228 0.312687 0.653319 -v 0.080729 0.291987 0.704095 -v 0.080684 0.308771 0.651751 -v 0.061209 0.308457 0.651655 -v 0.061241 0.294422 0.697845 -v 0.060283 0.298627 0.698038 -v 0.060280 0.312685 0.653315 -v 0.080683 0.221337 0.651028 -v 0.080707 0.215851 0.672265 -v -0.072325 0.216169 0.672110 -v -0.072266 0.223066 0.647211 -v -0.063682 0.215894 0.672214 -v -0.063688 0.294407 0.697837 -v -0.063340 0.213876 0.679535 -v 0.080728 0.213876 0.679535 -v -0.063339 0.291987 0.704095 -v -0.072457 0.114034 0.635819 -v -0.072393 0.151119 0.651150 -v 0.080686 0.151134 0.651099 -v 0.080661 0.114068 0.635710 -v -0.072319 0.132879 0.676343 -v 0.080696 0.132879 0.676343 -v -0.072335 0.116302 0.671131 -v 0.080689 0.116302 0.671131 -v 0.022267 0.289779 0.700695 -v 0.020190 0.288298 0.705372 -v 0.009350 0.287210 0.708857 -v -0.001534 0.288308 0.705386 -v -0.003563 0.289779 0.700695 -v 0.022286 0.217834 0.678053 -v 0.020253 0.216353 0.682731 -v 0.009369 0.215265 0.686215 -v -0.001471 0.216363 0.682746 -v -0.003543 0.217834 0.678053 -v 0.009362 0.289776 0.700572 -v 0.009362 0.217862 0.677966 -v 0.078299 0.289779 0.700653 -v 0.075566 0.288303 0.705323 -v 0.059365 0.285897 0.713014 -v 0.042025 0.285897 0.713014 -v 0.025794 0.288314 0.705339 -v 0.023084 0.289779 0.700653 -v 0.078319 0.217827 0.678010 -v 0.075608 0.216351 0.682679 -v 0.059385 0.213945 0.690371 -v 0.042044 0.213945 0.690371 -v 0.025836 0.216363 0.682696 -v 0.023104 0.217827 0.678010 -v 0.050702 0.289857 0.700313 -v 0.050702 0.217906 0.677826 -v -0.004096 0.289777 0.700653 -v -0.007634 0.288299 0.705320 -v -0.023576 0.285895 0.713014 -v -0.040917 0.285895 0.713014 -v -0.056893 0.288314 0.705340 -v -0.060404 0.289777 0.700653 -v -0.004077 0.217820 0.678008 -v -0.007587 0.216343 0.682675 -v -0.023557 0.213938 0.690368 -v -0.040897 0.213938 0.690368 -v -0.056846 0.216357 0.682695 -v -0.060384 0.217820 0.678008 -v -0.032240 0.289838 0.700374 -v -0.032240 0.217884 0.677894 -v 0.080670 0.156545 0.641776 -v -0.072379 0.158415 0.640456 -v -0.003610 0.193106 0.675959 -v -0.008306 0.190821 0.683225 -v -0.044264 0.190821 0.683225 -v -0.048118 0.191864 0.679908 -v -0.003610 0.188319 0.674454 -v -0.008306 0.186035 0.681720 -v -0.044264 0.186035 0.681720 -v -0.048118 0.187078 0.678403 -v -0.048118 0.196367 0.665589 -v -0.003610 0.196367 0.665589 -v -0.048118 0.191580 0.664084 -v -0.003610 0.191580 0.664084 -v 0.070219 0.192991 0.676324 -v 0.065411 0.190820 0.683228 -v 0.029630 0.190820 0.683228 -v 0.025776 0.191864 0.679908 -v 0.070219 0.188205 0.674820 -v 0.065411 0.186034 0.681723 -v 0.029630 0.186034 0.681723 -v 0.025776 0.187078 0.678403 -v 0.025776 0.196367 0.665589 -v 0.070219 0.196367 0.665589 -v 0.025776 0.191580 0.664084 -v 0.070219 0.191580 0.664084 -v 0.073479 0.200727 0.682695 -v 0.068774 0.198767 0.688927 -v 0.030021 0.198767 0.688927 -v 0.026085 0.200727 0.682695 -v 0.073479 0.195940 0.681190 -v 0.068774 0.193981 0.687422 -v 0.030021 0.193981 0.687422 -v 0.026085 0.195940 0.681190 -v 0.026085 0.205229 0.668375 -v 0.073479 0.205229 0.668375 -v 0.026085 0.200443 0.666870 -v 0.073479 0.200443 0.666870 -v 0.070043 0.209345 0.685404 -v 0.065521 0.207384 0.691637 -v 0.030018 0.207384 0.691637 -v 0.026163 0.209345 0.685404 -v 0.070043 0.204558 0.683899 -v 0.065521 0.202598 0.690132 -v 0.030018 0.202598 0.690132 -v 0.026163 0.204558 0.683899 -v 0.026163 0.213847 0.671085 -v 0.070043 0.213847 0.671085 -v 0.026163 0.209061 0.669580 -v 0.070043 0.209061 0.669580 -v 0.013475 0.209399 0.685231 -v 0.008838 0.207365 0.691699 -v -0.044948 0.207365 0.691699 -v -0.068126 0.208904 0.686807 -v 0.013475 0.204613 0.683726 -v 0.008838 0.202579 0.690194 -v -0.044948 0.202579 0.690194 -v -0.068126 0.204117 0.685302 -v -0.069379 0.213847 0.671085 -v 0.013475 0.213847 0.671085 -v -0.069379 0.209061 0.669580 -v 0.013475 0.209061 0.669580 -v 0.003782 0.200633 0.682665 -v -0.000640 0.198669 0.688913 -v -0.044217 0.198669 0.688913 -v -0.047822 0.200633 0.682665 -v 0.003782 0.195847 0.681160 -v -0.000640 0.193882 0.687408 -v -0.044217 0.193882 0.687408 -v -0.047822 0.195847 0.681160 -v -0.047822 0.205136 0.668346 -v 0.003782 0.205136 0.668346 -v -0.047822 0.200349 0.666841 -v 0.003782 0.200349 0.666841 -v -0.071989 0.226043 0.675139 -v 0.080363 0.226036 0.675164 -v -0.050269 0.217877 0.701110 -v -0.053928 0.219802 0.694990 -v 0.080363 0.220942 0.691363 -v 0.006891 0.221067 0.690966 -v 0.012066 0.221067 0.690966 -v 0.071721 0.217877 0.701110 -v -0.006867 0.217877 0.701110 -v 0.025176 0.217877 0.701110 -v -0.071989 0.221257 0.673634 -v 0.080363 0.221249 0.673659 -v -0.050269 0.213091 0.699605 -v -0.053928 0.215015 0.693485 -v 0.080363 0.216155 0.689858 -v 0.006891 0.216281 0.689461 -v 0.012066 0.216281 0.689461 -v 0.071721 0.213091 0.699605 -v -0.006867 0.213091 0.699605 -v 0.025176 0.213091 0.699605 -v -0.064956 0.215367 0.692366 -v -0.064956 0.220153 0.693871 -v 0.009469 0.226039 0.675153 -v 0.009469 0.221253 0.673648 -v -0.071989 0.236253 0.678350 -v 0.080363 0.236245 0.678374 -v -0.050269 0.228086 0.704320 -v -0.053928 0.230011 0.698200 -v 0.080363 0.231151 0.694573 -v 0.006891 0.231276 0.694176 -v 0.012066 0.231276 0.694176 -v 0.071721 0.228086 0.704320 -v -0.006867 0.228086 0.704320 -v 0.025176 0.228086 0.704320 -v -0.071989 0.231466 0.676845 -v 0.080363 0.231459 0.676869 -v -0.050269 0.223300 0.702815 -v -0.053928 0.225225 0.696695 -v 0.080363 0.226365 0.693068 -v 0.006891 0.226490 0.692671 -v 0.012066 0.226490 0.692671 -v 0.071721 0.223300 0.702815 -v -0.006867 0.223300 0.702815 -v 0.025176 0.223300 0.702815 -v -0.064956 0.225576 0.695576 -v -0.064956 0.230363 0.697081 -v 0.009469 0.236248 0.678363 -v 0.009469 0.231462 0.676858 -v -0.046746 0.238940 0.707881 -v -0.049545 0.240909 0.701620 -v 0.070235 0.240909 0.701620 -v 0.065421 0.238940 0.707881 -v -0.008537 0.238940 0.707881 -v -0.004021 0.240909 0.701620 -v 0.026278 0.238940 0.707881 -v 0.022269 0.240909 0.701620 -v -0.046746 0.234154 0.706376 -v -0.049545 0.236122 0.700115 -v 0.070235 0.236122 0.700115 -v 0.065421 0.234154 0.706376 -v -0.008537 0.234154 0.706376 -v -0.004021 0.236122 0.700115 -v 0.026278 0.234154 0.706376 -v 0.022269 0.236122 0.700115 -v -0.049545 0.248509 0.677449 -v -0.049545 0.243723 0.675944 -v -0.004021 0.248509 0.677449 -v -0.004021 0.243723 0.675944 -v 0.022269 0.248509 0.677449 -v 0.070235 0.248509 0.677449 -v 0.022269 0.243723 0.675944 -v 0.070235 0.243723 0.675944 -v -0.071989 0.257502 0.685031 -v 0.080363 0.257495 0.685055 -v -0.050269 0.249336 0.711002 -v -0.053928 0.251261 0.704882 -v 0.080363 0.252401 0.701255 -v 0.006891 0.252526 0.700857 -v 0.012066 0.252526 0.700857 -v 0.071721 0.249336 0.711002 -v -0.006867 0.249336 0.711002 -v 0.025176 0.249336 0.711002 -v -0.071989 0.252716 0.683526 -v 0.080363 0.252708 0.683550 -v -0.050269 0.244550 0.709497 -v -0.053928 0.246474 0.703376 -v 0.080363 0.247615 0.699750 -v 0.006891 0.247740 0.699353 -v 0.012066 0.247740 0.699353 -v 0.071721 0.244550 0.709497 -v -0.006867 0.244550 0.709497 -v 0.025176 0.244550 0.709497 -v -0.064956 0.246826 0.702258 -v -0.064956 0.251613 0.703763 -v 0.009469 0.257498 0.685045 -v 0.009469 0.252712 0.683540 -v -0.046746 0.260085 0.714530 -v -0.049545 0.262054 0.708269 -v 0.070235 0.262054 0.708269 -v 0.065421 0.260085 0.714530 -v -0.008537 0.260085 0.714530 -v -0.004021 0.262054 0.708269 -v 0.026278 0.260085 0.714530 -v 0.022269 0.262054 0.708269 -v -0.046746 0.255299 0.713025 -v -0.049545 0.257267 0.706764 -v 0.070235 0.257267 0.706764 -v 0.065421 0.255299 0.713025 -v -0.008537 0.255299 0.713025 -v -0.004021 0.257267 0.706764 -v 0.026278 0.255299 0.713025 -v 0.022269 0.257267 0.706764 -v -0.049545 0.269654 0.684097 -v -0.049545 0.264868 0.682592 -v -0.004021 0.269654 0.684097 -v -0.004021 0.264868 0.682593 -v 0.022269 0.269654 0.684097 -v 0.070235 0.269654 0.684097 -v 0.022269 0.264868 0.682593 -v 0.070235 0.264868 0.682593 -v -0.071989 0.278810 0.691731 -v 0.080363 0.278803 0.691755 -v -0.050269 0.270644 0.717702 -v -0.053928 0.272569 0.711581 -v 0.080363 0.273709 0.707955 -v 0.006891 0.273834 0.707557 -v 0.012066 0.273834 0.707557 -v 0.071721 0.270644 0.717702 -v -0.006867 0.270644 0.717702 -v 0.025176 0.270644 0.717702 -v -0.071989 0.274024 0.690226 -v 0.080363 0.274017 0.690250 -v -0.050269 0.265858 0.716197 -v -0.053928 0.267782 0.710076 -v 0.080363 0.268923 0.706450 -v 0.006891 0.269048 0.706052 -v 0.012066 0.269048 0.706052 -v 0.071721 0.265858 0.716197 -v -0.006867 0.265858 0.716197 -v 0.025176 0.265858 0.716197 -v -0.064956 0.268134 0.708958 -v -0.064956 0.272921 0.710463 -v 0.009469 0.278806 0.691744 -v 0.009469 0.274020 0.690240 -v -0.062901 0.287276 0.701624 -v 0.080363 0.287266 0.701656 -v -0.044962 0.281179 0.721014 -v -0.056345 0.283658 0.713129 -v 0.080363 0.284244 0.711267 -v 0.006891 0.284369 0.710870 -v 0.012066 0.284369 0.710870 -v 0.071721 0.281179 0.721014 -v -0.006867 0.281179 0.721014 -v 0.025176 0.281179 0.721014 -v -0.062901 0.282490 0.700119 -v 0.080363 0.282479 0.700151 -v -0.044962 0.276393 0.719509 -v -0.056345 0.278872 0.711624 -v 0.080363 0.279457 0.709762 -v 0.006891 0.279582 0.709365 -v 0.012066 0.279582 0.709365 -v 0.071721 0.276393 0.719509 -v -0.006867 0.276393 0.719509 -v 0.025176 0.276393 0.719509 -v 0.009469 0.287271 0.701640 -v 0.009469 0.282485 0.700135 -v -0.009010 0.218793 0.692928 -v -0.012796 0.218793 0.692928 -v -0.012796 0.216921 0.698879 -v -0.009010 0.216921 0.698879 -v -0.009010 0.280736 0.712405 -v -0.012796 0.280736 0.712405 -v -0.012796 0.278865 0.718356 -v -0.009010 0.278865 0.718356 -v -0.041859 0.218793 0.692928 -v -0.045645 0.218793 0.692928 -v -0.045645 0.216921 0.698879 -v -0.041859 0.216921 0.698879 -v -0.041729 0.280736 0.712405 -v -0.045515 0.280736 0.712405 -v -0.045515 0.278865 0.718356 -v -0.041729 0.278865 0.718356 -v 0.030300 0.218793 0.692928 -v 0.026514 0.218793 0.692928 -v 0.026514 0.216921 0.698879 -v 0.030300 0.216921 0.698879 -v 0.030300 0.280736 0.712405 -v 0.026514 0.280736 0.712405 -v 0.026514 0.278865 0.718356 -v 0.030300 0.278865 0.718356 -v -0.071896 0.169696 0.656630 -v 0.080374 0.169696 0.656630 -v -0.041175 0.161282 0.683388 -v -0.044093 0.163812 0.675340 -v -0.065337 0.164090 0.674456 -v 0.080374 0.164335 0.673676 -v -0.071896 0.167221 0.664498 -v 0.006576 0.165674 0.669420 -v 0.016885 0.164042 0.674608 -v 0.012158 0.165674 0.669420 -v 0.074157 0.161282 0.683388 -v -0.001016 0.161282 0.683388 -v 0.040546 0.161282 0.683388 -v 0.036692 0.164042 0.674608 -v -0.071896 0.166290 0.655559 -v 0.080374 0.166290 0.655559 -v -0.041175 0.157876 0.682317 -v -0.044093 0.160406 0.674269 -v -0.065337 0.160684 0.673385 -v 0.080374 0.160930 0.672605 -v -0.071896 0.163816 0.663427 -v 0.006576 0.162268 0.668349 -v 0.016885 0.160637 0.673537 -v 0.012158 0.162268 0.668349 -v 0.074157 0.157876 0.682317 -v -0.001016 0.157876 0.682317 -v 0.040546 0.157876 0.682317 -v 0.036692 0.160637 0.673537 -v -0.018960 0.166290 0.655559 -v -0.018960 0.157876 0.682317 -v -0.020689 0.161282 0.683388 -v -0.020689 0.169696 0.656630 -v -0.022418 0.166290 0.655559 -v -0.022418 0.157876 0.682317 -v -0.022418 0.150312 0.650535 -v -0.018960 0.150312 0.650535 -v -0.022418 0.144723 0.678182 -v -0.018960 0.144723 0.678182 -v -0.022418 0.136348 0.668404 -v -0.018960 0.136348 0.668404 -v -0.001932 0.141164 0.669311 -v 0.001157 0.141164 0.669311 -v -0.001932 0.154131 0.651407 -v 0.001157 0.154131 0.651407 -v -0.002329 0.151537 0.649529 -v 0.001554 0.151537 0.649529 -v -0.002329 0.138571 0.667433 -v 0.001554 0.138571 0.667433 -v 0.025744 0.138814 0.672600 -v 0.030625 0.138814 0.672600 -v 0.025744 0.154152 0.651422 -v 0.030625 0.154152 0.651422 -v 0.024876 0.151537 0.649529 -v 0.031493 0.151537 0.649529 -v 0.024876 0.136200 0.670706 -v 0.031493 0.136200 0.670706 -v 0.009588 0.169696 0.656630 -v 0.009588 0.166290 0.655559 -v 0.047294 0.186886 0.698846 -v 0.041074 0.195470 0.697412 -v 0.030340 0.201216 0.691923 -v 0.021653 0.200439 0.685840 -v 0.012342 0.195382 0.677847 -v 0.008582 0.184456 0.671713 -v 0.012375 0.171698 0.670120 -v 0.031651 0.156278 0.678265 -v 0.040438 0.156864 0.684355 -v 0.049307 0.162929 0.692371 -v 0.051639 0.174611 0.697782 -v 0.035176 0.210072 0.695854 -v 0.043394 0.205703 0.700015 -v 0.027425 0.151596 0.672042 -v 0.020347 0.155651 0.668430 -v 0.019039 0.162676 0.671688 -v 0.049940 0.188159 0.694957 -v 0.043719 0.196743 0.693523 -v 0.032986 0.202488 0.688034 -v 0.024299 0.201712 0.681951 -v 0.014988 0.196655 0.673959 -v 0.011227 0.185729 0.667824 -v 0.015021 0.172971 0.666231 -v 0.034297 0.157551 0.674376 -v 0.043083 0.158137 0.680467 -v 0.051953 0.164202 0.688482 -v 0.054285 0.175883 0.693893 -v 0.037822 0.211345 0.691965 -v 0.046040 0.206976 0.696126 -v 0.030071 0.152869 0.668153 -v 0.022993 0.156924 0.664540 -v 0.021685 0.163949 0.667799 -v -0.030589 0.185510 0.698391 -v -0.036953 0.193985 0.697059 -v -0.047578 0.199819 0.691761 -v -0.056218 0.199532 0.685749 -v -0.065593 0.194724 0.677677 -v -0.069523 0.183933 0.671410 -v -0.066057 0.171077 0.669849 -v -0.047354 0.155111 0.677853 -v -0.038339 0.155613 0.684136 -v -0.029378 0.161384 0.692033 -v -0.026584 0.173134 0.697278 -v -0.042245 0.208357 0.695999 -v -0.034512 0.204028 0.699950 -v -0.051642 0.150181 0.672108 -v -0.058865 0.154641 0.668233 -v -0.059836 0.161761 0.671685 -v -0.027918 0.186726 0.694501 -v -0.034282 0.195201 0.693168 -v -0.044908 0.201035 0.687870 -v -0.053548 0.200748 0.681858 -v -0.062923 0.195940 0.673788 -v -0.066853 0.185148 0.667520 -v -0.063387 0.172293 0.665958 -v -0.044683 0.156327 0.673962 -v -0.035669 0.156828 0.680246 -v -0.026707 0.162600 0.688143 -v -0.023913 0.174350 0.693387 -v -0.039575 0.209573 0.692108 -v -0.031842 0.205244 0.696060 -v -0.048971 0.151397 0.668218 -v -0.056194 0.155857 0.664342 -v -0.057166 0.162976 0.667795 -v 0.000000 0.103257 0.749016 -v -0.018148 0.099602 0.748141 -v -0.033639 0.089706 0.745772 -v -0.043814 0.074641 0.742165 -v -0.047572 0.056992 0.737939 -v -0.043814 0.039343 0.733713 -v -0.033639 0.024278 0.730107 -v -0.018148 0.014383 0.727737 -v 0.000000 0.010728 0.726862 -v 0.018148 0.014383 0.727737 -v 0.033639 0.024278 0.730107 -v 0.043814 0.039343 0.733713 -v 0.047572 0.056992 0.737939 -v 0.043814 0.074641 0.742165 -v 0.033639 0.089706 0.745772 -v 0.018148 0.099602 0.748141 -v 0.000000 0.104790 0.743713 -v -0.018246 0.101117 0.742833 -v -0.033820 0.091167 0.740451 -v -0.044051 0.076021 0.736825 -v -0.047828 0.058277 0.732576 -v -0.044051 0.040532 0.728327 -v -0.033820 0.025386 0.724702 -v -0.018246 0.015437 0.722319 -v 0.000000 0.011763 0.721439 -v 0.018246 0.015437 0.722319 -v 0.033820 0.025386 0.724702 -v 0.044051 0.040532 0.728327 -v 0.047828 0.058277 0.732576 -v 0.044051 0.076021 0.736825 -v 0.033820 0.091167 0.740451 -v 0.018246 0.101117 0.742833 -# 1902 vertices - -vn 0.874367 0.142896 0.463750 -vn 0.839359 0.129826 0.527846 -vn 0.769638 0.335020 0.543525 -vn 0.769638 0.335020 0.543525 -vn 0.839359 0.129826 0.527846 -vn 0.750340 0.293327 0.592410 -vn 0.116849 0.176924 0.977264 -vn 0.301224 0.372748 0.877680 -vn 0.000000 0.212854 0.977084 -vn 0.000000 0.212854 0.977084 -vn 0.301224 0.372748 0.877680 -vn -0.000000 0.428954 0.903327 -vn 0.000000 0.212854 0.977084 -vn 0.000001 0.613691 0.789546 -vn 0.116849 0.176924 0.977264 -vn 0.116849 0.176924 0.977264 -vn 0.000001 0.613691 0.789546 -vn 0.275018 0.577380 0.768764 -vn 0.872814 -0.299764 0.385146 -vn 0.876645 -0.220403 0.427686 -vn 0.897861 -0.284137 0.336321 -vn 0.897861 -0.284137 0.336321 -vn 0.876645 -0.220403 0.427686 -vn 0.879104 -0.123736 0.460289 -vn 0.839359 0.129826 0.527846 -vn 0.878718 0.118805 0.462320 -vn 0.725880 0.010497 0.687741 -vn 0.736370 -0.009801 0.676508 -vn 0.667492 -0.004836 0.744601 -vn 0.650783 0.155178 0.743237 -vn 0.650783 0.155178 0.743237 -vn 0.667492 -0.004836 0.744601 -vn 0.558848 0.112880 0.821552 -vn 0.865779 -0.017836 0.500109 -vn 0.878718 0.118805 0.462320 -vn 0.874367 0.142896 0.463750 -vn 0.874367 0.142896 0.463750 -vn 0.878718 0.118805 0.462320 -vn 0.839359 0.129826 0.527846 -vn 0.872814 -0.299764 0.385146 -vn 0.667492 -0.004836 0.744601 -vn 0.868708 -0.239350 0.433656 -vn 0.868708 -0.239350 0.433656 -vn 0.667492 -0.004836 0.744601 -vn 0.736370 -0.009801 0.676508 -vn 0.872814 -0.299764 0.385146 -vn 0.868708 -0.239350 0.433656 -vn 0.876645 -0.220403 0.427686 -vn 0.876645 -0.220403 0.427686 -vn 0.868708 -0.239350 0.433656 -vn 0.899836 -0.220831 0.376203 -vn 0.563981 -0.086031 0.821294 -vn 0.506636 -0.080127 0.858428 -vn 0.423336 0.053240 0.904407 -vn 0.423336 0.053240 0.904407 -vn 0.506636 -0.080127 0.858428 -vn 0.328463 0.080054 0.941118 -vn 0.506636 -0.080127 0.858428 -vn 0.345092 -0.069681 0.935979 -vn 0.328463 0.080054 0.941118 -vn 0.328463 0.080054 0.941118 -vn 0.345092 -0.069681 0.935979 -vn 0.069472 0.062895 0.995599 -vn -0.102947 -0.125139 0.986784 -vn 0.094891 -0.123581 0.987787 -vn -0.231638 -0.421064 0.876954 -vn -0.231638 -0.421064 0.876954 -vn 0.094891 -0.123581 0.987787 -vn 0.160787 -0.314713 0.935469 -vn 0.267558 -0.406754 0.873478 -vn -0.072677 -0.707963 0.702500 -vn 0.160787 -0.314713 0.935469 -vn 0.160787 -0.314713 0.935469 -vn -0.072677 -0.707963 0.702500 -vn -0.231638 -0.421064 0.876954 -vn 0.298116 -0.370998 0.879481 -vn 0.138482 -0.732184 0.666881 -vn 0.328776 -0.398405 0.856259 -vn 0.328776 -0.398405 0.856259 -vn 0.138482 -0.732184 0.666881 -vn 0.086428 -0.753305 0.651967 -vn 0.175494 -0.359003 0.916689 -vn 0.078068 -0.775295 0.626756 -vn 0.298116 -0.370998 0.879481 -vn 0.298116 -0.370998 0.879481 -vn 0.078068 -0.775295 0.626756 -vn 0.138482 -0.732184 0.666881 -vn 0.000000 -0.331736 0.943372 -vn -0.000000 -0.773117 0.634263 -vn 0.175494 -0.359003 0.916689 -vn 0.175494 -0.359003 0.916689 -vn -0.000000 -0.773117 0.634263 -vn 0.078068 -0.775295 0.626756 -vn 0.345092 -0.069681 0.935979 -vn 0.094891 -0.123581 0.987787 -vn 0.069472 0.062895 0.995599 -vn 0.069472 0.062895 0.995599 -vn 0.094891 -0.123581 0.987787 -vn -0.102947 -0.125139 0.986784 -vn 0.563981 -0.086031 0.821294 -vn 0.756897 -0.413234 0.506304 -vn 0.506636 -0.080127 0.858428 -vn 0.506636 -0.080127 0.858428 -vn 0.756897 -0.413234 0.506304 -vn 0.755253 -0.322586 0.570553 -vn 0.506636 -0.080127 0.858428 -vn 0.755253 -0.322586 0.570553 -vn 0.345092 -0.069681 0.935979 -vn 0.345092 -0.069681 0.935979 -vn 0.755253 -0.322586 0.570553 -vn 0.712959 -0.201500 0.671630 -vn 0.094891 -0.123581 0.987787 -vn 0.345092 -0.069681 0.935979 -vn 0.646546 -0.091362 0.757385 -vn 0.646546 -0.091362 0.757385 -vn 0.345092 -0.069681 0.935979 -vn 0.712959 -0.201500 0.671630 -vn 0.599920 -0.116148 0.791584 -vn 0.563981 -0.086031 0.821294 -vn 0.490474 -0.015548 0.871317 -vn 0.490474 -0.015548 0.871317 -vn 0.563981 -0.086031 0.821294 -vn 0.423336 0.053240 0.904407 -vn 0.298116 -0.370998 0.879481 -vn 0.328776 -0.398405 0.856259 -vn 0.390125 0.174215 0.904130 -vn 0.390125 0.174215 0.904130 -vn 0.328776 -0.398405 0.856259 -vn 0.491149 0.152390 0.857642 -vn 0.298116 -0.370998 0.879481 -vn 0.390125 0.174215 0.904130 -vn 0.175494 -0.359003 0.916689 -vn 0.175494 -0.359003 0.916689 -vn 0.390125 0.174215 0.904130 -vn 0.230528 0.218428 0.948233 -vn 0.000000 -0.331736 0.943372 -vn 0.175494 -0.359003 0.916689 -vn -0.000000 0.233936 0.972252 -vn -0.000000 0.233936 0.972252 -vn 0.175494 -0.359003 0.916689 -vn 0.230528 0.218428 0.948233 -vn 0.160787 -0.314713 0.935469 -vn 0.094891 -0.123581 0.987787 -vn 0.595966 0.010468 0.802942 -vn 0.595966 0.010468 0.802942 -vn 0.094891 -0.123581 0.987787 -vn 0.646546 -0.091362 0.757385 -vn 0.540100 0.136136 0.830518 -vn 0.267558 -0.406754 0.873478 -vn 0.595966 0.010468 0.802942 -vn 0.595966 0.010468 0.802942 -vn 0.267558 -0.406754 0.873478 -vn 0.160787 -0.314713 0.935469 -vn 0.513045 0.085684 0.854075 -vn 0.491149 0.152390 0.857642 -vn 0.547185 0.096805 0.831395 -vn 0.547185 0.096805 0.831395 -vn 0.491149 0.152390 0.857642 -vn 0.540100 0.136136 0.830518 -vn 0.513045 0.085684 0.854075 -vn 0.385025 0.087869 0.918714 -vn 0.491149 0.152390 0.857642 -vn 0.491149 0.152390 0.857642 -vn 0.385025 0.087869 0.918714 -vn 0.390125 0.174215 0.904130 -vn 0.385025 0.087869 0.918714 -vn 0.208441 0.117321 0.970973 -vn 0.390125 0.174215 0.904130 -vn 0.390125 0.174215 0.904130 -vn 0.208441 0.117321 0.970973 -vn 0.230528 0.218428 0.948233 -vn 0.208441 0.117321 0.970973 -vn -0.000000 0.141983 0.989869 -vn 0.230528 0.218428 0.948233 -vn 0.230528 0.218428 0.948233 -vn -0.000000 0.141983 0.989869 -vn -0.000000 0.233936 0.972252 -vn 0.129730 -0.990616 -0.043006 -vn 0.072237 -0.977132 -0.199989 -vn 0.102817 -0.994359 -0.026060 -vn 0.102817 -0.994359 -0.026060 -vn 0.072237 -0.977132 -0.199989 -vn 0.116236 -0.981237 -0.153826 -vn 0.238279 -0.957056 -0.165130 -vn 0.244426 -0.956220 -0.160935 -vn 0.252548 -0.961968 -0.104105 -vn 0.252548 -0.961968 -0.104105 -vn 0.244426 -0.956220 -0.160935 -vn 0.257569 -0.961355 -0.097239 -vn 0.252548 -0.961968 -0.104105 -vn 0.257569 -0.961355 -0.097239 -vn 0.264099 -0.963244 -0.049115 -vn 0.264099 -0.963244 -0.049115 -vn 0.257569 -0.961355 -0.097239 -vn 0.275481 -0.960323 -0.043470 -vn 0.238279 -0.957056 -0.165130 -vn 0.286498 -0.934423 -0.211594 -vn 0.244426 -0.956220 -0.160935 -vn 0.244426 -0.956220 -0.160935 -vn 0.286498 -0.934423 -0.211594 -vn 0.219139 -0.948685 -0.227980 -vn 0.793372 0.044920 0.607078 -vn 0.736370 -0.009801 0.676508 -vn 0.815337 0.129486 0.564322 -vn 0.815337 0.129486 0.564322 -vn 0.736370 -0.009801 0.676508 -vn 0.650783 0.155178 0.743237 -vn 0.856568 -0.147677 0.494451 -vn 0.868708 -0.239350 0.433656 -vn 0.793372 0.044920 0.607078 -vn 0.793372 0.044920 0.607078 -vn 0.868708 -0.239350 0.433656 -vn 0.736370 -0.009801 0.676508 -vn 0.000000 0.852896 0.522081 -vn -0.000000 0.428954 0.903327 -vn 0.440421 0.756675 0.483190 -vn 0.440421 0.756675 0.483190 -vn -0.000000 0.428954 0.903327 -vn 0.301224 0.372748 0.877680 -vn 0.693408 0.534699 0.482993 -vn 0.436523 0.194338 0.878454 -vn 0.746743 0.367139 0.554603 -vn 0.746743 0.367139 0.554603 -vn 0.436523 0.194338 0.878454 -vn 0.577927 0.320953 0.750326 -vn 0.839359 0.129826 0.527846 -vn 0.804035 0.222201 0.551501 -vn 0.750340 0.293327 0.592410 -vn 0.750340 0.293327 0.592410 -vn 0.804035 0.222201 0.551501 -vn 0.795050 0.365669 0.483923 -vn 0.804035 0.222201 0.551501 -vn 0.725880 0.010497 0.687741 -vn 0.637792 0.094825 0.764349 -vn 0.725880 0.010497 0.687741 -vn 0.804035 0.222201 0.551501 -vn 0.839359 0.129826 0.527846 -vn 0.815337 0.129486 0.564322 -vn 0.650783 0.155178 0.743237 -vn 0.586426 0.081490 0.805893 -vn 0.586426 0.081490 0.805893 -vn 0.650783 0.155178 0.743237 -vn 0.583297 0.099180 0.806181 -vn 0.423336 0.053240 0.904407 -vn 0.328463 0.080054 0.941118 -vn 0.396273 0.237589 0.886859 -vn 0.396273 0.237589 0.886859 -vn 0.328463 0.080054 0.941118 -vn 0.332949 0.174518 0.926654 -vn 0.328463 0.080054 0.941118 -vn 0.069472 0.062895 0.995599 -vn 0.332949 0.174518 0.926654 -vn 0.332949 0.174518 0.926654 -vn 0.069472 0.062895 0.995599 -vn 0.176996 0.117972 0.977116 -vn -0.102947 -0.125139 0.986784 -vn -0.231638 -0.421064 0.876954 -vn 0.156160 -0.047093 0.986609 -vn -0.072677 -0.707963 0.702500 -vn 0.077064 -0.547430 0.833296 -vn -0.231638 -0.421064 0.876954 -vn -0.231638 -0.421064 0.876954 -vn 0.077064 -0.547430 0.833296 -vn -0.054624 -0.259423 0.964218 -vn 0.138482 -0.732184 0.666881 -vn 0.247673 -0.520936 0.816874 -vn 0.086428 -0.753305 0.651967 -vn 0.086428 -0.753305 0.651967 -vn 0.247673 -0.520936 0.816874 -vn 0.212866 -0.594441 0.775453 -vn 0.078068 -0.775295 0.626756 -vn 0.142005 -0.600231 0.787120 -vn 0.138482 -0.732184 0.666881 -vn 0.138482 -0.732184 0.666881 -vn 0.142005 -0.600231 0.787120 -vn 0.247673 -0.520936 0.816874 -vn -0.000000 -0.773117 0.634263 -vn -0.000000 -0.616413 0.787423 -vn 0.078068 -0.775295 0.626756 -vn 0.078068 -0.775295 0.626756 -vn -0.000000 -0.616413 0.787423 -vn 0.142005 -0.600231 0.787120 -vn 0.069472 0.062895 0.995599 -vn -0.102947 -0.125139 0.986784 -vn 0.176996 0.117972 0.977116 -vn 0.176996 0.117972 0.977116 -vn -0.102947 -0.125139 0.986784 -vn 0.156160 -0.047093 0.986609 -vn 0.490474 -0.015548 0.871317 -vn 0.423336 0.053240 0.904407 -vn 0.465482 0.198170 0.862586 -vn 0.465482 0.198170 0.862586 -vn 0.423336 0.053240 0.904407 -vn 0.396273 0.237589 0.886859 -vn 0.650783 0.155178 0.743237 -vn 0.558848 0.112880 0.821552 -vn 0.583297 0.099180 0.806181 -vn 0.558848 0.112880 0.821552 -vn 0.508399 -0.001748 0.861120 -vn 0.583297 0.099180 0.806181 -vn 0.583297 0.099180 0.806181 -vn 0.508399 -0.001748 0.861120 -vn 0.524770 0.165762 0.834949 -vn -0.231638 -0.421064 0.876954 -vn -0.054624 -0.259423 0.964218 -vn 0.156160 -0.047093 0.986609 -vn 0.156160 -0.047093 0.986609 -vn -0.054624 -0.259423 0.964218 -vn -0.223353 -0.078074 0.971606 -vn 0.176996 0.117972 0.977116 -vn 0.156160 -0.047093 0.986609 -vn -0.116952 0.164913 0.979350 -vn -0.116952 0.164913 0.979350 -vn 0.156160 -0.047093 0.986609 -vn -0.223353 -0.078074 0.971606 -vn 0.332949 0.174518 0.926654 -vn 0.176996 0.117972 0.977116 -vn 0.235208 0.242647 0.941169 -vn 0.235208 0.242647 0.941169 -vn 0.176996 0.117972 0.977116 -vn -0.116952 0.164913 0.979350 -vn 0.396273 0.237589 0.886859 -vn 0.332949 0.174518 0.926654 -vn 0.250798 0.356808 0.899882 -vn 0.250798 0.356808 0.899882 -vn 0.332949 0.174518 0.926654 -vn 0.235208 0.242647 0.941169 -vn 0.465482 0.198170 0.862586 -vn 0.396273 0.237589 0.886859 -vn 0.327185 0.359445 0.873927 -vn 0.327185 0.359445 0.873927 -vn 0.396273 0.237589 0.886859 -vn 0.250798 0.356808 0.899882 -vn 0.375740 0.369738 0.849772 -vn 0.476121 0.310210 0.822848 -vn 0.524770 0.165762 0.834949 -vn 0.524770 0.165762 0.834949 -vn 0.476121 0.310210 0.822848 -vn 0.583297 0.099180 0.806181 -vn 0.586426 0.081490 0.805893 -vn 0.583297 0.099180 0.806181 -vn 0.578466 0.274019 0.768304 -vn 0.578466 0.274019 0.768304 -vn 0.583297 0.099180 0.806181 -vn 0.476121 0.310210 0.822848 -vn 0.637792 0.094825 0.764349 -vn 0.701508 0.141475 0.698478 -vn 0.804035 0.222201 0.551501 -vn 0.804035 0.222201 0.551501 -vn 0.701508 0.141475 0.698478 -vn 0.693111 0.218075 0.687052 -vn 0.795050 0.365669 0.483923 -vn 0.804035 0.222201 0.551501 -vn 0.692277 0.290502 0.660576 -vn 0.692277 0.290502 0.660576 -vn 0.804035 0.222201 0.551501 -vn 0.693111 0.218075 0.687052 -vn 0.746743 0.367139 0.554603 -vn 0.795050 0.365669 0.483923 -vn 0.665432 0.371470 0.647465 -vn 0.665432 0.371470 0.647465 -vn 0.795050 0.365669 0.483923 -vn 0.692277 0.290502 0.660576 -vn 0.746743 0.367139 0.554603 -vn 0.665432 0.371470 0.647465 -vn 0.693408 0.534699 0.482993 -vn 0.693408 0.534699 0.482993 -vn 0.665432 0.371470 0.647465 -vn 0.565544 0.401306 0.720495 -vn 0.440421 0.756675 0.483190 -vn 0.395914 0.622562 0.675033 -vn 0.000000 0.852896 0.522081 -vn 0.000000 0.852896 0.522081 -vn 0.395914 0.622562 0.675033 -vn 0.000000 0.735528 0.677494 -vn 0.692277 0.290502 0.660576 -vn 0.492427 0.164830 0.854603 -vn 0.665432 0.371470 0.647465 -vn 0.665432 0.371470 0.647465 -vn 0.492427 0.164830 0.854603 -vn 0.511349 0.270648 0.815642 -vn 0.665432 0.371470 0.647465 -vn 0.511349 0.270648 0.815642 -vn 0.565544 0.401306 0.720495 -vn 0.565544 0.401306 0.720495 -vn 0.511349 0.270648 0.815642 -vn 0.410556 0.235873 0.880800 -vn 0.395914 0.622562 0.675033 -vn 0.283113 0.470702 0.835635 -vn 0.000000 0.735528 0.677494 -vn 0.000000 0.735528 0.677494 -vn 0.283113 0.470702 0.835635 -vn 0.000000 0.588858 0.808237 -vn 0.646546 -0.091362 0.757385 -vn 0.712959 -0.201500 0.671630 -vn 0.693830 -0.131650 0.708003 -vn 0.693830 -0.131650 0.708003 -vn 0.712959 -0.201500 0.671630 -vn 0.739324 -0.227264 0.633838 -vn 0.267558 -0.406754 0.873478 -vn 0.540100 0.136136 0.830518 -vn 0.328776 -0.398405 0.856259 -vn 0.328776 -0.398405 0.856259 -vn 0.540100 0.136136 0.830518 -vn 0.491149 0.152390 0.857642 -vn 0.328776 -0.398405 0.856259 -vn 0.086428 -0.753305 0.651967 -vn 0.267558 -0.406754 0.873478 -vn 0.267558 -0.406754 0.873478 -vn 0.086428 -0.753305 0.651967 -vn -0.072677 -0.707963 0.702500 -vn 0.086428 -0.753305 0.651967 -vn 0.212866 -0.594441 0.775453 -vn -0.072677 -0.707963 0.702500 -vn -0.072677 -0.707963 0.702500 -vn 0.212866 -0.594441 0.775453 -vn 0.077064 -0.547430 0.833296 -vn 0.302576 -0.139600 -0.942847 -vn 0.192392 -0.228822 -0.954267 -vn 0.292926 -0.140834 -0.945706 -vn 0.292926 -0.140834 -0.945706 -vn 0.192392 -0.228822 -0.954267 -vn 0.238326 -0.280306 -0.929855 -vn -0.885110 0.090062 -0.456583 -vn -0.908319 0.101642 -0.405740 -vn -0.901202 0.095876 -0.422661 -vn -0.838070 0.099633 -0.536388 -vn -0.885110 0.090062 -0.456583 -vn -0.872698 0.061052 -0.484429 -vn -0.872698 0.061052 -0.484429 -vn -0.885110 0.090062 -0.456583 -vn -0.901202 0.095876 -0.422661 -vn -0.906366 0.121056 -0.404780 -vn -0.918399 0.104092 -0.381717 -vn -0.908319 0.101642 -0.405740 -vn -0.908319 0.101642 -0.405740 -vn -0.918399 0.104092 -0.381717 -vn -0.901202 0.095876 -0.422661 -vn -0.838270 0.058952 -0.542059 -vn -0.848483 0.011890 -0.529089 -vn -0.841805 0.021328 -0.539360 -vn 0.004213 -0.178993 0.983841 -vn 0.005068 -0.169127 0.985581 -vn 0.000875 -0.119271 0.992861 -vn 0.000875 -0.119271 0.992861 -vn 0.005068 -0.169127 0.985581 -vn -0.000283 -0.119211 0.992869 -vn -0.028557 -0.125072 0.991737 -vn -0.030092 -0.127525 0.991379 -vn -0.033619 -0.126186 0.991437 -vn -0.033619 -0.126186 0.991437 -vn -0.030092 -0.127525 0.991379 -vn -0.033272 -0.126422 0.991418 -vn -0.009534 -0.119049 0.992843 -vn -0.012070 -0.128801 0.991597 -vn -0.028557 -0.125072 0.991737 -vn -0.028557 -0.125072 0.991737 -vn -0.012070 -0.128801 0.991597 -vn -0.030092 -0.127525 0.991379 -vn 0.008610 -0.088195 0.996066 -vn 0.006816 -0.096393 0.995320 -vn -0.009534 -0.119049 0.992843 -vn -0.009534 -0.119049 0.992843 -vn 0.006816 -0.096393 0.995320 -vn -0.012070 -0.128801 0.991597 -vn 0.008610 -0.088195 0.996066 -vn 0.000000 -0.094600 0.995515 -vn 0.006816 -0.096393 0.995320 -vn 0.006816 -0.096393 0.995320 -vn 0.000000 -0.094600 0.995515 -vn 0.000000 -0.097825 0.995204 -vn 0.629564 -0.097579 0.770797 -vn 0.897861 -0.284137 0.336321 -vn 0.827590 -0.457878 0.324718 -vn 0.599920 -0.116148 0.791584 -vn 0.827590 -0.457878 0.324718 -vn 0.753614 -0.507019 0.418327 -vn 0.753614 -0.507019 0.418327 -vn 0.794821 -0.533487 0.289225 -vn 0.692347 -0.561281 0.453452 -vn 0.794821 -0.533487 0.289225 -vn 0.753614 -0.507019 0.418327 -vn 0.827590 -0.457878 0.324718 -vn 0.712959 -0.201500 0.671630 -vn 0.755253 -0.322586 0.570553 -vn 0.739324 -0.227264 0.633838 -vn 0.739324 -0.227264 0.633838 -vn 0.755253 -0.322586 0.570553 -vn 0.757093 -0.350156 0.551544 -vn 0.756897 -0.413234 0.506304 -vn 0.753614 -0.507019 0.418327 -vn 0.692347 -0.561281 0.453452 -vn 0.599920 -0.116148 0.791584 -vn 0.753614 -0.507019 0.418327 -vn 0.563981 -0.086031 0.821294 -vn 0.563981 -0.086031 0.821294 -vn 0.753614 -0.507019 0.418327 -vn 0.756897 -0.413234 0.506304 -vn 0.559633 0.486693 0.670777 -vn 0.577927 0.320953 0.750326 -vn 0.275018 0.577380 0.768764 -vn 0.275018 0.577380 0.768764 -vn 0.577927 0.320953 0.750326 -vn 0.116849 0.176924 0.977264 -vn 0.769638 0.335020 0.543525 -vn 0.750340 0.293327 0.592410 -vn 0.559633 0.486693 0.670777 -vn 0.559633 0.486693 0.670777 -vn 0.750340 0.293327 0.592410 -vn 0.577927 0.320953 0.750326 -vn 0.235208 0.242647 0.941169 -vn -0.116952 0.164913 0.979350 -vn 0.517412 0.107566 0.848949 -vn 0.250798 0.356808 0.899882 -vn 0.235208 0.242647 0.941169 -vn 0.503238 0.171977 0.846862 -vn 0.503238 0.171977 0.846862 -vn 0.235208 0.242647 0.941169 -vn 0.517412 0.107566 0.848949 -vn 0.327185 0.359445 0.873927 -vn 0.250798 0.356808 0.899882 -vn 0.576598 0.119160 0.808292 -vn 0.576598 0.119160 0.808292 -vn 0.250798 0.356808 0.899882 -vn 0.503238 0.171977 0.846862 -vn 0.476121 0.310210 0.822848 -vn 0.375740 0.369738 0.849772 -vn 0.622963 0.010707 0.782178 -vn 0.622963 0.010707 0.782178 -vn 0.375740 0.369738 0.849772 -vn 0.613048 0.091494 0.784730 -vn 0.622963 0.010707 0.782178 -vn 0.578466 0.274019 0.768304 -vn 0.476121 0.310210 0.822848 -vn 0.578466 0.274019 0.768304 -vn 0.622963 0.010707 0.782178 -vn 0.600783 -0.009281 0.799358 -vn 0.701508 0.141475 0.698478 -vn 0.561162 0.016469 0.827542 -vn 0.693111 0.218075 0.687052 -vn 0.693111 0.218075 0.687052 -vn 0.561162 0.016469 0.827542 -vn 0.534016 0.096637 0.839934 -vn 0.693111 0.218075 0.687052 -vn 0.534016 0.096637 0.839934 -vn 0.692277 0.290502 0.660576 -vn 0.692277 0.290502 0.660576 -vn 0.534016 0.096637 0.839934 -vn 0.492427 0.164830 0.854603 -vn 0.433159 0.872883 -0.224608 -vn 0.000000 0.965908 -0.258887 -vn 0.420776 0.879811 -0.221087 -vn 0.420776 0.879811 -0.221087 -vn 0.000000 0.965908 -0.258887 -vn -0.000000 0.965233 -0.261391 -vn 0.775130 0.531844 -0.341050 -vn 0.689875 0.626450 -0.362813 -vn 0.662525 0.655485 -0.362491 -vn 0.654908 -0.078612 0.751609 -vn 0.646546 -0.091362 0.757385 -vn 0.693830 -0.131650 0.708003 -vn 0.547185 0.096805 0.831395 -vn 0.540100 0.136136 0.830518 -vn 0.580964 0.116968 0.805481 -vn 0.580964 0.116968 0.805481 -vn 0.540100 0.136136 0.830518 -vn 0.552821 0.127056 0.823557 -vn 0.238326 -0.280306 -0.929855 -vn 0.205507 -0.341339 -0.917199 -vn 0.413320 -0.375423 -0.829593 -vn 0.740528 -0.552831 0.382095 -vn 0.794821 -0.533487 0.289225 -vn 0.897861 -0.284137 0.336321 -vn 0.740528 -0.552831 0.382095 -vn 0.879104 -0.123736 0.460289 -vn 0.825383 0.027812 0.563888 -vn 0.879104 -0.123736 0.460289 -vn 0.740528 -0.552831 0.382095 -vn 0.897861 -0.284137 0.336321 -vn 0.275481 -0.960323 -0.043470 -vn 0.202619 -0.977154 -0.064148 -vn 0.264099 -0.963244 -0.049115 -vn 0.264099 -0.963244 -0.049115 -vn 0.202619 -0.977154 -0.064148 -vn 0.185660 -0.980159 -0.069421 -vn 0.005068 -0.169127 0.985581 -vn 0.004213 -0.178993 0.983841 -vn 0.005265 -0.232431 0.972599 -vn 0.005265 -0.232431 0.972599 -vn 0.004213 -0.178993 0.983841 -vn 0.001215 -0.234994 0.971996 -vn 0.946101 -0.091808 0.310587 -vn 0.947651 -0.069522 0.311647 -vn 0.933835 -0.126242 0.334685 -vn -0.363064 -0.930250 0.053092 -vn -0.385532 -0.921257 0.051487 -vn -0.687639 -0.725988 0.009737 -vn -0.687639 -0.725988 0.009737 -vn -0.385532 -0.921257 0.051487 -vn -0.709102 -0.705080 0.006041 -vn 0.000000 -0.999654 0.026321 -vn 0.000000 -0.998690 0.051159 -vn -0.363064 -0.930250 0.053092 -vn -0.363064 -0.930250 0.053092 -vn 0.000000 -0.998690 0.051159 -vn -0.385532 -0.921257 0.051487 -vn -0.900188 -0.434837 0.024056 -vn -0.913375 -0.402924 0.058299 -vn -0.980424 -0.151736 0.125481 -vn -0.980424 -0.151736 0.125481 -vn -0.913375 -0.402924 0.058299 -vn -0.980182 -0.136745 0.143330 -vn -0.687639 -0.725988 0.009737 -vn -0.709102 -0.705080 0.006041 -vn -0.900188 -0.434837 0.024056 -vn -0.900188 -0.434837 0.024056 -vn -0.709102 -0.705080 0.006041 -vn -0.913375 -0.402924 0.058299 -vn -0.994612 -0.017356 0.102202 -vn -0.994065 -0.017268 0.107409 -vn -0.980182 -0.136745 0.143330 -vn -0.980182 -0.136745 0.143330 -vn -0.994065 -0.017268 0.107409 -vn -0.980424 -0.151736 0.125481 -vn 0.000000 -0.031297 -0.999510 -vn -0.002828 -0.032587 -0.999465 -vn -0.008149 -0.028624 -0.999557 -vn 0.072237 -0.977132 -0.199989 -vn 0.219139 -0.948685 -0.227980 -vn 0.116236 -0.981237 -0.153826 -vn 0.116236 -0.981237 -0.153826 -vn 0.219139 -0.948685 -0.227980 -vn 0.286498 -0.934423 -0.211594 -vn -0.035271 -0.981040 -0.190571 -vn 0.035271 -0.981040 -0.190571 -vn 0.000000 -0.993771 -0.111439 -vn 0.823204 0.041899 0.566197 -vn 0.877209 0.129252 0.462382 -vn 0.815337 0.129486 0.564322 -vn 0.815337 0.129486 0.564322 -vn 0.877209 0.129252 0.462382 -vn 0.793372 0.044920 0.607078 -vn 0.605520 0.092760 0.790405 -vn 0.823204 0.041899 0.566197 -vn 0.586426 0.081490 0.805893 -vn 0.586426 0.081490 0.805893 -vn 0.823204 0.041899 0.566197 -vn 0.815337 0.129486 0.564322 -vn 0.676738 0.161385 0.718318 -vn 0.605520 0.092760 0.790405 -vn 0.578466 0.274019 0.768304 -vn 0.578466 0.274019 0.768304 -vn 0.605520 0.092760 0.790405 -vn 0.586426 0.081490 0.805893 -vn 0.375740 0.369738 0.849772 -vn 0.327185 0.359445 0.873927 -vn 0.613048 0.091494 0.784730 -vn 0.613048 0.091494 0.784730 -vn 0.327185 0.359445 0.873927 -vn 0.576598 0.119160 0.808292 -vn 0.524770 0.165762 0.834949 -vn 0.465482 0.198170 0.862586 -vn 0.375740 0.369738 0.849772 -vn 0.375740 0.369738 0.849772 -vn 0.465482 0.198170 0.862586 -vn 0.327185 0.359445 0.873927 -vn 0.508399 -0.001748 0.861120 -vn 0.490474 -0.015548 0.871317 -vn 0.524770 0.165762 0.834949 -vn 0.524770 0.165762 0.834949 -vn 0.490474 -0.015548 0.871317 -vn 0.465482 0.198170 0.862586 -vn 0.629564 -0.097579 0.770797 -vn 0.599920 -0.116148 0.791584 -vn 0.508399 -0.001748 0.861120 -vn 0.508399 -0.001748 0.861120 -vn 0.599920 -0.116148 0.791584 -vn 0.490474 -0.015548 0.871317 -vn 0.629564 -0.097579 0.770797 -vn 0.827590 -0.457878 0.324718 -vn 0.599920 -0.116148 0.791584 -vn 0.856568 -0.147677 0.494451 -vn 0.877209 0.129252 0.462382 -vn 0.865779 -0.017836 0.500109 -vn 0.877209 0.129252 0.462382 -vn 0.856568 -0.147677 0.494451 -vn 0.793372 0.044920 0.607078 -vn 0.946101 -0.091808 0.310587 -vn 0.921518 -0.135700 0.363854 -vn 0.947651 -0.069522 0.311647 -vn 0.885192 -0.082688 0.457819 -vn 0.921518 -0.135700 0.363854 -vn 0.856568 -0.147677 0.494451 -vn 0.856568 -0.147677 0.494451 -vn 0.921518 -0.135700 0.363854 -vn 0.868708 -0.239350 0.433656 -vn 0.868708 -0.239350 0.433656 -vn 0.921518 -0.135700 0.363854 -vn 0.899836 -0.220831 0.376203 -vn 0.329487 0.646995 0.687630 -vn 0.275018 0.577380 0.768764 -vn 0.000001 0.672206 0.740364 -vn 0.000001 0.672206 0.740364 -vn 0.275018 0.577380 0.768764 -vn 0.000001 0.613691 0.789546 -vn 0.630978 0.528192 0.568225 -vn 0.559633 0.486693 0.670777 -vn 0.329487 0.646995 0.687630 -vn 0.329487 0.646995 0.687630 -vn 0.559633 0.486693 0.670777 -vn 0.275018 0.577380 0.768764 -vn 0.829124 0.305410 0.468271 -vn 0.769638 0.335020 0.543525 -vn 0.630978 0.528192 0.568225 -vn 0.630978 0.528192 0.568225 -vn 0.769638 0.335020 0.543525 -vn 0.559633 0.486693 0.670777 -vn 0.903662 0.091606 0.418334 -vn 0.874367 0.142896 0.463750 -vn 0.829124 0.305410 0.468271 -vn 0.829124 0.305410 0.468271 -vn 0.874367 0.142896 0.463750 -vn 0.769638 0.335020 0.543525 -vn 0.874367 0.142896 0.463750 -vn 0.903662 0.091606 0.418334 -vn 0.865779 -0.017836 0.500109 -vn 0.903662 0.091606 0.418334 -vn 0.885192 -0.082688 0.457819 -vn 0.865779 -0.017836 0.500109 -vn 0.885192 -0.082688 0.457819 -vn 0.856568 -0.147677 0.494451 -vn 0.865779 -0.017836 0.500109 -vn 0.689875 0.626450 -0.362813 -vn 0.433159 0.872883 -0.224608 -vn 0.662525 0.655485 -0.362491 -vn 0.662525 0.655485 -0.362491 -vn 0.433159 0.872883 -0.224608 -vn 0.420776 0.879811 -0.221087 -vn 0.565544 0.401306 0.720495 -vn 0.410556 0.235873 0.880800 -vn 0.395914 0.622562 0.675033 -vn 0.395914 0.622562 0.675033 -vn 0.410556 0.235873 0.880800 -vn 0.283113 0.470702 0.835635 -vn 0.440421 0.756675 0.483190 -vn 0.693408 0.534699 0.482993 -vn 0.395914 0.622562 0.675033 -vn 0.395914 0.622562 0.675033 -vn 0.693408 0.534699 0.482993 -vn 0.565544 0.401306 0.720495 -vn 0.436523 0.194338 0.878454 -vn 0.693408 0.534699 0.482993 -vn 0.301224 0.372748 0.877680 -vn 0.301224 0.372748 0.877680 -vn 0.693408 0.534699 0.482993 -vn 0.440421 0.756675 0.483190 -vn 0.301224 0.372748 0.877680 -vn 0.116849 0.176924 0.977264 -vn 0.436523 0.194338 0.878454 -vn 0.436523 0.194338 0.878454 -vn 0.116849 0.176924 0.977264 -vn 0.577927 0.320953 0.750326 -vn -0.838070 0.099633 -0.536388 -vn -0.872698 0.061052 -0.484429 -vn -0.838270 0.058952 -0.542059 -vn -0.838270 0.058952 -0.542059 -vn -0.872698 0.061052 -0.484429 -vn -0.848483 0.011890 -0.529089 -vn 0.205507 -0.341339 -0.917199 -vn 0.238326 -0.280306 -0.929855 -vn 0.178952 -0.332850 -0.925844 -vn 0.178952 -0.332850 -0.925844 -vn 0.238326 -0.280306 -0.929855 -vn 0.192392 -0.228822 -0.954267 -vn 0.178952 -0.332850 -0.925844 -vn 0.203434 -0.333613 -0.920498 -vn 0.205507 -0.341339 -0.917199 -vn 0.205507 -0.341339 -0.917199 -vn 0.203434 -0.333613 -0.920498 -vn 0.201669 -0.331943 -0.921490 -vn 0.203434 -0.333613 -0.920498 -vn 0.163755 -0.336085 -0.927487 -vn 0.201669 -0.331943 -0.921490 -vn 0.201669 -0.331943 -0.921490 -vn 0.163755 -0.336085 -0.927487 -vn 0.153812 -0.338506 -0.928308 -vn -0.848483 0.011890 -0.529089 -vn -0.857799 0.017740 -0.513679 -vn -0.841805 0.021328 -0.539360 -vn -0.841805 0.021328 -0.539360 -vn -0.857799 0.017740 -0.513679 -vn -0.852988 -0.069459 -0.517289 -vn -0.857799 0.017740 -0.513679 -vn -0.850491 -0.071994 -0.521040 -vn -0.852988 -0.069459 -0.517289 -vn -0.850491 -0.071994 -0.521040 -vn -0.846858 -0.092154 -0.523774 -vn -0.852988 -0.069459 -0.517289 -vn -0.852988 -0.069459 -0.517289 -vn -0.846858 -0.092154 -0.523774 -vn -0.847084 -0.090957 -0.523617 -vn -0.846858 -0.092154 -0.523774 -vn -0.856333 -0.079551 -0.510260 -vn -0.847084 -0.090957 -0.523617 -vn -0.847084 -0.090957 -0.523617 -vn -0.856333 -0.079551 -0.510260 -vn -0.858056 -0.079184 -0.507414 -vn 0.478460 -0.790217 0.382927 -vn 0.740528 -0.552831 0.382095 -vn 0.276535 -0.885349 0.373744 -vn 0.740528 -0.552831 0.382095 -vn 0.590636 -0.714540 0.374942 -vn 0.794821 -0.533487 0.289225 -vn 0.750340 0.293327 0.592410 -vn 0.795050 0.365669 0.483923 -vn 0.577927 0.320953 0.750326 -vn 0.577927 0.320953 0.750326 -vn 0.795050 0.365669 0.483923 -vn 0.746743 0.367139 0.554603 -vn 0.646546 -0.091362 0.757385 -vn 0.654908 -0.078612 0.751609 -vn 0.595966 0.010468 0.802942 -vn 0.595966 0.010468 0.802942 -vn 0.654908 -0.078612 0.751609 -vn 0.645955 0.010511 0.763303 -vn 0.540100 0.136136 0.830518 -vn 0.595966 0.010468 0.802942 -vn 0.552821 0.127056 0.823557 -vn 0.552821 0.127056 0.823557 -vn 0.595966 0.010468 0.802942 -vn 0.645955 0.010511 0.763303 -vn 0.251850 0.142172 0.957266 -vn -0.000000 0.162236 0.986752 -vn 0.148083 0.146979 0.977992 -vn 0.148083 0.146979 0.977992 -vn -0.000000 0.162236 0.986752 -vn 0.000000 0.141845 0.989889 -vn 0.309236 0.165615 0.936453 -vn 0.419722 0.109486 0.901025 -vn 0.258902 0.164100 0.951862 -vn 0.419722 0.109486 0.901025 -vn 0.251850 0.142172 0.957266 -vn 0.258902 0.164100 0.951862 -vn 0.251850 0.142172 0.957266 -vn 0.148083 0.146979 0.977992 -vn 0.258902 0.164100 0.951862 -vn 0.419722 0.109486 0.901025 -vn 0.612309 0.047674 0.789180 -vn 0.564812 0.045085 0.823987 -vn 0.612309 0.047674 0.789180 -vn 0.419722 0.109486 0.901025 -vn 0.606936 0.075890 0.791119 -vn 0.419722 0.109486 0.901025 -vn 0.543709 0.088666 0.834577 -vn 0.606936 0.075890 0.791119 -vn 0.419722 0.109486 0.901025 -vn 0.454197 0.114604 0.883499 -vn 0.543709 0.088666 0.834577 -vn 0.454197 0.114604 0.883499 -vn 0.419722 0.109486 0.901025 -vn 0.309236 0.165615 0.936453 -vn 0.669690 0.002394 0.742637 -vn 0.671572 0.000921 0.740939 -vn 0.564812 0.045085 0.823987 -vn 0.671572 0.000921 0.740939 -vn 0.643622 0.003589 0.765335 -vn 0.564812 0.045085 0.823987 -vn 0.643622 0.003589 0.765335 -vn 0.639898 0.000849 0.768459 -vn 0.564812 0.045085 0.823987 -vn 0.612309 0.047674 0.789180 -vn 0.636922 0.014002 0.770801 -vn 0.564812 0.045085 0.823987 -vn 0.636922 0.014002 0.770801 -vn 0.657122 0.006114 0.753760 -vn 0.564812 0.045085 0.823987 -vn 0.564812 0.045085 0.823987 -vn 0.657122 0.006114 0.753760 -vn 0.669690 0.002394 0.742637 -vn 0.643622 0.003589 0.765335 -vn 0.683680 -0.002210 0.729778 -vn 0.639898 0.000849 0.768459 -vn 0.639898 0.000849 0.768459 -vn 0.683680 -0.002210 0.729778 -vn 0.627582 -0.013520 0.778433 -vn 0.683680 -0.002210 0.729778 -vn 0.640471 -0.013126 0.767870 -vn 0.627582 -0.013520 0.778433 -vn 0.667492 -0.004836 0.744601 -vn 0.629564 -0.097579 0.770797 -vn 0.558848 0.112880 0.821552 -vn 0.558848 0.112880 0.821552 -vn 0.629564 -0.097579 0.770797 -vn 0.508399 -0.001748 0.861120 -vn 0.897861 -0.284137 0.336321 -vn 0.629564 -0.097579 0.770797 -vn 0.872814 -0.299764 0.385146 -vn 0.629564 -0.097579 0.770797 -vn 0.667492 -0.004836 0.744601 -vn 0.872814 -0.299764 0.385146 -vn 0.600783 -0.009281 0.799358 -vn 0.676738 0.161385 0.718318 -vn 0.578466 0.274019 0.768304 -vn 0.676738 0.161385 0.718318 -vn 0.561162 0.016469 0.827542 -vn 0.701508 0.141475 0.698478 -vn 0.561162 0.016469 0.827542 -vn 0.676738 0.161385 0.718318 -vn 0.600783 -0.009281 0.799358 -vn 0.701508 0.141475 0.698478 -vn 0.637792 0.094825 0.764349 -vn 0.676738 0.161385 0.718318 -vn 0.676738 0.161385 0.718318 -vn 0.637792 0.094825 0.764349 -vn 0.605520 0.092760 0.790405 -vn 0.637792 0.094825 0.764349 -vn 0.725880 0.010497 0.687741 -vn 0.605520 0.092760 0.790405 -vn 0.605520 0.092760 0.790405 -vn 0.725880 0.010497 0.687741 -vn 0.823204 0.041899 0.566197 -vn 0.725880 0.010497 0.687741 -vn 0.878718 0.118805 0.462320 -vn 0.823204 0.041899 0.566197 -vn 0.823204 0.041899 0.566197 -vn 0.878718 0.118805 0.462320 -vn 0.877209 0.129252 0.462382 -vn 0.878718 0.118805 0.462320 -vn 0.865779 -0.017836 0.500109 -vn 0.877209 0.129252 0.462382 -vn 0.000875 -0.119271 0.992861 -vn -0.000283 -0.119211 0.992869 -vn -0.033272 -0.126422 0.991418 -vn -0.033272 -0.126422 0.991418 -vn -0.000283 -0.119211 0.992869 -vn -0.033619 -0.126186 0.991437 -vn -0.995493 -0.030523 0.089784 -vn -0.993894 -0.047100 0.099785 -vn -0.986612 -0.094408 0.132977 -vn 0.921518 -0.135700 0.363854 -vn 0.885192 -0.082688 0.457819 -vn 0.947651 -0.069522 0.311647 -vn 0.740528 -0.552831 0.382095 -vn 0.478460 -0.790217 0.382927 -vn 0.590636 -0.714540 0.374942 -vn 0.692347 -0.561281 0.453452 -vn 0.590636 -0.714540 0.374942 -vn 0.662696 -0.571306 0.484194 -vn 0.662696 -0.571306 0.484194 -vn 0.590636 -0.714540 0.374942 -vn 0.478460 -0.790217 0.382927 -vn 0.756897 -0.413234 0.506304 -vn 0.692347 -0.561281 0.453452 -vn 0.729157 -0.440006 0.524142 -vn 0.729157 -0.440006 0.524142 -vn 0.692347 -0.561281 0.453452 -vn 0.662696 -0.571306 0.484194 -vn 0.755253 -0.322586 0.570553 -vn 0.756897 -0.413234 0.506304 -vn 0.757093 -0.350156 0.551544 -vn 0.757093 -0.350156 0.551544 -vn 0.756897 -0.413234 0.506304 -vn 0.729157 -0.440006 0.524142 -vn -0.994065 -0.017268 0.107409 -vn -0.994612 -0.017356 0.102202 -vn -0.995493 -0.030523 0.089784 -vn -0.995493 -0.030523 0.089784 -vn -0.994612 -0.017356 0.102202 -vn -0.993894 -0.047100 0.099785 -vn 0.692347 -0.561281 0.453452 -vn 0.794821 -0.533487 0.289225 -vn 0.590636 -0.714540 0.374942 -vn 0.897861 -0.284137 0.336321 -vn 0.794821 -0.533487 0.289225 -vn 0.827590 -0.457878 0.324718 -vn 0.072237 -0.977132 -0.199989 -vn 0.035271 -0.981040 -0.190571 -vn 0.219139 -0.948685 -0.227980 -vn 0.219139 -0.948685 -0.227980 -vn 0.035271 -0.981040 -0.190571 -vn -0.000000 -0.979515 -0.201370 -vn 0.006740 -0.119147 0.992854 -vn -0.014744 -0.114681 0.993293 -vn 0.010643 -0.117305 0.993039 -vn 0.010643 -0.117305 0.993039 -vn -0.014744 -0.114681 0.993293 -vn -0.016403 -0.114530 0.993284 -vn 0.001677 -0.122098 0.992517 -vn 0.006740 -0.119147 0.992854 -vn 0.002947 -0.126501 0.991962 -vn 0.002947 -0.126501 0.991962 -vn 0.006740 -0.119147 0.992854 -vn 0.010643 -0.117305 0.993039 -vn -0.015049 -0.110728 0.993737 -vn -0.008436 -0.120558 0.992670 -vn 0.002947 -0.126501 0.991962 -vn 0.002947 -0.126501 0.991962 -vn -0.008436 -0.120558 0.992670 -vn 0.001677 -0.122098 0.992517 -vn -0.004325 -0.103474 0.994623 -vn -0.007502 -0.104044 0.994544 -vn -0.015049 -0.110728 0.993737 -vn -0.015049 -0.110728 0.993737 -vn -0.007502 -0.104044 0.994544 -vn -0.008436 -0.120558 0.992670 -vn -0.005018 -0.111652 0.993735 -vn -0.005159 -0.111410 0.993761 -vn -0.004325 -0.103474 0.994623 -vn -0.004325 -0.103474 0.994623 -vn -0.005159 -0.111410 0.993761 -vn -0.007502 -0.104044 0.994544 -vn -0.000000 -0.103656 0.994613 -vn 0.000000 -0.104054 0.994572 -vn -0.005018 -0.111652 0.993735 -vn -0.005018 -0.111652 0.993735 -vn 0.000000 -0.104054 0.994572 -vn -0.005159 -0.111410 0.993761 -vn 0.383256 0.917388 0.107303 -vn 0.381629 0.918042 0.107509 -vn 0.000001 0.993140 0.116931 -vn 0.000001 0.993140 0.116931 -vn 0.381629 0.918042 0.107509 -vn -0.000000 0.993137 0.116961 -vn 0.944421 0.326503 0.038270 -vn 0.996158 0.087056 0.009500 -vn 0.944072 0.327512 0.038261 -vn 0.944072 0.327512 0.038261 -vn 0.996158 0.087056 0.009500 -vn 0.996136 0.087303 0.009553 -vn 0.383256 0.917388 0.107303 -vn 0.734848 0.673668 0.078545 -vn 0.381629 0.918042 0.107509 -vn 0.381629 0.918042 0.107509 -vn 0.734848 0.673668 0.078545 -vn 0.733828 0.674769 0.078632 -vn 0.944421 0.326503 0.038270 -vn 0.944072 0.327512 0.038261 -vn 0.734848 0.673668 0.078545 -vn 0.734848 0.673668 0.078545 -vn 0.944072 0.327512 0.038261 -vn 0.733828 0.674769 0.078632 -vn 0.999999 0.000168 -0.001210 -vn 0.999999 0.000474 -0.001197 -vn 0.999999 0.000133 -0.001444 -vn 0.999999 0.000474 -0.001197 -vn 0.999999 0.000168 -0.001210 -vn 0.996136 0.087303 0.009553 -vn 0.999999 0.000474 -0.001197 -vn 0.996136 0.087303 0.009553 -vn 0.996158 0.087056 0.009500 -vn 1.000000 0.000059 -0.000503 -vn 1.000000 0.000066 -0.000537 -vn 0.999999 -0.000103 -0.001265 -vn 0.999999 0.000168 -0.001210 -vn 0.999999 -0.000103 -0.001265 -vn 1.000000 0.000066 -0.000537 -vn 0.999999 -0.000103 -0.001265 -vn 0.999999 0.000168 -0.001210 -vn 0.999999 0.000133 -0.001444 -vn -0.874368 0.142892 0.463748 -vn -0.769637 0.335024 0.543524 -vn -0.839359 0.129821 0.527847 -vn -0.769637 0.335024 0.543524 -vn -0.750336 0.293332 0.592412 -vn -0.839359 0.129821 0.527847 -vn -0.116849 0.176925 0.977263 -vn 0.000000 0.212854 0.977084 -vn -0.301220 0.372748 0.877682 -vn 0.000000 0.212854 0.977084 -vn -0.000000 0.428954 0.903327 -vn -0.301220 0.372748 0.877682 -vn 0.000000 0.212854 0.977084 -vn -0.116849 0.176925 0.977263 -vn 0.000001 0.613691 0.789546 -vn -0.116849 0.176925 0.977263 -vn -0.275020 0.577380 0.768763 -vn 0.000001 0.613691 0.789546 -vn -0.872815 -0.299763 0.385144 -vn -0.897861 -0.284137 0.336321 -vn -0.876646 -0.220404 0.427685 -vn -0.897861 -0.284137 0.336321 -vn -0.879103 -0.123735 0.460291 -vn -0.876646 -0.220404 0.427685 -vn -0.839359 0.129821 0.527847 -vn -0.725879 0.010493 0.687742 -vn -0.878719 0.118802 0.462319 -vn -0.736369 -0.009801 0.676509 -vn -0.650778 0.155174 0.743242 -vn -0.667494 -0.004835 0.744600 -vn -0.650778 0.155174 0.743242 -vn -0.558854 0.112881 0.821547 -vn -0.667494 -0.004835 0.744600 -vn -0.865777 -0.017836 0.500112 -vn -0.874368 0.142892 0.463748 -vn -0.878719 0.118802 0.462319 -vn -0.874368 0.142892 0.463748 -vn -0.839359 0.129821 0.527847 -vn -0.878719 0.118802 0.462319 -vn -0.872815 -0.299763 0.385144 -vn -0.868708 -0.239350 0.433657 -vn -0.667494 -0.004835 0.744600 -vn -0.868708 -0.239350 0.433657 -vn -0.736369 -0.009801 0.676509 -vn -0.667494 -0.004835 0.744600 -vn -0.872815 -0.299763 0.385144 -vn -0.876646 -0.220404 0.427685 -vn -0.868708 -0.239350 0.433657 -vn -0.876646 -0.220404 0.427685 -vn -0.899836 -0.220835 0.376201 -vn -0.868708 -0.239350 0.433657 -vn -0.563982 -0.086031 0.821293 -vn -0.423338 0.053242 0.904406 -vn -0.506635 -0.080128 0.858429 -vn -0.423338 0.053242 0.904406 -vn -0.328468 0.080050 0.941117 -vn -0.506635 -0.080128 0.858429 -vn -0.506635 -0.080128 0.858429 -vn -0.328468 0.080050 0.941117 -vn -0.345102 -0.069683 0.935975 -vn -0.328468 0.080050 0.941117 -vn -0.069477 0.062895 0.995599 -vn -0.345102 -0.069683 0.935975 -vn 0.102959 -0.125140 0.986782 -vn 0.231638 -0.421065 0.876954 -vn -0.094883 -0.123582 0.987788 -vn 0.231638 -0.421065 0.876954 -vn -0.160782 -0.314716 0.935469 -vn -0.094883 -0.123582 0.987788 -vn -0.267556 -0.406753 0.873479 -vn -0.160782 -0.314716 0.935469 -vn 0.072677 -0.707963 0.702500 -vn -0.160782 -0.314716 0.935469 -vn 0.231638 -0.421065 0.876954 -vn 0.072677 -0.707963 0.702500 -vn -0.298116 -0.370998 0.879481 -vn -0.328776 -0.398405 0.856259 -vn -0.138480 -0.732187 0.666877 -vn -0.328776 -0.398405 0.856259 -vn -0.086429 -0.753305 0.651967 -vn -0.138480 -0.732187 0.666877 -vn -0.175494 -0.359003 0.916689 -vn -0.298116 -0.370998 0.879481 -vn -0.078068 -0.775295 0.626756 -vn -0.298116 -0.370998 0.879481 -vn -0.138480 -0.732187 0.666877 -vn -0.078068 -0.775295 0.626756 -vn 0.000000 -0.331736 0.943372 -vn -0.175494 -0.359003 0.916689 -vn -0.000000 -0.773117 0.634263 -vn -0.175494 -0.359003 0.916689 -vn -0.078068 -0.775295 0.626756 -vn -0.000000 -0.773117 0.634263 -vn -0.345102 -0.069683 0.935975 -vn -0.069477 0.062895 0.995599 -vn -0.094883 -0.123582 0.987788 -vn -0.069477 0.062895 0.995599 -vn 0.102959 -0.125140 0.986782 -vn -0.094883 -0.123582 0.987788 -vn -0.563982 -0.086031 0.821293 -vn -0.506635 -0.080128 0.858429 -vn -0.756897 -0.413234 0.506304 -vn -0.506635 -0.080128 0.858429 -vn -0.755254 -0.322587 0.570552 -vn -0.756897 -0.413234 0.506304 -vn -0.506635 -0.080128 0.858429 -vn -0.345102 -0.069683 0.935975 -vn -0.755254 -0.322587 0.570552 -vn -0.345102 -0.069683 0.935975 -vn -0.712964 -0.201500 0.671625 -vn -0.755254 -0.322587 0.570552 -vn -0.094883 -0.123582 0.987788 -vn -0.646545 -0.091367 0.757385 -vn -0.345102 -0.069683 0.935975 -vn -0.646545 -0.091367 0.757385 -vn -0.712964 -0.201500 0.671625 -vn -0.345102 -0.069683 0.935975 -vn -0.599921 -0.116149 0.791584 -vn -0.490471 -0.015544 0.871319 -vn -0.563982 -0.086031 0.821293 -vn -0.490471 -0.015544 0.871319 -vn -0.423338 0.053242 0.904406 -vn -0.563982 -0.086031 0.821293 -vn -0.298116 -0.370998 0.879481 -vn -0.390125 0.174215 0.904130 -vn -0.328776 -0.398405 0.856259 -vn -0.390125 0.174215 0.904130 -vn -0.491149 0.152390 0.857642 -vn -0.328776 -0.398405 0.856259 -vn -0.298116 -0.370998 0.879481 -vn -0.175494 -0.359003 0.916689 -vn -0.390125 0.174215 0.904130 -vn -0.175494 -0.359003 0.916689 -vn -0.230528 0.218428 0.948233 -vn -0.390125 0.174215 0.904130 -vn 0.000000 -0.331736 0.943372 -vn -0.000000 0.233936 0.972252 -vn -0.175494 -0.359003 0.916689 -vn -0.000000 0.233936 0.972252 -vn -0.230528 0.218428 0.948233 -vn -0.175494 -0.359003 0.916689 -vn -0.160782 -0.314716 0.935469 -vn -0.595966 0.010468 0.802941 -vn -0.094883 -0.123582 0.987788 -vn -0.595966 0.010468 0.802941 -vn -0.646545 -0.091367 0.757385 -vn -0.094883 -0.123582 0.987788 -vn -0.540099 0.136138 0.830518 -vn -0.595966 0.010468 0.802941 -vn -0.267556 -0.406753 0.873479 -vn -0.595966 0.010468 0.802941 -vn -0.160782 -0.314716 0.935469 -vn -0.267556 -0.406753 0.873479 -vn -0.513045 0.085684 0.854075 -vn -0.547185 0.096805 0.831395 -vn -0.491149 0.152390 0.857642 -vn -0.547185 0.096805 0.831395 -vn -0.540099 0.136138 0.830518 -vn -0.491149 0.152390 0.857642 -vn -0.513045 0.085684 0.854075 -vn -0.491149 0.152390 0.857642 -vn -0.385025 0.087869 0.918714 -vn -0.491149 0.152390 0.857642 -vn -0.390125 0.174215 0.904130 -vn -0.385025 0.087869 0.918714 -vn -0.385025 0.087869 0.918714 -vn -0.390125 0.174215 0.904130 -vn -0.208441 0.117321 0.970973 -vn -0.390125 0.174215 0.904130 -vn -0.230528 0.218428 0.948233 -vn -0.208441 0.117321 0.970973 -vn -0.208441 0.117321 0.970973 -vn -0.230528 0.218428 0.948233 -vn -0.000000 0.141983 0.989869 -vn -0.230528 0.218428 0.948233 -vn -0.000000 0.233936 0.972252 -vn -0.000000 0.141983 0.989869 -vn -0.129730 -0.990616 -0.043006 -vn -0.102818 -0.994359 -0.026060 -vn -0.072237 -0.977132 -0.199989 -vn -0.102818 -0.994359 -0.026060 -vn -0.116236 -0.981237 -0.153826 -vn -0.072237 -0.977132 -0.199989 -vn -0.238285 -0.957055 -0.165127 -vn -0.252549 -0.961967 -0.104105 -vn -0.244430 -0.956219 -0.160933 -vn -0.252549 -0.961967 -0.104105 -vn -0.257569 -0.961354 -0.097240 -vn -0.244430 -0.956219 -0.160933 -vn -0.252549 -0.961967 -0.104105 -vn -0.264099 -0.963244 -0.049115 -vn -0.257569 -0.961354 -0.097240 -vn -0.264099 -0.963244 -0.049115 -vn -0.275481 -0.960323 -0.043470 -vn -0.257569 -0.961354 -0.097240 -vn -0.238285 -0.957055 -0.165127 -vn -0.244430 -0.956219 -0.160933 -vn -0.286498 -0.934423 -0.211593 -vn -0.244430 -0.956219 -0.160933 -vn -0.219139 -0.948685 -0.227979 -vn -0.286498 -0.934423 -0.211593 -vn -0.793375 0.044918 0.607073 -vn -0.815336 0.129486 0.564323 -vn -0.736369 -0.009801 0.676509 -vn -0.815336 0.129486 0.564323 -vn -0.650778 0.155174 0.743242 -vn -0.736369 -0.009801 0.676509 -vn -0.856567 -0.147677 0.494454 -vn -0.793375 0.044918 0.607073 -vn -0.868708 -0.239350 0.433657 -vn -0.793375 0.044918 0.607073 -vn -0.736369 -0.009801 0.676509 -vn -0.868708 -0.239350 0.433657 -vn 0.000000 0.852896 0.522081 -vn -0.440416 0.756677 0.483190 -vn -0.000000 0.428954 0.903327 -vn -0.440416 0.756677 0.483190 -vn -0.301220 0.372748 0.877682 -vn -0.000000 0.428954 0.903327 -vn -0.693405 0.534698 0.482998 -vn -0.746744 0.367133 0.554606 -vn -0.436515 0.194333 0.878459 -vn -0.746744 0.367133 0.554606 -vn -0.577924 0.320947 0.750331 -vn -0.436515 0.194333 0.878459 -vn -0.839359 0.129821 0.527847 -vn -0.750336 0.293332 0.592412 -vn -0.804042 0.222216 0.551485 -vn -0.750336 0.293332 0.592412 -vn -0.795047 0.365673 0.483925 -vn -0.804042 0.222216 0.551485 -vn -0.804042 0.222216 0.551485 -vn -0.637787 0.094809 0.764355 -vn -0.725879 0.010493 0.687742 -vn -0.725879 0.010493 0.687742 -vn -0.839359 0.129821 0.527847 -vn -0.804042 0.222216 0.551485 -vn -0.815336 0.129486 0.564323 -vn -0.586431 0.081488 0.805890 -vn -0.650778 0.155174 0.743242 -vn -0.586431 0.081488 0.805890 -vn -0.583298 0.099182 0.806180 -vn -0.650778 0.155174 0.743242 -vn -0.423338 0.053242 0.904406 -vn -0.396273 0.237589 0.886859 -vn -0.328468 0.080050 0.941117 -vn -0.396273 0.237589 0.886859 -vn -0.332958 0.174510 0.926653 -vn -0.328468 0.080050 0.941117 -vn -0.328468 0.080050 0.941117 -vn -0.332958 0.174510 0.926653 -vn -0.069477 0.062895 0.995599 -vn -0.332958 0.174510 0.926653 -vn -0.176995 0.117973 0.977116 -vn -0.069477 0.062895 0.995599 -vn 0.102959 -0.125140 0.986782 -vn -0.156165 -0.047092 0.986608 -vn 0.231638 -0.421065 0.876954 -vn 0.072677 -0.707963 0.702500 -vn 0.231638 -0.421065 0.876954 -vn -0.077064 -0.547431 0.833295 -vn 0.231638 -0.421065 0.876954 -vn 0.054624 -0.259422 0.964218 -vn -0.077064 -0.547431 0.833295 -vn -0.138480 -0.732187 0.666877 -vn -0.086429 -0.753305 0.651967 -vn -0.247668 -0.520946 0.816869 -vn -0.086429 -0.753305 0.651967 -vn -0.212866 -0.594441 0.775453 -vn -0.247668 -0.520946 0.816869 -vn -0.078068 -0.775295 0.626756 -vn -0.138480 -0.732187 0.666877 -vn -0.142004 -0.600232 0.787119 -vn -0.138480 -0.732187 0.666877 -vn -0.247668 -0.520946 0.816869 -vn -0.142004 -0.600232 0.787119 -vn -0.000000 -0.773117 0.634263 -vn -0.078068 -0.775295 0.626756 -vn -0.000000 -0.616413 0.787423 -vn -0.078068 -0.775295 0.626756 -vn -0.142004 -0.600232 0.787119 -vn -0.000000 -0.616413 0.787423 -vn -0.069477 0.062895 0.995599 -vn -0.176995 0.117973 0.977116 -vn 0.102959 -0.125140 0.986782 -vn -0.176995 0.117973 0.977116 -vn -0.156165 -0.047092 0.986608 -vn 0.102959 -0.125140 0.986782 -vn -0.490471 -0.015544 0.871319 -vn -0.465480 0.198176 0.862586 -vn -0.423338 0.053242 0.904406 -vn -0.465480 0.198176 0.862586 -vn -0.396273 0.237589 0.886859 -vn -0.423338 0.053242 0.904406 -vn -0.650778 0.155174 0.743242 -vn -0.583298 0.099182 0.806180 -vn -0.558854 0.112881 0.821547 -vn -0.558854 0.112881 0.821547 -vn -0.583298 0.099182 0.806180 -vn -0.508398 -0.001751 0.861120 -vn -0.583298 0.099182 0.806180 -vn -0.524767 0.165762 0.834951 -vn -0.508398 -0.001751 0.861120 -vn 0.231638 -0.421065 0.876954 -vn -0.156165 -0.047092 0.986608 -vn 0.054624 -0.259422 0.964218 -vn -0.156165 -0.047092 0.986608 -vn 0.223344 -0.078069 0.971608 -vn 0.054624 -0.259422 0.964218 -vn -0.176995 0.117973 0.977116 -vn 0.116951 0.164914 0.979350 -vn -0.156165 -0.047092 0.986608 -vn 0.116951 0.164914 0.979350 -vn 0.223344 -0.078069 0.971608 -vn -0.156165 -0.047092 0.986608 -vn -0.332958 0.174510 0.926653 -vn -0.235209 0.242648 0.941169 -vn -0.176995 0.117973 0.977116 -vn -0.235209 0.242648 0.941169 -vn 0.116951 0.164914 0.979350 -vn -0.176995 0.117973 0.977116 -vn -0.396273 0.237589 0.886859 -vn -0.250798 0.356808 0.899882 -vn -0.332958 0.174510 0.926653 -vn -0.250798 0.356808 0.899882 -vn -0.235209 0.242648 0.941169 -vn -0.332958 0.174510 0.926653 -vn -0.465480 0.198176 0.862586 -vn -0.327185 0.359445 0.873927 -vn -0.396273 0.237589 0.886859 -vn -0.327185 0.359445 0.873927 -vn -0.250798 0.356808 0.899882 -vn -0.396273 0.237589 0.886859 -vn -0.375740 0.369738 0.849772 -vn -0.524767 0.165762 0.834951 -vn -0.476121 0.310210 0.822848 -vn -0.524767 0.165762 0.834951 -vn -0.583298 0.099182 0.806180 -vn -0.476121 0.310210 0.822848 -vn -0.586431 0.081488 0.805890 -vn -0.578472 0.274016 0.768300 -vn -0.583298 0.099182 0.806180 -vn -0.578472 0.274016 0.768300 -vn -0.476121 0.310210 0.822848 -vn -0.583298 0.099182 0.806180 -vn -0.637787 0.094809 0.764355 -vn -0.804042 0.222216 0.551485 -vn -0.701511 0.141462 0.698478 -vn -0.804042 0.222216 0.551485 -vn -0.693125 0.218098 0.687030 -vn -0.701511 0.141462 0.698478 -vn -0.795047 0.365673 0.483925 -vn -0.692277 0.290506 0.660575 -vn -0.804042 0.222216 0.551485 -vn -0.692277 0.290506 0.660575 -vn -0.693125 0.218098 0.687030 -vn -0.804042 0.222216 0.551485 -vn -0.746744 0.367133 0.554606 -vn -0.665438 0.371469 0.647459 -vn -0.795047 0.365673 0.483925 -vn -0.665438 0.371469 0.647459 -vn -0.692277 0.290506 0.660575 -vn -0.795047 0.365673 0.483925 -vn -0.746744 0.367133 0.554606 -vn -0.693405 0.534698 0.482998 -vn -0.665438 0.371469 0.647459 -vn -0.693405 0.534698 0.482998 -vn -0.565548 0.401311 0.720490 -vn -0.665438 0.371469 0.647459 -vn -0.440416 0.756677 0.483190 -vn 0.000000 0.852896 0.522081 -vn -0.395912 0.622565 0.675031 -vn 0.000000 0.852896 0.522081 -vn 0.000000 0.735528 0.677494 -vn -0.395912 0.622565 0.675031 -vn -0.692277 0.290506 0.660575 -vn -0.665438 0.371469 0.647459 -vn -0.492427 0.164830 0.854603 -vn -0.665438 0.371469 0.647459 -vn -0.511353 0.270647 0.815640 -vn -0.492427 0.164830 0.854603 -vn -0.665438 0.371469 0.647459 -vn -0.565548 0.401311 0.720490 -vn -0.511353 0.270647 0.815640 -vn -0.565548 0.401311 0.720490 -vn -0.410565 0.235886 0.880792 -vn -0.511353 0.270647 0.815640 -vn -0.395912 0.622565 0.675031 -vn 0.000000 0.735528 0.677494 -vn -0.283113 0.470702 0.835635 -vn 0.000000 0.735528 0.677494 -vn 0.000000 0.588858 0.808237 -vn -0.283113 0.470702 0.835635 -vn -0.646545 -0.091367 0.757385 -vn -0.693829 -0.131658 0.708002 -vn -0.712964 -0.201500 0.671625 -vn -0.693829 -0.131658 0.708002 -vn -0.739324 -0.227264 0.633838 -vn -0.712964 -0.201500 0.671625 -vn -0.267556 -0.406753 0.873479 -vn -0.328776 -0.398405 0.856259 -vn -0.540099 0.136138 0.830518 -vn -0.328776 -0.398405 0.856259 -vn -0.491149 0.152390 0.857642 -vn -0.540099 0.136138 0.830518 -vn -0.328776 -0.398405 0.856259 -vn -0.267556 -0.406753 0.873479 -vn -0.086429 -0.753305 0.651967 -vn -0.267556 -0.406753 0.873479 -vn 0.072677 -0.707963 0.702500 -vn -0.086429 -0.753305 0.651967 -vn -0.086429 -0.753305 0.651967 -vn 0.072677 -0.707963 0.702500 -vn -0.212866 -0.594441 0.775453 -vn 0.072677 -0.707963 0.702500 -vn -0.077064 -0.547431 0.833295 -vn -0.212866 -0.594441 0.775453 -vn -0.302568 -0.139599 -0.942849 -vn -0.292919 -0.140833 -0.945709 -vn -0.192392 -0.228822 -0.954267 -vn -0.292919 -0.140833 -0.945709 -vn -0.238326 -0.280305 -0.929855 -vn -0.192392 -0.228822 -0.954267 -vn 0.885111 0.090062 -0.456582 -vn 0.901202 0.095875 -0.422662 -vn 0.908319 0.101640 -0.405741 -vn 0.838070 0.099637 -0.536387 -vn 0.872698 0.061054 -0.484428 -vn 0.885111 0.090062 -0.456582 -vn 0.872698 0.061054 -0.484428 -vn 0.901202 0.095875 -0.422662 -vn 0.885111 0.090062 -0.456582 -vn 0.906363 0.121056 -0.404786 -vn 0.908319 0.101640 -0.405741 -vn 0.918398 0.104089 -0.381720 -vn 0.908319 0.101640 -0.405741 -vn 0.901202 0.095875 -0.422662 -vn 0.918398 0.104089 -0.381720 -vn 0.838271 0.058954 -0.542057 -vn 0.841805 0.021328 -0.539360 -vn 0.848484 0.011890 -0.529087 -vn -0.004213 -0.178993 0.983841 -vn -0.000875 -0.119271 0.992861 -vn -0.005068 -0.169127 0.985581 -vn -0.000875 -0.119271 0.992861 -vn 0.000283 -0.119211 0.992869 -vn -0.005068 -0.169127 0.985581 -vn 0.028557 -0.125072 0.991737 -vn 0.033619 -0.126186 0.991437 -vn 0.030091 -0.127525 0.991379 -vn 0.033619 -0.126186 0.991437 -vn 0.033272 -0.126422 0.991418 -vn 0.030091 -0.127525 0.991379 -vn 0.009534 -0.119049 0.992843 -vn 0.028557 -0.125072 0.991737 -vn 0.012070 -0.128801 0.991597 -vn 0.028557 -0.125072 0.991737 -vn 0.030091 -0.127525 0.991379 -vn 0.012070 -0.128801 0.991597 -vn -0.008610 -0.088195 0.996066 -vn 0.009534 -0.119049 0.992843 -vn -0.006816 -0.096394 0.995320 -vn 0.009534 -0.119049 0.992843 -vn 0.012070 -0.128801 0.991597 -vn -0.006816 -0.096394 0.995320 -vn -0.008610 -0.088195 0.996066 -vn -0.006816 -0.096394 0.995320 -vn 0.000000 -0.094600 0.995515 -vn -0.006816 -0.096394 0.995320 -vn 0.000000 -0.097825 0.995204 -vn 0.000000 -0.094600 0.995515 -vn -0.629564 -0.097579 0.770797 -vn -0.827590 -0.457878 0.324718 -vn -0.897861 -0.284137 0.336321 -vn -0.599921 -0.116149 0.791584 -vn -0.753614 -0.507019 0.418327 -vn -0.827590 -0.457878 0.324718 -vn -0.753614 -0.507019 0.418327 -vn -0.692347 -0.561281 0.453452 -vn -0.794821 -0.533487 0.289225 -vn -0.794821 -0.533487 0.289225 -vn -0.827590 -0.457878 0.324718 -vn -0.753614 -0.507019 0.418327 -vn -0.712964 -0.201500 0.671625 -vn -0.739324 -0.227264 0.633838 -vn -0.755254 -0.322587 0.570552 -vn -0.739324 -0.227264 0.633838 -vn -0.757093 -0.350156 0.551544 -vn -0.755254 -0.322587 0.570552 -vn -0.756897 -0.413234 0.506304 -vn -0.692347 -0.561281 0.453452 -vn -0.753614 -0.507019 0.418327 -vn -0.599921 -0.116149 0.791584 -vn -0.563982 -0.086031 0.821293 -vn -0.753614 -0.507019 0.418327 -vn -0.563982 -0.086031 0.821293 -vn -0.756897 -0.413234 0.506304 -vn -0.753614 -0.507019 0.418327 -vn -0.559636 0.486691 0.670775 -vn -0.275020 0.577380 0.768763 -vn -0.577924 0.320947 0.750331 -vn -0.275020 0.577380 0.768763 -vn -0.116849 0.176925 0.977263 -vn -0.577924 0.320947 0.750331 -vn -0.769637 0.335024 0.543524 -vn -0.559636 0.486691 0.670775 -vn -0.750336 0.293332 0.592412 -vn -0.559636 0.486691 0.670775 -vn -0.577924 0.320947 0.750331 -vn -0.750336 0.293332 0.592412 -vn -0.235209 0.242648 0.941169 -vn -0.517412 0.107566 0.848949 -vn 0.116951 0.164914 0.979350 -vn -0.250798 0.356808 0.899882 -vn -0.503238 0.171977 0.846862 -vn -0.235209 0.242648 0.941169 -vn -0.503238 0.171977 0.846862 -vn -0.517412 0.107566 0.848949 -vn -0.235209 0.242648 0.941169 -vn -0.327185 0.359445 0.873927 -vn -0.576598 0.119160 0.808292 -vn -0.250798 0.356808 0.899882 -vn -0.576598 0.119160 0.808292 -vn -0.503238 0.171977 0.846862 -vn -0.250798 0.356808 0.899882 -vn -0.476121 0.310210 0.822848 -vn -0.622967 0.010702 0.782175 -vn -0.375740 0.369738 0.849772 -vn -0.622967 0.010702 0.782175 -vn -0.613048 0.091494 0.784730 -vn -0.375740 0.369738 0.849772 -vn -0.622967 0.010702 0.782175 -vn -0.476121 0.310210 0.822848 -vn -0.578472 0.274016 0.768300 -vn -0.578472 0.274016 0.768300 -vn -0.600779 -0.009294 0.799361 -vn -0.622967 0.010702 0.782175 -vn -0.701511 0.141462 0.698478 -vn -0.693125 0.218098 0.687030 -vn -0.561167 0.016480 0.827539 -vn -0.693125 0.218098 0.687030 -vn -0.534016 0.096637 0.839934 -vn -0.561167 0.016480 0.827539 -vn -0.693125 0.218098 0.687030 -vn -0.692277 0.290506 0.660575 -vn -0.534016 0.096637 0.839934 -vn -0.692277 0.290506 0.660575 -vn -0.492427 0.164830 0.854603 -vn -0.534016 0.096637 0.839934 -vn -0.433159 0.872884 -0.224606 -vn -0.420776 0.879811 -0.221087 -vn 0.000000 0.965908 -0.258887 -vn -0.420776 0.879811 -0.221087 -vn -0.000000 0.965233 -0.261391 -vn 0.000000 0.965908 -0.258887 -vn -0.775173 0.531858 -0.340932 -vn -0.662547 0.655515 -0.362398 -vn -0.689916 0.626465 -0.362709 -vn -0.654905 -0.078622 0.751610 -vn -0.693829 -0.131658 0.708002 -vn -0.646545 -0.091367 0.757385 -vn -0.547185 0.096805 0.831395 -vn -0.580964 0.116968 0.805481 -vn -0.540099 0.136138 0.830518 -vn -0.580964 0.116968 0.805481 -vn -0.552822 0.127057 0.823556 -vn -0.540099 0.136138 0.830518 -vn -0.238326 -0.280305 -0.929855 -vn -0.413320 -0.375423 -0.829593 -vn -0.205507 -0.341339 -0.917199 -vn -0.740528 -0.552831 0.382095 -vn -0.897861 -0.284137 0.336321 -vn -0.794821 -0.533487 0.289225 -vn -0.740528 -0.552831 0.382095 -vn -0.825379 0.027816 0.563894 -vn -0.879103 -0.123735 0.460291 -vn -0.879103 -0.123735 0.460291 -vn -0.897861 -0.284137 0.336321 -vn -0.740528 -0.552831 0.382095 -vn -0.275481 -0.960323 -0.043470 -vn -0.264099 -0.963244 -0.049115 -vn -0.202615 -0.977155 -0.064149 -vn -0.264099 -0.963244 -0.049115 -vn -0.185655 -0.980160 -0.069422 -vn -0.202615 -0.977155 -0.064149 -vn -0.005068 -0.169127 0.985581 -vn -0.005265 -0.232431 0.972599 -vn -0.004213 -0.178993 0.983841 -vn -0.005265 -0.232431 0.972599 -vn -0.001215 -0.234994 0.971996 -vn -0.004213 -0.178993 0.983841 -vn -0.946101 -0.091808 0.310587 -vn -0.933835 -0.126242 0.334685 -vn -0.947651 -0.069522 0.311647 -vn 0.363064 -0.930250 0.053092 -vn 0.687639 -0.725988 0.009737 -vn 0.385532 -0.921257 0.051487 -vn 0.687639 -0.725988 0.009737 -vn 0.709098 -0.705084 0.006035 -vn 0.385532 -0.921257 0.051487 -vn 0.000000 -0.999654 0.026321 -vn 0.363064 -0.930250 0.053092 -vn 0.000000 -0.998690 0.051159 -vn 0.363064 -0.930250 0.053092 -vn 0.385532 -0.921257 0.051487 -vn 0.000000 -0.998690 0.051159 -vn 0.900186 -0.434841 0.024039 -vn 0.980425 -0.151730 0.125476 -vn 0.913375 -0.402926 0.058283 -vn 0.980425 -0.151730 0.125476 -vn 0.980184 -0.136733 0.143331 -vn 0.913375 -0.402926 0.058283 -vn 0.687639 -0.725988 0.009737 -vn 0.900186 -0.434841 0.024039 -vn 0.709098 -0.705084 0.006035 -vn 0.900186 -0.434841 0.024039 -vn 0.913375 -0.402926 0.058283 -vn 0.709098 -0.705084 0.006035 -vn 0.994612 -0.017356 0.102202 -vn 0.980184 -0.136733 0.143331 -vn 0.994065 -0.017268 0.107409 -vn 0.980184 -0.136733 0.143331 -vn 0.980425 -0.151730 0.125476 -vn 0.994065 -0.017268 0.107409 -vn 0.002828 -0.032587 -0.999465 -vn 0.000000 -0.031297 -0.999510 -vn 0.008149 -0.028624 -0.999557 -vn 0.000000 -0.031297 -0.999510 -vn 0.002828 -0.032587 -0.999465 -vn -0.002828 -0.032587 -0.999465 -vn -0.072237 -0.977132 -0.199989 -vn -0.116236 -0.981237 -0.153826 -vn -0.219139 -0.948685 -0.227979 -vn -0.116236 -0.981237 -0.153826 -vn -0.286498 -0.934423 -0.211593 -vn -0.219139 -0.948685 -0.227979 -vn 0.035271 -0.981040 -0.190571 -vn -0.035271 -0.981040 -0.190571 -vn -0.000000 -0.979515 -0.201370 -vn -0.823208 0.041906 0.566191 -vn -0.815336 0.129486 0.564323 -vn -0.877212 0.129258 0.462376 -vn -0.815336 0.129486 0.564323 -vn -0.793375 0.044918 0.607073 -vn -0.877212 0.129258 0.462376 -vn -0.605525 0.092770 0.790401 -vn -0.586431 0.081488 0.805890 -vn -0.823208 0.041906 0.566191 -vn -0.586431 0.081488 0.805890 -vn -0.815336 0.129486 0.564323 -vn -0.823208 0.041906 0.566191 -vn -0.676740 0.161393 0.718314 -vn -0.578472 0.274016 0.768300 -vn -0.605525 0.092770 0.790401 -vn -0.578472 0.274016 0.768300 -vn -0.586431 0.081488 0.805890 -vn -0.605525 0.092770 0.790401 -vn -0.375740 0.369738 0.849772 -vn -0.613048 0.091494 0.784730 -vn -0.327185 0.359445 0.873927 -vn -0.613048 0.091494 0.784730 -vn -0.576598 0.119160 0.808292 -vn -0.327185 0.359445 0.873927 -vn -0.524767 0.165762 0.834951 -vn -0.375740 0.369738 0.849772 -vn -0.465480 0.198176 0.862586 -vn -0.375740 0.369738 0.849772 -vn -0.327185 0.359445 0.873927 -vn -0.465480 0.198176 0.862586 -vn -0.508398 -0.001751 0.861120 -vn -0.524767 0.165762 0.834951 -vn -0.490471 -0.015544 0.871319 -vn -0.524767 0.165762 0.834951 -vn -0.465480 0.198176 0.862586 -vn -0.490471 -0.015544 0.871319 -vn -0.629564 -0.097579 0.770797 -vn -0.508398 -0.001751 0.861120 -vn -0.599921 -0.116149 0.791584 -vn -0.508398 -0.001751 0.861120 -vn -0.490471 -0.015544 0.871319 -vn -0.599921 -0.116149 0.791584 -vn -0.629564 -0.097579 0.770797 -vn -0.599921 -0.116149 0.791584 -vn -0.827590 -0.457878 0.324718 -vn -0.856567 -0.147677 0.494454 -vn -0.865777 -0.017836 0.500112 -vn -0.877212 0.129258 0.462376 -vn -0.877212 0.129258 0.462376 -vn -0.793375 0.044918 0.607073 -vn -0.856567 -0.147677 0.494454 -vn -0.946101 -0.091808 0.310587 -vn -0.947651 -0.069522 0.311647 -vn -0.921518 -0.135702 0.363854 -vn -0.885192 -0.082688 0.457819 -vn -0.856567 -0.147677 0.494454 -vn -0.921518 -0.135702 0.363854 -vn -0.856567 -0.147677 0.494454 -vn -0.868708 -0.239350 0.433657 -vn -0.921518 -0.135702 0.363854 -vn -0.868708 -0.239350 0.433657 -vn -0.899836 -0.220835 0.376201 -vn -0.921518 -0.135702 0.363854 -vn -0.329491 0.646994 0.687629 -vn 0.000001 0.672206 0.740364 -vn -0.275020 0.577380 0.768763 -vn 0.000001 0.672206 0.740364 -vn 0.000001 0.613691 0.789546 -vn -0.275020 0.577380 0.768763 -vn -0.630979 0.528195 0.568222 -vn -0.329491 0.646994 0.687629 -vn -0.559636 0.486691 0.670775 -vn -0.329491 0.646994 0.687629 -vn -0.275020 0.577380 0.768763 -vn -0.559636 0.486691 0.670775 -vn -0.829128 0.305413 0.468263 -vn -0.630979 0.528195 0.568222 -vn -0.769637 0.335024 0.543524 -vn -0.630979 0.528195 0.568222 -vn -0.559636 0.486691 0.670775 -vn -0.769637 0.335024 0.543524 -vn -0.903664 0.091600 0.418331 -vn -0.829128 0.305413 0.468263 -vn -0.874368 0.142892 0.463748 -vn -0.829128 0.305413 0.468263 -vn -0.769637 0.335024 0.543524 -vn -0.874368 0.142892 0.463748 -vn -0.874368 0.142892 0.463748 -vn -0.865777 -0.017836 0.500112 -vn -0.903664 0.091600 0.418331 -vn -0.903664 0.091600 0.418331 -vn -0.865777 -0.017836 0.500112 -vn -0.885192 -0.082688 0.457819 -vn -0.885192 -0.082688 0.457819 -vn -0.865777 -0.017836 0.500112 -vn -0.856567 -0.147677 0.494454 -vn -0.689916 0.626465 -0.362709 -vn -0.662547 0.655515 -0.362398 -vn -0.433159 0.872884 -0.224606 -vn -0.662547 0.655515 -0.362398 -vn -0.420776 0.879811 -0.221087 -vn -0.433159 0.872884 -0.224606 -vn -0.565548 0.401311 0.720490 -vn -0.395912 0.622565 0.675031 -vn -0.410565 0.235886 0.880792 -vn -0.395912 0.622565 0.675031 -vn -0.283113 0.470702 0.835635 -vn -0.410565 0.235886 0.880792 -vn -0.440416 0.756677 0.483190 -vn -0.395912 0.622565 0.675031 -vn -0.693405 0.534698 0.482998 -vn -0.395912 0.622565 0.675031 -vn -0.565548 0.401311 0.720490 -vn -0.693405 0.534698 0.482998 -vn -0.436515 0.194333 0.878459 -vn -0.301220 0.372748 0.877682 -vn -0.693405 0.534698 0.482998 -vn -0.301220 0.372748 0.877682 -vn -0.440416 0.756677 0.483190 -vn -0.693405 0.534698 0.482998 -vn -0.301220 0.372748 0.877682 -vn -0.436515 0.194333 0.878459 -vn -0.116849 0.176925 0.977263 -vn -0.436515 0.194333 0.878459 -vn -0.577924 0.320947 0.750331 -vn -0.116849 0.176925 0.977263 -vn 0.838070 0.099637 -0.536387 -vn 0.838271 0.058954 -0.542057 -vn 0.872698 0.061054 -0.484428 -vn 0.838271 0.058954 -0.542057 -vn 0.848484 0.011890 -0.529087 -vn 0.872698 0.061054 -0.484428 -vn -0.205507 -0.341339 -0.917199 -vn -0.178952 -0.332850 -0.925844 -vn -0.238326 -0.280305 -0.929855 -vn -0.178952 -0.332850 -0.925844 -vn -0.192392 -0.228822 -0.954267 -vn -0.238326 -0.280305 -0.929855 -vn -0.178952 -0.332850 -0.925844 -vn -0.205507 -0.341339 -0.917199 -vn -0.203431 -0.333613 -0.920499 -vn -0.205507 -0.341339 -0.917199 -vn -0.201666 -0.331943 -0.921490 -vn -0.203431 -0.333613 -0.920499 -vn -0.203431 -0.333613 -0.920499 -vn -0.201666 -0.331943 -0.921490 -vn -0.163755 -0.336084 -0.927487 -vn -0.201666 -0.331943 -0.921490 -vn -0.153812 -0.338505 -0.928308 -vn -0.163755 -0.336084 -0.927487 -vn 0.848484 0.011890 -0.529087 -vn 0.841805 0.021328 -0.539360 -vn 0.857799 0.017740 -0.513679 -vn 0.841805 0.021328 -0.539360 -vn 0.852988 -0.069459 -0.517289 -vn 0.857799 0.017740 -0.513679 -vn 0.857799 0.017740 -0.513679 -vn 0.852988 -0.069459 -0.517289 -vn 0.850491 -0.071994 -0.521040 -vn 0.850491 -0.071994 -0.521040 -vn 0.852988 -0.069459 -0.517289 -vn 0.846858 -0.092154 -0.523774 -vn 0.852988 -0.069459 -0.517289 -vn 0.847084 -0.090957 -0.523617 -vn 0.846858 -0.092154 -0.523774 -vn 0.846858 -0.092154 -0.523774 -vn 0.847084 -0.090957 -0.523617 -vn 0.856333 -0.079551 -0.510260 -vn 0.847084 -0.090957 -0.523617 -vn 0.858056 -0.079184 -0.507414 -vn 0.856333 -0.079551 -0.510260 -vn 0.000000 -0.932573 -0.360982 -vn 0.000000 -0.932573 -0.360982 -vn 0.000000 -0.953392 -0.301735 -vn 0.000000 -0.932573 -0.360982 -vn 0.000000 -0.953392 -0.301735 -vn 0.000000 -0.953392 -0.301735 -vn 0.000000 -0.972069 -0.234696 -vn 0.000000 -0.972069 -0.234696 -vn 0.000000 -0.976110 -0.217278 -vn 0.000000 -0.972069 -0.234696 -vn 0.000000 -0.976110 -0.217278 -vn 0.000000 -0.976110 -0.217278 -vn 0.000000 -0.953392 -0.301735 -vn 0.000000 -0.953392 -0.301735 -vn 0.000000 -0.972069 -0.234696 -vn 0.000000 -0.953392 -0.301735 -vn 0.000000 -0.972069 -0.234696 -vn 0.000000 -0.972069 -0.234696 -vn 0.000000 -0.264205 -0.964467 -vn 0.000000 -0.264205 -0.964467 -vn 0.000000 -0.264205 -0.964467 -vn 0.000000 -0.264205 -0.964467 -vn 0.000000 -0.264205 -0.964467 -vn 0.000000 -0.264205 -0.964467 -vn -0.478456 -0.790218 0.382931 -vn -0.276536 -0.885350 0.373742 -vn -0.740528 -0.552831 0.382095 -vn -0.740528 -0.552831 0.382095 -vn -0.794821 -0.533487 0.289225 -vn -0.590635 -0.714541 0.374944 -vn -0.750336 0.293332 0.592412 -vn -0.577924 0.320947 0.750331 -vn -0.795047 0.365673 0.483925 -vn -0.577924 0.320947 0.750331 -vn -0.746744 0.367133 0.554606 -vn -0.795047 0.365673 0.483925 -vn -0.646545 -0.091367 0.757385 -vn -0.595966 0.010468 0.802941 -vn -0.654905 -0.078622 0.751610 -vn -0.595966 0.010468 0.802941 -vn -0.645965 0.010516 0.763295 -vn -0.654905 -0.078622 0.751610 -vn -0.540099 0.136138 0.830518 -vn -0.552822 0.127057 0.823556 -vn -0.595966 0.010468 0.802941 -vn -0.552822 0.127057 0.823556 -vn -0.645965 0.010516 0.763295 -vn -0.595966 0.010468 0.802941 -vn -0.251850 0.142173 0.957266 -vn -0.148081 0.146979 0.977992 -vn -0.000000 0.162236 0.986752 -vn -0.148081 0.146979 0.977992 -vn 0.000000 0.141845 0.989889 -vn -0.000000 0.162236 0.986752 -vn -0.309238 0.165614 0.936453 -vn -0.258904 0.164100 0.951861 -vn -0.419722 0.109486 0.901025 -vn -0.419722 0.109486 0.901025 -vn -0.258904 0.164100 0.951861 -vn -0.251850 0.142173 0.957266 -vn -0.251850 0.142173 0.957266 -vn -0.258904 0.164100 0.951861 -vn -0.148081 0.146979 0.977992 -vn -0.419722 0.109486 0.901025 -vn -0.564812 0.045086 0.823987 -vn -0.612310 0.047672 0.789179 -vn -0.612310 0.047672 0.789179 -vn -0.606924 0.075892 0.791128 -vn -0.419722 0.109486 0.901025 -vn -0.419722 0.109486 0.901025 -vn -0.606924 0.075892 0.791128 -vn -0.543709 0.088666 0.834577 -vn -0.419722 0.109486 0.901025 -vn -0.543709 0.088666 0.834577 -vn -0.454197 0.114604 0.883499 -vn -0.454197 0.114604 0.883499 -vn -0.309238 0.165614 0.936453 -vn -0.419722 0.109486 0.901025 -vn -0.669690 0.002394 0.742637 -vn -0.564812 0.045086 0.823987 -vn -0.671572 0.000921 0.740939 -vn -0.671572 0.000921 0.740939 -vn -0.564812 0.045086 0.823987 -vn -0.643622 0.003589 0.765335 -vn -0.643622 0.003589 0.765335 -vn -0.564812 0.045086 0.823987 -vn -0.639893 0.000847 0.768464 -vn -0.612310 0.047672 0.789179 -vn -0.564812 0.045086 0.823987 -vn -0.636933 0.013998 0.770792 -vn -0.636933 0.013998 0.770792 -vn -0.564812 0.045086 0.823987 -vn -0.657122 0.006114 0.753760 -vn -0.564812 0.045086 0.823987 -vn -0.669690 0.002394 0.742637 -vn -0.657122 0.006114 0.753760 -vn -0.643622 0.003589 0.765335 -vn -0.639893 0.000847 0.768464 -vn -0.683680 -0.002210 0.729779 -vn -0.639893 0.000847 0.768464 -vn -0.627557 -0.013526 0.778453 -vn -0.683680 -0.002210 0.729779 -vn -0.683680 -0.002210 0.729779 -vn -0.627557 -0.013526 0.778453 -vn -0.640497 -0.013131 0.767849 -vn -0.667494 -0.004835 0.744600 -vn -0.558854 0.112881 0.821547 -vn -0.629564 -0.097579 0.770797 -vn -0.558854 0.112881 0.821547 -vn -0.508398 -0.001751 0.861120 -vn -0.629564 -0.097579 0.770797 -vn -0.897861 -0.284137 0.336321 -vn -0.872815 -0.299763 0.385144 -vn -0.629564 -0.097579 0.770797 -vn -0.629564 -0.097579 0.770797 -vn -0.872815 -0.299763 0.385144 -vn -0.667494 -0.004835 0.744600 -vn -0.600779 -0.009294 0.799361 -vn -0.578472 0.274016 0.768300 -vn -0.676740 0.161393 0.718314 -vn -0.676740 0.161393 0.718314 -vn -0.701511 0.141462 0.698478 -vn -0.561167 0.016480 0.827539 -vn -0.561167 0.016480 0.827539 -vn -0.600779 -0.009294 0.799361 -vn -0.676740 0.161393 0.718314 -vn -0.701511 0.141462 0.698478 -vn -0.676740 0.161393 0.718314 -vn -0.637787 0.094809 0.764355 -vn -0.676740 0.161393 0.718314 -vn -0.605525 0.092770 0.790401 -vn -0.637787 0.094809 0.764355 -vn -0.637787 0.094809 0.764355 -vn -0.605525 0.092770 0.790401 -vn -0.725879 0.010493 0.687742 -vn -0.605525 0.092770 0.790401 -vn -0.823208 0.041906 0.566191 -vn -0.725879 0.010493 0.687742 -vn -0.725879 0.010493 0.687742 -vn -0.823208 0.041906 0.566191 -vn -0.878719 0.118802 0.462319 -vn -0.823208 0.041906 0.566191 -vn -0.877212 0.129258 0.462376 -vn -0.878719 0.118802 0.462319 -vn -0.878719 0.118802 0.462319 -vn -0.877212 0.129258 0.462376 -vn -0.865777 -0.017836 0.500112 -vn -0.000875 -0.119271 0.992861 -vn 0.033272 -0.126422 0.991418 -vn 0.000283 -0.119211 0.992869 -vn 0.033272 -0.126422 0.991418 -vn 0.033619 -0.126186 0.991437 -vn 0.000283 -0.119211 0.992869 -vn 0.995493 -0.030523 0.089784 -vn 0.986612 -0.094408 0.132977 -vn 0.993894 -0.047100 0.099785 -vn -0.921518 -0.135702 0.363854 -vn -0.947651 -0.069522 0.311647 -vn -0.885192 -0.082688 0.457819 -vn -0.740528 -0.552831 0.382095 -vn -0.590635 -0.714541 0.374944 -vn -0.478456 -0.790218 0.382931 -vn -0.692347 -0.561281 0.453452 -vn -0.662695 -0.571305 0.484196 -vn -0.590635 -0.714541 0.374944 -vn -0.662695 -0.571305 0.484196 -vn -0.478456 -0.790218 0.382931 -vn -0.590635 -0.714541 0.374944 -vn -0.756897 -0.413234 0.506304 -vn -0.729157 -0.440006 0.524142 -vn -0.692347 -0.561281 0.453452 -vn -0.729157 -0.440006 0.524142 -vn -0.662695 -0.571305 0.484196 -vn -0.692347 -0.561281 0.453452 -vn -0.755254 -0.322587 0.570552 -vn -0.757093 -0.350156 0.551544 -vn -0.756897 -0.413234 0.506304 -vn -0.757093 -0.350156 0.551544 -vn -0.729157 -0.440006 0.524142 -vn -0.756897 -0.413234 0.506304 -vn 0.994065 -0.017268 0.107409 -vn 0.995493 -0.030523 0.089784 -vn 0.994612 -0.017356 0.102202 -vn 0.995493 -0.030523 0.089784 -vn 0.993894 -0.047100 0.099785 -vn 0.994612 -0.017356 0.102202 -vn -0.692347 -0.561281 0.453452 -vn -0.590635 -0.714541 0.374944 -vn -0.794821 -0.533487 0.289225 -vn -0.897861 -0.284137 0.336321 -vn -0.827590 -0.457878 0.324718 -vn -0.794821 -0.533487 0.289225 -vn -0.072237 -0.977132 -0.199989 -vn -0.219139 -0.948685 -0.227979 -vn -0.035271 -0.981040 -0.190571 -vn -0.219139 -0.948685 -0.227979 -vn -0.000000 -0.979515 -0.201370 -vn -0.035271 -0.981040 -0.190571 -vn -0.006740 -0.119147 0.992854 -vn -0.010643 -0.117305 0.993039 -vn 0.014744 -0.114681 0.993293 -vn -0.010643 -0.117305 0.993039 -vn 0.016403 -0.114530 0.993284 -vn 0.014744 -0.114681 0.993293 -vn -0.001677 -0.122098 0.992517 -vn -0.002947 -0.126501 0.991962 -vn -0.006740 -0.119147 0.992854 -vn -0.002947 -0.126501 0.991962 -vn -0.010643 -0.117305 0.993039 -vn -0.006740 -0.119147 0.992854 -vn 0.015048 -0.110728 0.993737 -vn -0.002947 -0.126501 0.991962 -vn 0.008436 -0.120558 0.992670 -vn -0.002947 -0.126501 0.991962 -vn -0.001677 -0.122098 0.992517 -vn 0.008436 -0.120558 0.992670 -vn 0.004324 -0.103474 0.994623 -vn 0.015048 -0.110728 0.993737 -vn 0.007501 -0.104044 0.994544 -vn 0.015048 -0.110728 0.993737 -vn 0.008436 -0.120558 0.992670 -vn 0.007501 -0.104044 0.994544 -vn 0.005018 -0.111652 0.993735 -vn 0.004324 -0.103474 0.994623 -vn 0.005159 -0.111410 0.993761 -vn 0.004324 -0.103474 0.994623 -vn 0.007501 -0.104044 0.994544 -vn 0.005159 -0.111410 0.993761 -vn -0.000000 -0.103656 0.994613 -vn 0.005018 -0.111652 0.993735 -vn 0.000000 -0.104054 0.994572 -vn 0.005018 -0.111652 0.993735 -vn 0.005159 -0.111410 0.993761 -vn 0.000000 -0.104054 0.994572 -vn -0.383264 0.917386 0.107289 -vn 0.000001 0.993140 0.116931 -vn -0.381628 0.918043 0.107501 -vn 0.000001 0.993140 0.116931 -vn -0.000000 0.993137 0.116961 -vn -0.381628 0.918043 0.107501 -vn -0.944421 0.326503 0.038270 -vn -0.944072 0.327512 0.038261 -vn -0.996158 0.087056 0.009500 -vn -0.944072 0.327512 0.038261 -vn -0.996136 0.087303 0.009553 -vn -0.996158 0.087056 0.009500 -vn -0.383264 0.917386 0.107289 -vn -0.381628 0.918043 0.107501 -vn -0.734851 0.673666 0.078540 -vn -0.381628 0.918043 0.107501 -vn -0.733828 0.674769 0.078632 -vn -0.734851 0.673666 0.078540 -vn -0.944421 0.326503 0.038270 -vn -0.734851 0.673666 0.078540 -vn -0.944072 0.327512 0.038261 -vn -0.734851 0.673666 0.078540 -vn -0.733828 0.674769 0.078632 -vn -0.944072 0.327512 0.038261 -vn 0.000000 -0.993771 -0.111439 -vn 0.000000 -0.993771 -0.111439 -vn -0.035271 -0.981040 -0.190571 -vn 0.000000 0.198064 0.980189 -vn 0.000000 -0.117199 0.993109 -vn 0.000000 0.198064 0.980189 -vn 0.000000 -0.117199 0.993109 -vn 0.000000 -0.117199 0.993109 -vn 0.000000 0.198064 0.980189 -vn 0.000000 -0.116642 0.993174 -vn 0.000000 -0.116642 0.993174 -vn 0.000000 -0.116649 0.993173 -vn 0.000000 -0.116642 0.993174 -vn 0.000000 -0.116649 0.993173 -vn 0.000000 -0.116649 0.993173 -vn 0.000000 -0.116648 0.993173 -vn 0.000000 -0.116648 0.993173 -vn 0.000000 -0.116628 0.993176 -vn 0.000000 -0.116648 0.993173 -vn 0.000000 -0.116628 0.993176 -vn 0.000000 -0.116628 0.993176 -vn -0.999999 0.000168 -0.001210 -vn -0.999999 0.000474 -0.001197 -vn -0.996136 0.087303 0.009553 -vn 0.000000 0.493608 0.869684 -vn 0.000000 0.493608 0.869684 -vn 0.000000 0.198064 0.980189 -vn 0.000000 0.493608 0.869684 -vn 0.000000 0.198064 0.980189 -vn 0.000000 0.198064 0.980189 -vn 0.000000 -0.714981 0.699144 -vn 0.000000 -0.714981 0.699144 -vn 0.000000 -0.441037 0.897489 -vn 0.000000 -0.714981 0.699144 -vn 0.000000 -0.441037 0.897489 -vn 0.000000 -0.441037 0.897489 -vn 0.000000 -0.116649 0.993173 -vn 0.000000 -0.441037 0.897489 -vn 0.000000 -0.116649 0.993173 -vn 0.000000 -0.441037 0.897489 -vn 0.000000 -0.441037 0.897489 -vn 0.000000 -0.116649 0.993173 -vn 0.000000 -0.116628 0.993176 -vn 0.000000 -0.116628 0.993176 -vn 0.000000 -0.116642 0.993174 -vn 0.000000 -0.116628 0.993176 -vn 0.000000 -0.116642 0.993174 -vn 0.000000 -0.116642 0.993174 -vn -0.999999 0.000474 -0.001197 -vn -0.999999 0.000168 -0.001210 -vn -0.999999 0.000133 -0.001444 -vn -0.999999 0.000474 -0.001197 -vn -0.996158 0.087056 0.009500 -vn -0.996136 0.087303 0.009553 -vn -1.000000 0.000059 -0.000503 -vn -0.999999 -0.000103 -0.001265 -vn -1.000000 0.000066 -0.000537 -vn -0.999999 0.000168 -0.001210 -vn -0.999999 -0.000103 -0.001265 -vn -0.999999 0.000133 -0.001444 -vn 0.000000 -0.116739 0.993163 -vn 0.000000 -0.116648 0.993173 -vn 0.000000 -0.116648 0.993173 -vn -0.999999 -0.000103 -0.001265 -vn -0.999999 0.000168 -0.001210 -vn -1.000000 0.000066 -0.000537 -vn -0.984694 0.174160 -0.006738 -vn -0.980089 0.198515 -0.004173 -vn -0.983212 0.180337 -0.027797 -vn -0.808708 -0.587341 -0.031976 -vn -0.494936 -0.863469 -0.097259 -vn -0.708309 -0.701790 -0.076086 -vn 0.339143 -0.505622 0.793302 -vn 0.299846 -0.516749 0.801912 -vn 0.182952 -0.354088 0.917143 -vn 0.182952 -0.354088 0.917143 -vn 0.299846 -0.516749 0.801912 -vn 0.154745 -0.355795 0.921664 -vn 0.182952 -0.354088 0.917143 -vn 0.154745 -0.355795 0.921664 -vn 0.116745 -0.319879 0.940238 -vn 0.116745 -0.319879 0.940238 -vn 0.154745 -0.355795 0.921664 -vn 0.109565 -0.318437 0.941591 -vn 0.109565 -0.318437 0.941591 -vn 0.131033 -0.317293 0.939231 -vn 0.116745 -0.319879 0.940238 -vn 0.116745 -0.319879 0.940238 -vn 0.131033 -0.317293 0.939231 -vn 0.138390 -0.332970 0.932727 -vn 0.067684 -0.219277 0.973312 -vn 0.144281 -0.209043 0.967204 -vn 0.071452 -0.215752 0.973830 -vn 0.071452 -0.215752 0.973830 -vn 0.144281 -0.209043 0.967204 -vn 0.158943 -0.205989 0.965560 -vn -0.000000 -0.227028 0.973888 -vn 0.067684 -0.219277 0.973312 -vn -0.000000 -0.224410 0.974495 -vn -0.000000 -0.224410 0.974495 -vn 0.067684 -0.219277 0.973312 -vn 0.071452 -0.215752 0.973830 -vn 0.138390 -0.332970 0.932727 -vn 0.142304 -0.333246 0.932039 -vn 0.149920 -0.347308 0.925690 -vn 0.149920 -0.347308 0.925690 -vn 0.142304 -0.333246 0.932039 -vn 0.161840 -0.334626 0.928350 -vn 0.161840 -0.334626 0.928350 -vn 0.142304 -0.333246 0.932039 -vn 0.166593 -0.330885 0.928850 -vn 0.191886 -0.210924 0.958484 -vn 0.196009 -0.235372 0.951935 -vn 0.196192 -0.207154 0.958434 -vn 0.196192 -0.207154 0.958434 -vn 0.196009 -0.235372 0.951935 -vn 0.196607 -0.228696 0.953438 -vn 0.178410 -0.306737 0.934924 -vn 0.188830 -0.293149 0.937234 -vn 0.196009 -0.235372 0.951935 -vn 0.196009 -0.235372 0.951935 -vn 0.188830 -0.293149 0.937234 -vn 0.196607 -0.228696 0.953438 -vn 0.345594 -0.929888 0.125990 -vn 0.390945 -0.918337 -0.061799 -vn 0.357049 -0.929812 0.089253 -vn 0.357049 -0.929812 0.089253 -vn 0.390945 -0.918337 -0.061799 -vn 0.396515 -0.915703 -0.065292 -vn 0.984334 -0.176055 0.009521 -vn 0.983848 -0.178923 0.005394 -vn 0.980679 -0.195518 0.006376 -vn 0.990796 -0.135356 0.001687 -vn 0.983848 -0.178923 0.005394 -vn 0.991086 -0.133014 0.007440 -vn 0.991086 -0.133014 0.007440 -vn 0.983848 -0.178923 0.005394 -vn 0.984334 -0.176055 0.009521 -vn 0.991086 -0.133014 0.007440 -vn 0.998589 0.052790 0.005722 -vn 0.990796 -0.135356 0.001687 -vn 0.990796 -0.135356 0.001687 -vn 0.998589 0.052790 0.005722 -vn 0.997021 0.077063 0.003255 -vn 0.095426 0.992875 0.071360 -vn 0.284211 0.955066 0.084101 -vn 0.083437 0.994889 0.056877 -vn 0.083437 0.994889 0.056877 -vn 0.284211 0.955066 0.084101 -vn 0.322783 0.944059 0.067556 -vn 0.000000 0.999116 0.042032 -vn 0.095426 0.992875 0.071360 -vn -0.000000 0.999216 0.039578 -vn -0.000000 0.999216 0.039578 -vn 0.095426 0.992875 0.071360 -vn 0.083437 0.994889 0.056877 -vn 0.993002 0.117935 0.006226 -vn 0.999247 0.038797 0.000740 -vn 0.996380 0.085006 0.000430 -vn 0.996380 0.085006 0.000430 -vn 0.999247 0.038797 0.000740 -vn 0.998947 0.045842 0.001757 -vn 0.615919 0.785318 0.062605 -vn 0.893410 0.448498 0.025842 -vn 0.682062 0.729639 0.049171 -vn 0.682062 0.729639 0.049171 -vn 0.893410 0.448498 0.025842 -vn 0.914969 0.402789 0.024342 -vn 0.893410 0.448498 0.025842 -vn 0.978147 0.207638 0.010723 -vn 0.914969 0.402789 0.024342 -vn 0.914969 0.402789 0.024342 -vn 0.978147 0.207638 0.010723 -vn 0.983245 0.182196 0.005792 -vn 0.756449 0.653385 0.029548 -vn 0.997021 0.077063 0.003255 -vn 0.823527 0.566803 0.023172 -vn 0.823527 0.566803 0.023172 -vn 0.997021 0.077063 0.003255 -vn 0.998589 0.052790 0.005722 -vn 0.363218 -0.788030 0.497072 -vn 0.354110 -0.803703 0.478192 -vn 0.339143 -0.505622 0.793302 -vn 0.339143 -0.505622 0.793302 -vn 0.354110 -0.803703 0.478192 -vn 0.299846 -0.516749 0.801912 -vn 0.161840 -0.334626 0.928350 -vn 0.166593 -0.330885 0.928850 -vn 0.178410 -0.306737 0.934924 -vn 0.178410 -0.306737 0.934924 -vn 0.166593 -0.330885 0.928850 -vn 0.188830 -0.293149 0.937234 -vn 0.978147 0.207638 0.010723 -vn 0.993002 0.117935 0.006226 -vn 0.983245 0.182196 0.005792 -vn 0.983245 0.182196 0.005792 -vn 0.993002 0.117935 0.006226 -vn 0.996380 0.085006 0.000430 -vn -0.993452 0.113575 -0.012418 -vn -0.993500 0.113826 0.000749 -vn -0.983596 0.179257 -0.020171 -vn -0.983596 0.179257 -0.020171 -vn -0.993500 0.113826 0.000749 -vn -0.984694 0.174160 -0.006738 -vn -0.993500 0.113826 0.000749 -vn -0.993452 0.113575 -0.012418 -vn -0.985935 -0.166960 -0.007524 -vn -0.985935 -0.166960 -0.007524 -vn -0.993452 0.113575 -0.012418 -vn -0.975625 -0.218711 -0.017944 -vn -0.324453 -0.809413 -0.489470 -vn -0.095583 -0.992659 -0.074102 -vn -0.119524 -0.861339 -0.493770 -vn -0.095583 -0.992659 -0.074102 -vn -0.000000 -0.997673 -0.068181 -vn -0.119524 -0.861339 -0.493770 -vn -0.000000 -0.997673 -0.068181 -vn 0.000000 -0.871316 -0.490722 -vn -0.119524 -0.861339 -0.493770 -vn -0.985935 -0.166960 -0.007524 -vn -0.975625 -0.218711 -0.017944 -vn -0.959190 -0.282414 -0.014033 -vn -0.959190 -0.282414 -0.014033 -vn -0.975625 -0.218711 -0.017944 -vn -0.965709 -0.258960 -0.018602 -vn -0.996490 -0.080699 -0.022271 -vn -0.998432 -0.055875 -0.003518 -vn -0.996882 -0.076594 -0.018986 -vn -0.996882 -0.076594 -0.018986 -vn -0.998432 -0.055875 -0.003518 -vn -0.997107 -0.075791 -0.005838 -vn -0.965301 -0.259102 -0.032545 -vn -0.969905 -0.243373 -0.007371 -vn -0.996490 -0.080699 -0.022271 -vn -0.996490 -0.080699 -0.022271 -vn -0.969905 -0.243373 -0.007371 -vn -0.998432 -0.055875 -0.003518 -vn -0.850012 -0.526176 -0.024864 -vn -0.969905 -0.243373 -0.007371 -vn -0.965301 -0.259102 -0.032545 -vn -0.969905 -0.243373 -0.007371 -vn -0.850012 -0.526176 -0.024864 -vn -0.808708 -0.587341 -0.031976 -vn -0.965301 -0.259102 -0.032545 -vn -0.791469 -0.609184 -0.049722 -vn -0.850012 -0.526176 -0.024864 -vn 0.914969 0.402789 0.024342 -vn 0.983245 0.182196 0.005792 -vn 0.945131 0.326041 0.020602 -vn -0.767409 -0.563943 0.305045 -vn -0.979545 -0.197391 -0.039099 -vn -0.772660 -0.348538 0.530583 -vn -0.772660 -0.348538 0.530583 -vn -0.979545 -0.197391 -0.039099 -vn -0.990615 -0.133182 -0.030719 -vn -0.755223 -0.652355 0.063808 -vn -0.973639 -0.218470 -0.065558 -vn -0.767409 -0.563943 0.305045 -vn -0.767409 -0.563943 0.305045 -vn -0.973639 -0.218470 -0.065558 -vn -0.979545 -0.197391 -0.039099 -vn -0.707233 -0.162804 0.687980 -vn -0.738957 0.055017 0.671503 -vn -0.985507 -0.169473 0.007393 -vn -0.738957 0.055017 0.671503 -vn -0.761618 0.252637 0.596751 -vn -0.985507 -0.169473 0.007393 -vn -0.997107 -0.075791 -0.005838 -vn -0.998432 -0.055875 -0.003518 -vn -0.775408 0.330567 0.538023 -vn -0.761618 0.252637 0.596751 -vn -0.998432 -0.055875 -0.003518 -vn -0.985507 -0.169473 0.007393 -vn -0.985935 -0.166960 -0.007524 -vn -0.959190 -0.282414 -0.014033 -vn -0.820751 0.061453 0.567972 -vn -0.820751 0.061453 0.567972 -vn -0.959190 -0.282414 -0.014033 -vn -0.804082 0.167348 0.570480 -vn -0.993500 0.113826 0.000749 -vn -0.985935 -0.166960 -0.007524 -vn -0.724913 0.292702 0.623560 -vn -0.724913 0.292702 0.623560 -vn -0.985935 -0.166960 -0.007524 -vn -0.820751 0.061453 0.567972 -vn -0.984694 0.174160 -0.006738 -vn -0.993500 0.113826 0.000749 -vn -0.771535 0.304529 0.558566 -vn -0.771535 0.304529 0.558566 -vn -0.993500 0.113826 0.000749 -vn -0.724913 0.292702 0.623560 -vn -0.980089 0.198515 -0.004173 -vn -0.984694 0.174160 -0.006738 -vn -0.740815 0.342903 0.577590 -vn -0.740815 0.342903 0.577590 -vn -0.984694 0.174160 -0.006738 -vn -0.771535 0.304529 0.558566 -vn 0.385018 -0.919892 -0.074557 -vn 0.396515 -0.915703 -0.065292 -vn 0.386712 -0.919150 -0.074949 -vn 0.386712 -0.919150 -0.074949 -vn 0.396515 -0.915703 -0.065292 -vn 0.390945 -0.918337 -0.061799 -vn 0.985997 -0.166579 0.007890 -vn 0.984334 -0.176055 0.009521 -vn 0.982751 -0.184689 0.009457 -vn 0.982751 -0.184689 0.009457 -vn 0.984334 -0.176055 0.009521 -vn 0.982479 -0.186010 0.011654 -vn 0.993671 -0.112316 0.001790 -vn 0.991086 -0.133014 0.007440 -vn 0.985997 -0.166579 0.007890 -vn 0.985997 -0.166579 0.007890 -vn 0.991086 -0.133014 0.007440 -vn 0.984334 -0.176055 0.009521 -vn 0.995237 0.097405 0.003889 -vn 0.998589 0.052790 0.005722 -vn 0.993671 -0.112316 0.001790 -vn 0.993671 -0.112316 0.001790 -vn 0.998589 0.052790 0.005722 -vn 0.991086 -0.133014 0.007440 -vn 0.998589 0.052790 0.005722 -vn 0.995237 0.097405 0.003889 -vn 0.823527 0.566803 0.023172 -vn 0.823527 0.566803 0.023172 -vn 0.995237 0.097405 0.003889 -vn 0.761245 0.647906 0.026911 -vn 0.574631 -0.446587 -0.685827 -vn 0.996550 0.082383 -0.010068 -vn 0.998947 0.045842 0.001757 -vn 0.082937 0.995311 0.049767 -vn 0.322783 0.944059 0.067556 -vn 0.135626 0.988292 0.069896 -vn 0.135626 0.988292 0.069896 -vn 0.322783 0.944059 0.067556 -vn 0.180265 0.982087 0.054868 -vn 0.180265 0.982087 0.054868 -vn 0.322783 0.944059 0.067556 -vn 0.429327 0.901377 0.056555 -vn 0.011871 0.999709 0.020995 -vn 0.083437 0.994889 0.056877 -vn 0.082937 0.995311 0.049767 -vn 0.000000 0.999970 0.007701 -vn -0.000000 0.999216 0.039578 -vn 0.011871 0.999709 0.020995 -vn 0.011871 0.999709 0.020995 -vn -0.000000 0.999216 0.039578 -vn 0.083437 0.994889 0.056877 -vn 0.363218 -0.788030 0.497072 -vn 0.345594 -0.929888 0.125990 -vn 0.354110 -0.803703 0.478192 -vn 0.354110 -0.803703 0.478192 -vn 0.345594 -0.929888 0.125990 -vn 0.357049 -0.929812 0.089253 -vn 0.982423 -0.186181 0.013505 -vn 0.982479 -0.186010 0.011654 -vn 0.984334 -0.176055 0.009521 -vn -0.983596 0.179257 -0.020171 -vn -0.984694 0.174160 -0.006738 -vn -0.984046 0.174020 -0.037009 -vn -0.959190 -0.282414 -0.014033 -vn -0.965709 -0.258960 -0.018602 -vn -0.997107 -0.075791 -0.005838 -vn -0.997107 -0.075791 -0.005838 -vn -0.965709 -0.258960 -0.018602 -vn -0.996882 -0.076594 -0.018986 -vn -0.959190 -0.282414 -0.014033 -vn -0.997107 -0.075791 -0.005838 -vn -0.804082 0.167348 0.570480 -vn -0.804082 0.167348 0.570480 -vn -0.997107 -0.075791 -0.005838 -vn -0.775408 0.330567 0.538023 -vn 0.138390 -0.332970 0.932727 -vn 0.131033 -0.317293 0.939231 -vn 0.134867 -0.315546 0.939277 -vn -0.999569 0.028846 0.005434 -vn -0.999550 0.029492 0.005516 -vn -0.998069 0.045238 0.042564 -vn -0.998069 0.045238 0.042564 -vn -0.999550 0.029492 0.005516 -vn -0.997809 0.049679 0.043688 -vn -0.998069 0.045238 0.042564 -vn -0.997809 0.049679 0.043688 -vn -0.995800 0.065592 0.063883 -vn -0.995800 0.065592 0.063883 -vn -0.997809 0.049679 0.043688 -vn -0.995888 0.066977 0.061000 -vn -0.507293 -0.858759 -0.072022 -vn -0.515410 -0.853105 -0.081018 -vn -0.811258 -0.584646 0.007064 -vn -0.811258 -0.584646 0.007064 -vn -0.515410 -0.853105 -0.081018 -vn -0.818825 -0.574042 0.001045 -vn -0.995708 0.084216 0.038390 -vn -0.992675 0.109002 0.052112 -vn -0.995703 0.084333 0.038251 -vn -0.995703 0.084333 0.038251 -vn -0.992675 0.109002 0.052112 -vn -0.992674 0.108503 0.053153 -vn -0.995703 0.084333 0.038251 -vn -0.999464 0.014411 0.029383 -vn -0.995708 0.084216 0.038390 -vn -0.995708 0.084216 0.038390 -vn -0.999464 0.014411 0.029383 -vn -0.999501 0.014175 0.028222 -vn -0.249117 -0.963466 -0.098359 -vn -0.247950 -0.964620 -0.089610 -vn -0.104406 -0.994097 -0.029509 -vn -0.104406 -0.994097 -0.029509 -vn -0.247950 -0.964620 -0.089610 -vn -0.106145 -0.993954 -0.028067 -vn -0.000000 -0.999979 -0.006475 -vn -0.104406 -0.994097 -0.029509 -vn -0.000000 -0.999971 -0.007637 -vn -0.000000 -0.999971 -0.007637 -vn -0.104406 -0.994097 -0.029509 -vn -0.106145 -0.993954 -0.028067 -vn -0.990700 -0.134435 0.020989 -vn -0.998261 -0.056077 0.018160 -vn -0.990656 -0.134478 0.022719 -vn -0.990656 -0.134478 0.022719 -vn -0.998261 -0.056077 0.018160 -vn -0.998293 -0.055357 0.018610 -vn -0.990700 -0.134435 0.020989 -vn -0.990656 -0.134478 0.022719 -vn -0.959183 -0.281844 0.023066 -vn -0.959183 -0.281844 0.023066 -vn -0.990656 -0.134478 0.022719 -vn -0.957430 -0.287103 0.029993 -vn -0.959183 -0.281844 0.023066 -vn -0.957430 -0.287103 0.029993 -vn -0.818825 -0.574042 0.001045 -vn -0.818825 -0.574042 0.001045 -vn -0.957430 -0.287103 0.029993 -vn -0.811258 -0.584646 0.007064 -vn -0.999569 0.028846 0.005434 -vn -0.969840 0.166099 0.178388 -vn -0.999550 0.029492 0.005516 -vn -0.999550 0.029492 0.005516 -vn -0.969840 0.166099 0.178388 -vn -0.994998 0.093231 -0.035887 -vn -0.994625 0.082784 0.062195 -vn -0.995800 0.065592 0.063883 -vn -0.994644 0.081683 0.063330 -vn -0.994644 0.081683 0.063330 -vn -0.995800 0.065592 0.063883 -vn -0.995888 0.066977 0.061000 -vn -0.992675 0.109002 0.052112 -vn -0.994625 0.082784 0.062195 -vn -0.992674 0.108503 0.053153 -vn -0.992674 0.108503 0.053153 -vn -0.994625 0.082784 0.062195 -vn -0.994644 0.081683 0.063330 -vn -0.999501 0.014175 0.028222 -vn -0.999464 0.014411 0.029383 -vn -0.998261 -0.056077 0.018160 -vn -0.998261 -0.056077 0.018160 -vn -0.999464 0.014411 0.029383 -vn -0.998293 -0.055357 0.018610 -vn -0.417566 0.902141 -0.108536 -vn -0.426749 0.902770 -0.053783 -vn -0.440343 0.896429 0.050135 -vn -0.440343 0.896429 0.050135 -vn -0.426749 0.902770 -0.053783 -vn -0.446303 0.893472 0.050214 -vn -0.448052 0.757634 -0.474595 -vn -0.446061 0.791914 -0.417015 -vn -0.417566 0.902141 -0.108536 -vn -0.417566 0.902141 -0.108536 -vn -0.446061 0.791914 -0.417015 -vn -0.426749 0.902770 -0.053783 -vn -0.319057 -0.035786 -0.947060 -vn -0.328251 -0.031289 -0.944072 -vn -0.404581 0.077599 -0.911204 -vn -0.404581 0.077599 -0.911204 -vn -0.328251 -0.031289 -0.944072 -vn -0.359800 0.075412 -0.929977 -vn -0.169298 0.324929 -0.930462 -vn -0.263657 0.363905 -0.893341 -vn -0.180314 0.325379 -0.928232 -vn -0.180314 0.325379 -0.928232 -vn -0.263657 0.363905 -0.893341 -vn -0.290602 0.358700 -0.887065 -vn -0.169298 0.324929 -0.930462 -vn -0.180314 0.325379 -0.928232 -vn -0.212363 0.301851 -0.929402 -vn -0.212363 0.301851 -0.929402 -vn -0.180314 0.325379 -0.928232 -vn -0.235126 0.317229 -0.918739 -vn -0.085991 0.008774 -0.996257 -vn -0.085479 -0.001567 -0.996339 -vn -0.212106 -0.072179 -0.974577 -vn -0.212106 -0.072179 -0.974577 -vn -0.085479 -0.001567 -0.996339 -vn -0.239693 -0.077290 -0.967767 -vn 0.000000 -0.057309 -0.998357 -vn -0.085479 -0.001567 -0.996339 -vn 0.000000 -0.050714 -0.998713 -vn 0.000000 -0.050714 -0.998713 -vn -0.085479 -0.001567 -0.996339 -vn -0.085991 0.008774 -0.996257 -vn -0.255352 0.293656 -0.921174 -vn -0.212363 0.301851 -0.929402 -vn -0.235126 0.317229 -0.918739 -vn -0.263699 0.309474 -0.913613 -vn -0.262790 0.310576 -0.913501 -vn -0.290612 0.326849 -0.899285 -vn -0.290612 0.326849 -0.899285 -vn -0.262790 0.310576 -0.913501 -vn -0.305134 0.314478 -0.898886 -vn -0.310643 0.219722 -0.924783 -vn -0.276780 0.226506 -0.933856 -vn -0.263699 0.309474 -0.913613 -vn -0.263699 0.309474 -0.913613 -vn -0.276780 0.226506 -0.933856 -vn -0.262790 0.310576 -0.913501 -vn -0.276780 0.226506 -0.933856 -vn -0.310643 0.219722 -0.924783 -vn -0.359800 0.075412 -0.929977 -vn -0.359800 0.075412 -0.929977 -vn -0.310643 0.219722 -0.924783 -vn -0.404581 0.077599 -0.911204 -vn -0.446303 0.893472 0.050214 -vn -0.415109 0.907407 0.065557 -vn -0.440343 0.896429 0.050135 -vn -0.440343 0.896429 0.050135 -vn -0.415109 0.907407 0.065557 -vn -0.410226 0.909524 0.066933 -vn -0.405249 0.503584 -0.763005 -vn -0.446061 0.791914 -0.417015 -vn -0.436406 0.498474 -0.749049 -vn -0.436406 0.498474 -0.749049 -vn -0.446061 0.791914 -0.417015 -vn -0.448052 0.757634 -0.474595 -vn -0.263657 0.363905 -0.893341 -vn -0.405249 0.503584 -0.763005 -vn -0.290602 0.358700 -0.887065 -vn -0.290602 0.358700 -0.887065 -vn -0.405249 0.503584 -0.763005 -vn -0.436406 0.498474 -0.749049 -vn -0.305134 0.314478 -0.898886 -vn -0.255352 0.293656 -0.921174 -vn -0.290612 0.326849 -0.899285 -vn -0.290612 0.326849 -0.899285 -vn -0.255352 0.293656 -0.921174 -vn -0.235126 0.317229 -0.918739 -vn -0.850012 -0.526176 -0.024864 -vn -0.791469 -0.609184 -0.049722 -vn -0.539402 -0.840642 -0.048634 -vn -0.539402 -0.840642 -0.048634 -vn -0.791469 -0.609184 -0.049722 -vn -0.488009 -0.871020 -0.056324 -vn 0.562710 0.825931 0.034560 -vn 0.541816 0.839771 0.034923 -vn 0.761245 0.647906 0.026911 -vn 0.761245 0.647906 0.026911 -vn 0.541816 0.839771 0.034923 -vn 0.823527 0.566803 0.023172 -vn 0.495577 0.867646 0.039930 -vn 0.756449 0.653385 0.029548 -vn 0.541816 0.839771 0.034923 -vn 0.541816 0.839771 0.034923 -vn 0.756449 0.653385 0.029548 -vn 0.823527 0.566803 0.023172 -vn 0.138390 -0.332970 0.932727 -vn 0.134867 -0.315546 0.939277 -vn 0.142304 -0.333246 0.932039 -vn 0.980679 -0.195518 0.006376 -vn 0.981678 -0.190277 0.010176 -vn 0.984334 -0.176055 0.009521 -vn 0.981678 -0.190277 0.010176 -vn 0.982423 -0.186181 0.013505 -vn 0.984334 -0.176055 0.009521 -vn -0.984694 0.174160 -0.006738 -vn -0.983212 0.180337 -0.027797 -vn -0.985848 0.161528 -0.044851 -vn -0.984694 0.174160 -0.006738 -vn -0.985848 0.161528 -0.044851 -vn -0.984046 0.174020 -0.037009 -vn 0.075421 -0.342512 -0.936481 -vn 0.088936 -0.352542 -0.931560 -vn 0.080619 -0.343276 -0.935768 -vn 0.080619 -0.343276 -0.935768 -vn 0.088936 -0.352542 -0.931560 -vn 0.094136 -0.352187 -0.931184 -vn 0.088936 -0.352542 -0.931560 -vn 0.110062 -0.360826 -0.926116 -vn 0.094136 -0.352187 -0.931184 -vn 0.094136 -0.352187 -0.931184 -vn 0.110062 -0.360826 -0.926116 -vn 0.115215 -0.359361 -0.926059 -vn 0.731212 -0.381836 -0.565270 -vn 0.099908 -0.581232 -0.807581 -vn 0.713582 -0.257949 -0.651354 -vn 0.713582 -0.257949 -0.651354 -vn 0.099908 -0.581232 -0.807581 -vn 0.071198 -0.408463 -0.909994 -vn 0.713582 -0.257949 -0.651354 -vn 0.071198 -0.408463 -0.909994 -vn 0.723566 -0.082382 -0.685321 -vn 0.723566 -0.082382 -0.685321 -vn 0.071198 -0.408463 -0.909994 -vn 0.051319 -0.202061 -0.978028 -vn 0.731212 -0.381836 -0.565270 -vn 0.574631 -0.446587 -0.685827 -vn 0.099908 -0.581232 -0.807581 -vn 0.099908 -0.581232 -0.807581 -vn 0.574631 -0.446587 -0.685827 -vn 0.108229 -0.493339 -0.863078 -vn 0.108229 -0.493339 -0.863078 -vn 0.092628 -0.376477 -0.921784 -vn 0.080619 -0.343276 -0.935768 -vn 0.080619 -0.343276 -0.935768 -vn 0.092628 -0.376477 -0.921784 -vn 0.075421 -0.342512 -0.936481 -vn 0.080859 -0.444705 -0.892020 -vn 0.092628 -0.376477 -0.921784 -vn 0.108229 -0.493339 -0.863078 -vn 0.574631 -0.446587 -0.685827 -vn 0.080859 -0.444705 -0.892020 -vn 0.108229 -0.493339 -0.863078 -vn 0.723566 -0.082382 -0.685321 -vn 0.051319 -0.202061 -0.978028 -vn 0.668540 0.161888 -0.725842 -vn 0.668540 0.161888 -0.725842 -vn 0.051319 -0.202061 -0.978028 -vn -0.006508 0.083612 -0.996477 -vn 0.000000 -0.871316 -0.490722 -vn -0.000000 -0.514402 -0.857549 -vn -0.119524 -0.861339 -0.493770 -vn -0.119524 -0.861339 -0.493770 -vn -0.000000 -0.514402 -0.857549 -vn -0.192801 -0.483418 -0.853894 -vn -0.476271 -0.348677 -0.807211 -vn -0.324453 -0.809413 -0.489470 -vn -0.192801 -0.483418 -0.853894 -vn -0.192801 -0.483418 -0.853894 -vn -0.324453 -0.809413 -0.489470 -vn -0.119524 -0.861339 -0.493770 -vn -0.879217 -0.280086 -0.385394 -vn -0.658652 -0.695759 -0.286526 -vn -0.702167 -0.425692 -0.570743 -vn -0.702167 -0.425692 -0.570743 -vn -0.658652 -0.695759 -0.286526 -vn -0.491332 -0.797984 -0.349020 -vn -0.658652 -0.695759 -0.286526 -vn -0.879217 -0.280086 -0.385394 -vn -0.833807 -0.528564 -0.159328 -vn -0.833807 -0.528564 -0.159328 -vn -0.879217 -0.280086 -0.385394 -vn -0.957276 -0.214865 -0.193535 -vn 0.446710 0.893463 0.046633 -vn 0.166799 0.985578 0.028524 -vn 0.429327 0.901377 0.056555 -vn 0.429327 0.901377 0.056555 -vn 0.166799 0.985578 0.028524 -vn 0.216363 0.975064 0.049360 -vn -0.324453 -0.809413 -0.489470 -vn -0.491332 -0.797984 -0.349020 -vn -0.253349 -0.964463 -0.075004 -vn -0.494936 -0.863469 -0.097259 -vn -0.491332 -0.797984 -0.349020 -vn -0.658652 -0.695759 -0.286526 -vn -0.956032 -0.272734 -0.107795 -vn -0.813515 -0.572091 -0.104428 -vn -0.957276 -0.214865 -0.193535 -vn -0.957276 -0.214865 -0.193535 -vn -0.813515 -0.572091 -0.104428 -vn -0.833807 -0.528564 -0.159328 -vn 0.429327 0.901377 0.056555 -vn 0.216363 0.975064 0.049360 -vn 0.180265 0.982087 0.054868 -vn -0.780359 -0.622831 -0.055866 -vn -0.944473 -0.323507 -0.057569 -vn -0.755223 -0.652355 0.063808 -vn -0.755223 -0.652355 0.063808 -vn -0.944473 -0.323507 -0.057569 -vn -0.973639 -0.218470 -0.065558 -vn -0.763261 0.075432 0.641672 -vn -0.759621 -0.099247 0.642749 -vn -0.998456 -0.051981 0.019606 -vn -0.998456 -0.051981 0.019606 -vn -0.759621 -0.099247 0.642749 -vn -0.997150 -0.075336 -0.004072 -vn -0.805391 0.217929 0.551228 -vn -0.763261 0.075432 0.641672 -vn -0.998707 -0.048248 0.015984 -vn -0.998707 -0.048248 0.015984 -vn -0.763261 0.075432 0.641672 -vn -0.998456 -0.051981 0.019606 -vn -0.775685 0.361202 0.517538 -vn -0.805391 0.217929 0.551228 -vn -0.999627 -0.020816 0.017698 -vn -0.999627 -0.020816 0.017698 -vn -0.805391 0.217929 0.551228 -vn -0.998707 -0.048248 0.015984 -vn -0.999627 -0.020816 0.017698 -vn -0.999782 0.020752 0.002261 -vn -0.775685 0.361202 0.517538 -vn -0.775685 0.361202 0.517538 -vn -0.999782 0.020752 0.002261 -vn -0.740592 0.322814 0.589333 -vn -0.999782 0.020752 0.002261 -vn -0.998303 0.058229 0.000632 -vn -0.740592 0.322814 0.589333 -vn -0.740592 0.322814 0.589333 -vn -0.998303 0.058229 0.000632 -vn -0.728818 0.284083 0.622994 -vn -0.773857 0.304856 0.555164 -vn -0.728818 0.284083 0.622994 -vn -0.990513 0.137395 0.002445 -vn -0.990513 0.137395 0.002445 -vn -0.728818 0.284083 0.622994 -vn -0.998303 0.058229 0.000632 -vn -0.738957 0.055017 0.671503 -vn -0.707233 -0.162804 0.687980 -vn -0.763261 0.075432 0.641672 -vn -0.763261 0.075432 0.641672 -vn -0.707233 -0.162804 0.687980 -vn -0.759621 -0.099247 0.642749 -vn -0.761618 0.252637 0.596751 -vn -0.738957 0.055017 0.671503 -vn -0.805391 0.217929 0.551228 -vn -0.805391 0.217929 0.551228 -vn -0.738957 0.055017 0.671503 -vn -0.763261 0.075432 0.641672 -vn -0.775408 0.330567 0.538023 -vn -0.761618 0.252637 0.596751 -vn -0.775685 0.361202 0.517538 -vn -0.775685 0.361202 0.517538 -vn -0.761618 0.252637 0.596751 -vn -0.805391 0.217929 0.551228 -vn -0.740592 0.322814 0.589333 -vn -0.804082 0.167348 0.570480 -vn -0.775685 0.361202 0.517538 -vn -0.775685 0.361202 0.517538 -vn -0.804082 0.167348 0.570480 -vn -0.775408 0.330567 0.538023 -vn -0.740592 0.322814 0.589333 -vn -0.820751 0.061453 0.567972 -vn -0.804082 0.167348 0.570480 -vn -0.724913 0.292702 0.623560 -vn -0.820751 0.061453 0.567972 -vn -0.728818 0.284083 0.622994 -vn -0.728818 0.284083 0.622994 -vn -0.820751 0.061453 0.567972 -vn -0.740592 0.322814 0.589333 -vn -0.773857 0.304856 0.555164 -vn -0.771535 0.304529 0.558566 -vn -0.728818 0.284083 0.622994 -vn -0.728818 0.284083 0.622994 -vn -0.771535 0.304529 0.558566 -vn -0.724913 0.292702 0.623560 -vn -0.771535 0.304529 0.558566 -vn -0.773857 0.304856 0.555164 -vn -0.740815 0.342903 0.577590 -vn -0.740815 0.342903 0.577590 -vn -0.773857 0.304856 0.555164 -vn -0.969840 0.166099 0.178388 -vn -0.759621 -0.099247 0.642749 -vn -0.772660 -0.348538 0.530583 -vn -0.997150 -0.075336 -0.004072 -vn -0.997150 -0.075336 -0.004072 -vn -0.772660 -0.348538 0.530583 -vn -0.990615 -0.133182 -0.030719 -vn -0.656028 -0.418182 0.628292 -vn -0.627242 -0.676188 0.386443 -vn -0.772660 -0.348538 0.530583 -vn -0.772660 -0.348538 0.530583 -vn -0.627242 -0.676188 0.386443 -vn -0.767409 -0.563943 0.305045 -vn 0.600495 0.443647 -0.665270 -vn 0.004398 0.419539 -0.907726 -vn 0.554377 0.702479 -0.446307 -vn 0.554377 0.702479 -0.446307 -vn 0.004398 0.419539 -0.907726 -vn 0.010368 0.800881 -0.598734 -vn 0.554377 0.702479 -0.446307 -vn 0.010368 0.800881 -0.598734 -vn 0.517246 0.846290 -0.127473 -vn 0.517246 0.846290 -0.127473 -vn 0.010368 0.800881 -0.598734 -vn 0.051864 0.975168 -0.215306 -vn -0.627242 -0.676188 0.386443 -vn -0.634100 -0.764086 0.118699 -vn -0.767409 -0.563943 0.305045 -vn -0.767409 -0.563943 0.305045 -vn -0.634100 -0.764086 0.118699 -vn -0.755223 -0.652355 0.063808 -vn -0.780359 -0.622831 -0.055866 -vn -0.755223 -0.652355 0.063808 -vn -0.634100 -0.764086 0.118699 -vn 0.517246 0.846290 -0.127473 -vn 0.051864 0.975168 -0.215306 -vn 0.494071 0.869415 -0.003328 -vn 0.494071 0.869415 -0.003328 -vn 0.051864 0.975168 -0.215306 -vn 0.145820 0.989051 -0.022703 -vn -0.707233 -0.162804 0.687980 -vn -0.656028 -0.418182 0.628292 -vn -0.759621 -0.099247 0.642749 -vn -0.759621 -0.099247 0.642749 -vn -0.656028 -0.418182 0.628292 -vn -0.772660 -0.348538 0.530583 -vn 0.668540 0.161888 -0.725842 -vn -0.006508 0.083612 -0.996477 -vn 0.600495 0.443647 -0.665270 -vn 0.600495 0.443647 -0.665270 -vn -0.006508 0.083612 -0.996477 -vn 0.004398 0.419539 -0.907726 -vn -0.923588 -0.380903 -0.043567 -vn -0.951043 -0.307690 -0.029046 -vn -0.985507 -0.169473 0.007393 -vn -0.833807 -0.528564 -0.159328 -vn -0.813515 -0.572091 -0.104428 -vn -0.708309 -0.701790 -0.076086 -vn -0.494936 -0.863469 -0.097259 -vn -0.808708 -0.587341 -0.031976 -vn -0.539402 -0.840642 -0.048634 -vn -0.994998 0.093231 -0.035887 -vn -0.969840 0.166099 0.178388 -vn -0.990513 0.137395 0.002445 -vn -0.990513 0.137395 0.002445 -vn -0.969840 0.166099 0.178388 -vn -0.773857 0.304856 0.555164 -vn 0.969531 0.242434 0.035143 -vn 0.984202 0.176837 0.008696 -vn 0.971231 0.238135 0.001538 -vn 0.984202 0.176837 0.008696 -vn 0.668540 0.161888 -0.725842 -vn 0.971231 0.238135 0.001538 -vn 0.668540 0.161888 -0.725842 -vn 0.600495 0.443647 -0.665270 -vn 0.971231 0.238135 0.001538 -vn 0.554377 0.702479 -0.446307 -vn 0.971231 0.238135 0.001538 -vn 0.600495 0.443647 -0.665270 -vn 0.967156 0.254168 -0.002830 -vn 0.969531 0.242434 0.035143 -vn 0.885029 0.465465 0.008081 -vn 0.885029 0.465465 0.008081 -vn 0.969531 0.242434 0.035143 -vn 0.932362 0.360030 0.032846 -vn 0.956121 0.292541 0.015885 -vn 0.844338 0.533959 0.044504 -vn 0.945131 0.326041 0.020602 -vn 0.945131 0.326041 0.020602 -vn 0.844338 0.533959 0.044504 -vn 0.789936 0.611456 0.046072 -vn 0.996550 0.082383 -0.010068 -vn 0.993936 0.109771 -0.006474 -vn 0.996380 0.085006 0.000430 -vn 0.993936 0.109771 -0.006474 -vn 0.989557 0.144091 0.003808 -vn 0.996380 0.085006 0.000430 -vn 0.996380 0.085006 0.000430 -vn 0.989557 0.144091 0.003808 -vn 0.983245 0.182196 0.005792 -vn 0.723566 -0.082382 -0.685321 -vn 0.995327 0.096478 -0.003944 -vn 0.713582 -0.257949 -0.651354 -vn 0.996550 0.082383 -0.010068 -vn 0.713582 -0.257949 -0.651354 -vn 0.993936 0.109771 -0.006474 -vn 0.713582 -0.257949 -0.651354 -vn 0.995327 0.096478 -0.003944 -vn 0.993936 0.109771 -0.006474 -vn 0.668540 0.161888 -0.725842 -vn 0.984202 0.176837 0.008696 -vn 0.723566 -0.082382 -0.685321 -vn 0.723566 -0.082382 -0.685321 -vn 0.984202 0.176837 0.008696 -vn 0.995327 0.096478 -0.003944 -vn 0.510928 0.859417 0.018820 -vn 0.453914 0.680417 0.575321 -vn 0.512047 0.858797 0.016581 -vn 0.512047 0.858797 0.016581 -vn 0.453914 0.680417 0.575321 -vn 0.449290 0.674456 0.585873 -vn 0.126933 0.991885 0.007160 -vn 0.135281 0.990653 -0.017479 -vn 0.173425 0.735723 -0.654703 -vn 0.173425 0.735723 -0.654703 -vn 0.135281 0.990653 -0.017479 -vn 0.182289 0.709418 -0.680806 -vn 0.178828 0.405350 -0.896500 -vn 0.173425 0.735723 -0.654703 -vn 0.182289 0.709418 -0.680806 -vn 0.453914 0.680417 0.575321 -vn 0.435398 0.431875 0.789881 -vn 0.449290 0.674456 0.585873 -vn 0.603657 0.376752 -0.702606 -vn 0.609064 0.605926 -0.511757 -vn 0.616263 0.596857 -0.513792 -vn 0.248653 0.725676 0.641534 -vn 0.274003 0.415746 0.867224 -vn 0.258900 0.717586 0.646561 -vn 0.126933 0.991885 0.007160 -vn 0.248653 0.725676 0.641534 -vn 0.135281 0.990653 -0.017479 -vn 0.135281 0.990653 -0.017479 -vn 0.248653 0.725676 0.641534 -vn 0.258900 0.717586 0.646561 -vn 0.510928 0.859417 0.018820 -vn 0.512047 0.858797 0.016581 -vn 0.609064 0.605926 -0.511757 -vn 0.609064 0.605926 -0.511757 -vn 0.512047 0.858797 0.016581 -vn 0.616263 0.596857 -0.513792 -vn 0.844338 0.533959 0.044504 -vn 0.956121 0.292541 0.015885 -vn 0.885029 0.465465 0.008081 -vn 0.885029 0.465465 0.008081 -vn 0.956121 0.292541 0.015885 -vn 0.967156 0.254168 -0.002830 -vn 0.494071 0.869415 -0.003328 -vn 0.145820 0.989051 -0.022703 -vn 0.446710 0.893463 0.046633 -vn 0.446710 0.893463 0.046633 -vn 0.145820 0.989051 -0.022703 -vn 0.166799 0.985578 0.028524 -vn -0.780359 -0.622831 -0.055866 -vn -0.813515 -0.572091 -0.104428 -vn -0.944473 -0.323507 -0.057569 -vn -0.944473 -0.323507 -0.057569 -vn -0.813515 -0.572091 -0.104428 -vn -0.956032 -0.272734 -0.107795 -vn 0.989557 0.144091 0.003808 -vn 0.983787 0.179160 0.008038 -vn 0.983245 0.182196 0.005792 -vn 0.956121 0.292541 0.015885 -vn 0.945131 0.326041 0.020602 -vn 0.983787 0.179160 0.008038 -vn 0.945131 0.326041 0.020602 -vn 0.983245 0.182196 0.005792 -vn 0.983787 0.179160 0.008038 -vn 0.713582 -0.257949 -0.651354 -vn 0.996550 0.082383 -0.010068 -vn 0.731212 -0.381836 -0.565270 -vn 0.996550 0.082383 -0.010068 -vn 0.574631 -0.446587 -0.685827 -vn 0.731212 -0.381836 -0.565270 -vn 0.996550 0.082383 -0.010068 -vn 0.996380 0.085006 0.000430 -vn 0.998947 0.045842 0.001757 -vn -0.998432 -0.055875 -0.003518 -vn -0.761618 0.252637 0.596751 -vn -0.775408 0.330567 0.538023 -vn -0.969905 -0.243373 -0.007371 -vn -0.923588 -0.380903 -0.043567 -vn -0.985507 -0.169473 0.007393 -vn -0.923588 -0.380903 -0.043567 -vn -0.969905 -0.243373 -0.007371 -vn -0.808708 -0.587341 -0.031976 -vn -0.998432 -0.055875 -0.003518 -vn -0.969905 -0.243373 -0.007371 -vn -0.985507 -0.169473 0.007393 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.885029 0.465465 0.008081 -vn 0.932362 0.360030 0.032846 -vn 0.494071 0.869415 -0.003328 -vn 0.494071 0.869415 -0.003328 -vn 0.932362 0.360030 0.032846 -vn 0.517246 0.846290 -0.127473 -vn 0.446710 0.893463 0.046633 -vn 0.844338 0.533959 0.044504 -vn 0.494071 0.869415 -0.003328 -vn 0.494071 0.869415 -0.003328 -vn 0.844338 0.533959 0.044504 -vn 0.885029 0.465465 0.008081 -vn 0.932362 0.360030 0.032846 -vn 0.969531 0.242434 0.035143 -vn 0.971231 0.238135 0.001538 -vn 0.554377 0.702479 -0.446307 -vn 0.932362 0.360030 0.032846 -vn 0.971231 0.238135 0.001538 -vn 0.932362 0.360030 0.032846 -vn 0.554377 0.702479 -0.446307 -vn 0.517246 0.846290 -0.127473 -vn 0.429327 0.901377 0.056555 -vn 0.789936 0.611456 0.046072 -vn 0.446710 0.893463 0.046633 -vn 0.446710 0.893463 0.046633 -vn 0.789936 0.611456 0.046072 -vn 0.844338 0.533959 0.044504 -vn 0.682062 0.729639 0.049171 -vn 0.914969 0.402789 0.024342 -vn 0.789936 0.611456 0.046072 -vn 0.789936 0.611456 0.046072 -vn 0.914969 0.402789 0.024342 -vn 0.945131 0.326041 0.020602 -vn 0.284211 0.955066 0.084101 -vn 0.615919 0.785318 0.062605 -vn 0.322783 0.944059 0.067556 -vn 0.322783 0.944059 0.067556 -vn 0.615919 0.785318 0.062605 -vn 0.682062 0.729639 0.049171 -vn 0.144281 -0.209043 0.967204 -vn 0.191886 -0.210924 0.958484 -vn 0.158943 -0.205989 0.965560 -vn 0.158943 -0.205989 0.965560 -vn 0.191886 -0.210924 0.958484 -vn 0.196192 -0.207154 0.958434 -vn -0.247950 -0.964620 -0.089610 -vn -0.249117 -0.963466 -0.098359 -vn -0.507293 -0.858759 -0.072022 -vn -0.507293 -0.858759 -0.072022 -vn -0.249117 -0.963466 -0.098359 -vn -0.515410 -0.853105 -0.081018 -vn -0.212106 -0.072179 -0.974577 -vn -0.239693 -0.077290 -0.967767 -vn -0.319057 -0.035786 -0.947060 -vn -0.319057 -0.035786 -0.947060 -vn -0.239693 -0.077290 -0.967767 -vn -0.328251 -0.031289 -0.944072 -vn -0.253470 -0.964963 -0.067819 -vn -0.253349 -0.964463 -0.075004 -vn -0.488009 -0.871020 -0.056324 -vn -0.488009 -0.871020 -0.056324 -vn -0.253349 -0.964463 -0.075004 -vn -0.539402 -0.840642 -0.048634 -vn 0.322783 0.944059 0.067556 -vn 0.682062 0.729639 0.049171 -vn 0.429327 0.901377 0.056555 -vn 0.429327 0.901377 0.056555 -vn 0.682062 0.729639 0.049171 -vn 0.789936 0.611456 0.046072 -vn -0.491332 -0.797984 -0.349020 -vn -0.494936 -0.863469 -0.097259 -vn -0.253349 -0.964463 -0.075004 -vn 0.322783 0.944059 0.067556 -vn 0.082937 0.995311 0.049767 -vn 0.083437 0.994889 0.056877 -vn -0.324453 -0.809413 -0.489470 -vn -0.476271 -0.348677 -0.807211 -vn -0.491332 -0.797984 -0.349020 -vn -0.491332 -0.797984 -0.349020 -vn -0.476271 -0.348677 -0.807211 -vn -0.702167 -0.425692 -0.570743 -vn -0.324453 -0.809413 -0.489470 -vn -0.253349 -0.964463 -0.075004 -vn -0.095583 -0.992659 -0.074102 -vn -0.095583 -0.992659 -0.074102 -vn -0.253349 -0.964463 -0.075004 -vn -0.253470 -0.964963 -0.067819 -vn -0.253349 -0.964463 -0.075004 -vn -0.494936 -0.863469 -0.097259 -vn -0.539402 -0.840642 -0.048634 -vn -0.833807 -0.528564 -0.159328 -vn -0.494936 -0.863469 -0.097259 -vn -0.658652 -0.695759 -0.286526 -vn -0.494936 -0.863469 -0.097259 -vn -0.833807 -0.528564 -0.159328 -vn -0.708309 -0.701790 -0.076086 -vn -0.708309 -0.701790 -0.076086 -vn -0.813515 -0.572091 -0.104428 -vn -0.745659 -0.659800 -0.093041 -vn -0.764602 -0.641682 -0.060234 -vn -0.813515 -0.572091 -0.104428 -vn -0.780359 -0.622831 -0.055866 -vn -0.813515 -0.572091 -0.104428 -vn -0.764602 -0.641682 -0.060234 -vn -0.745659 -0.659800 -0.093041 -vn -0.780359 -0.622831 -0.055866 -vn -0.634100 -0.764086 0.118699 -vn -0.764602 -0.641682 -0.060234 -vn -0.808708 -0.587341 -0.031976 -vn -0.850012 -0.526176 -0.024864 -vn -0.539402 -0.840642 -0.048634 -vn -0.708309 -0.701790 -0.076086 -vn -0.923588 -0.380903 -0.043567 -vn -0.808708 -0.587341 -0.031976 -vn -0.923588 -0.380903 -0.043567 -vn -0.708309 -0.701790 -0.076086 -vn -0.745659 -0.659800 -0.093041 -vn -0.745659 -0.659800 -0.093041 -vn -0.764602 -0.641682 -0.060234 -vn -0.923588 -0.380903 -0.043567 -vn -0.764602 -0.641682 -0.060234 -vn -0.951043 -0.307690 -0.029046 -vn -0.923588 -0.380903 -0.043567 -vn -0.634100 -0.764086 0.118699 -vn -0.951043 -0.307690 -0.029046 -vn -0.764602 -0.641682 -0.060234 -vn -0.951043 -0.307690 -0.029046 -vn -0.634100 -0.764086 0.118699 -vn -0.627242 -0.676188 0.386443 -vn -0.656028 -0.418182 0.628292 -vn -0.951043 -0.307690 -0.029046 -vn -0.627242 -0.676188 0.386443 -vn -0.707233 -0.162804 0.687980 -vn -0.951043 -0.307690 -0.029046 -vn -0.656028 -0.418182 0.628292 -vn -0.985507 -0.169473 0.007393 -vn -0.951043 -0.307690 -0.029046 -vn -0.707233 -0.162804 0.687980 -vn 0.984694 0.174160 -0.006738 -vn 0.983212 0.180337 -0.027797 -vn 0.980089 0.198515 -0.004173 -vn 0.808708 -0.587341 -0.031976 -vn 0.708309 -0.701790 -0.076086 -vn 0.494936 -0.863469 -0.097259 -vn -0.339143 -0.505622 0.793302 -vn -0.182952 -0.354088 0.917143 -vn -0.299846 -0.516749 0.801912 -vn -0.182952 -0.354088 0.917143 -vn -0.154745 -0.355795 0.921664 -vn -0.299846 -0.516749 0.801912 -vn -0.182952 -0.354088 0.917143 -vn -0.116745 -0.319879 0.940238 -vn -0.154745 -0.355795 0.921664 -vn -0.116745 -0.319879 0.940238 -vn -0.109565 -0.318437 0.941591 -vn -0.154745 -0.355795 0.921664 -vn -0.109565 -0.318437 0.941591 -vn -0.116745 -0.319879 0.940238 -vn -0.131033 -0.317293 0.939231 -vn -0.116745 -0.319879 0.940238 -vn -0.138390 -0.332971 0.932727 -vn -0.131033 -0.317293 0.939231 -vn -0.067684 -0.219277 0.973312 -vn -0.071452 -0.215752 0.973830 -vn -0.144281 -0.209043 0.967204 -vn -0.071452 -0.215752 0.973830 -vn -0.158943 -0.205989 0.965560 -vn -0.144281 -0.209043 0.967204 -vn -0.000000 -0.227028 0.973888 -vn -0.000000 -0.224410 0.974495 -vn -0.067684 -0.219277 0.973312 -vn -0.000000 -0.224410 0.974495 -vn -0.071452 -0.215752 0.973830 -vn -0.067684 -0.219277 0.973312 -vn -0.138390 -0.332971 0.932727 -vn -0.149920 -0.347308 0.925690 -vn -0.142304 -0.333246 0.932039 -vn -0.149920 -0.347308 0.925690 -vn -0.161840 -0.334626 0.928350 -vn -0.142304 -0.333246 0.932039 -vn -0.161840 -0.334626 0.928350 -vn -0.166593 -0.330885 0.928850 -vn -0.142304 -0.333246 0.932039 -vn -0.191886 -0.210924 0.958484 -vn -0.196192 -0.207154 0.958434 -vn -0.196009 -0.235372 0.951935 -vn -0.196192 -0.207154 0.958434 -vn -0.196607 -0.228696 0.953438 -vn -0.196009 -0.235372 0.951935 -vn -0.178410 -0.306737 0.934924 -vn -0.196009 -0.235372 0.951935 -vn -0.188830 -0.293149 0.937234 -vn -0.196009 -0.235372 0.951935 -vn -0.196607 -0.228696 0.953438 -vn -0.188830 -0.293149 0.937234 -vn -0.345594 -0.929888 0.125990 -vn -0.357049 -0.929812 0.089253 -vn -0.390945 -0.918337 -0.061799 -vn -0.357049 -0.929812 0.089253 -vn -0.396515 -0.915703 -0.065292 -vn -0.390945 -0.918337 -0.061799 -vn -0.984334 -0.176055 0.009521 -vn -0.980679 -0.195518 0.006376 -vn -0.983848 -0.178923 0.005394 -vn -0.990796 -0.135356 0.001687 -vn -0.991086 -0.133014 0.007440 -vn -0.983848 -0.178923 0.005394 -vn -0.991086 -0.133014 0.007440 -vn -0.984334 -0.176055 0.009521 -vn -0.983848 -0.178923 0.005394 -vn -0.991086 -0.133014 0.007440 -vn -0.990796 -0.135356 0.001687 -vn -0.998589 0.052790 0.005722 -vn -0.990796 -0.135356 0.001687 -vn -0.997021 0.077063 0.003255 -vn -0.998589 0.052790 0.005722 -vn -0.095426 0.992875 0.071360 -vn -0.083437 0.994889 0.056877 -vn -0.284211 0.955066 0.084101 -vn -0.083437 0.994889 0.056877 -vn -0.322783 0.944059 0.067556 -vn -0.284211 0.955066 0.084101 -vn 0.000000 0.999116 0.042032 -vn -0.000000 0.999216 0.039578 -vn -0.095426 0.992875 0.071360 -vn -0.000000 0.999216 0.039578 -vn -0.083437 0.994889 0.056877 -vn -0.095426 0.992875 0.071360 -vn -0.993002 0.117935 0.006226 -vn -0.996380 0.085006 0.000430 -vn -0.999247 0.038797 0.000740 -vn -0.996380 0.085006 0.000430 -vn -0.998947 0.045842 0.001757 -vn -0.999247 0.038797 0.000740 -vn -0.615919 0.785318 0.062605 -vn -0.682062 0.729639 0.049171 -vn -0.893410 0.448498 0.025842 -vn -0.682062 0.729639 0.049171 -vn -0.914969 0.402789 0.024342 -vn -0.893410 0.448498 0.025842 -vn -0.893410 0.448498 0.025842 -vn -0.914969 0.402789 0.024342 -vn -0.978147 0.207638 0.010723 -vn -0.914969 0.402789 0.024342 -vn -0.983245 0.182196 0.005792 -vn -0.978147 0.207638 0.010723 -vn -0.756449 0.653385 0.029548 -vn -0.823527 0.566803 0.023172 -vn -0.997021 0.077063 0.003255 -vn -0.823527 0.566803 0.023172 -vn -0.998589 0.052790 0.005722 -vn -0.997021 0.077063 0.003255 -vn -0.363218 -0.788030 0.497072 -vn -0.339143 -0.505622 0.793302 -vn -0.354110 -0.803703 0.478192 -vn -0.339143 -0.505622 0.793302 -vn -0.299846 -0.516749 0.801912 -vn -0.354110 -0.803703 0.478192 -vn -0.161840 -0.334626 0.928350 -vn -0.178410 -0.306737 0.934924 -vn -0.166593 -0.330885 0.928850 -vn -0.178410 -0.306737 0.934924 -vn -0.188830 -0.293149 0.937234 -vn -0.166593 -0.330885 0.928850 -vn -0.978147 0.207638 0.010723 -vn -0.983245 0.182196 0.005792 -vn -0.993002 0.117935 0.006226 -vn -0.983245 0.182196 0.005792 -vn -0.996380 0.085006 0.000430 -vn -0.993002 0.117935 0.006226 -vn 0.993452 0.113575 -0.012418 -vn 0.983596 0.179257 -0.020171 -vn 0.993500 0.113826 0.000749 -vn 0.983596 0.179257 -0.020171 -vn 0.984694 0.174160 -0.006738 -vn 0.993500 0.113826 0.000749 -vn 0.993500 0.113826 0.000749 -vn 0.985935 -0.166960 -0.007524 -vn 0.993452 0.113575 -0.012418 -vn 0.985935 -0.166960 -0.007524 -vn 0.975625 -0.218711 -0.017944 -vn 0.993452 0.113575 -0.012418 -vn 0.324453 -0.809413 -0.489470 -vn 0.119524 -0.861339 -0.493770 -vn 0.095583 -0.992659 -0.074102 -vn 0.095583 -0.992659 -0.074102 -vn 0.119524 -0.861339 -0.493770 -vn -0.000000 -0.997673 -0.068181 -vn -0.000000 -0.997673 -0.068181 -vn 0.119524 -0.861339 -0.493770 -vn 0.000000 -0.871316 -0.490722 -vn 0.985935 -0.166960 -0.007524 -vn 0.959190 -0.282414 -0.014033 -vn 0.975625 -0.218711 -0.017944 -vn 0.959190 -0.282414 -0.014033 -vn 0.965709 -0.258960 -0.018602 -vn 0.975625 -0.218711 -0.017944 -vn 0.996490 -0.080699 -0.022271 -vn 0.996882 -0.076594 -0.018986 -vn 0.998432 -0.055875 -0.003518 -vn 0.996882 -0.076594 -0.018986 -vn 0.997107 -0.075791 -0.005838 -vn 0.998432 -0.055875 -0.003518 -vn 0.965301 -0.259102 -0.032545 -vn 0.996490 -0.080699 -0.022271 -vn 0.969905 -0.243373 -0.007371 -vn 0.996490 -0.080699 -0.022271 -vn 0.998432 -0.055875 -0.003518 -vn 0.969905 -0.243373 -0.007371 -vn 0.850012 -0.526176 -0.024864 -vn 0.965301 -0.259102 -0.032545 -vn 0.969905 -0.243373 -0.007371 -vn 0.969905 -0.243373 -0.007371 -vn 0.808708 -0.587341 -0.031976 -vn 0.850012 -0.526176 -0.024864 -vn 0.965301 -0.259102 -0.032545 -vn 0.850012 -0.526176 -0.024864 -vn 0.791469 -0.609184 -0.049722 -vn -0.914969 0.402789 0.024342 -vn -0.945131 0.326041 0.020602 -vn -0.983245 0.182196 0.005792 -vn 0.767409 -0.563943 0.305045 -vn 0.772660 -0.348538 0.530583 -vn 0.979545 -0.197391 -0.039099 -vn 0.772660 -0.348538 0.530583 -vn 0.990615 -0.133182 -0.030719 -vn 0.979545 -0.197391 -0.039099 -vn 0.755223 -0.652355 0.063808 -vn 0.767409 -0.563943 0.305045 -vn 0.973639 -0.218470 -0.065558 -vn 0.767409 -0.563943 0.305045 -vn 0.979545 -0.197391 -0.039099 -vn 0.973639 -0.218470 -0.065558 -vn 0.707233 -0.162804 0.687980 -vn 0.985507 -0.169473 0.007393 -vn 0.738957 0.055017 0.671503 -vn 0.738957 0.055017 0.671503 -vn 0.985507 -0.169473 0.007393 -vn 0.761618 0.252637 0.596751 -vn 0.997107 -0.075791 -0.005838 -vn 0.775408 0.330567 0.538022 -vn 0.998432 -0.055875 -0.003518 -vn 0.761618 0.252637 0.596751 -vn 0.985507 -0.169473 0.007393 -vn 0.998432 -0.055875 -0.003518 -vn 0.985935 -0.166960 -0.007524 -vn 0.820751 0.061453 0.567972 -vn 0.959190 -0.282414 -0.014033 -vn 0.820751 0.061453 0.567972 -vn 0.804082 0.167348 0.570480 -vn 0.959190 -0.282414 -0.014033 -vn 0.993500 0.113826 0.000749 -vn 0.724913 0.292702 0.623560 -vn 0.985935 -0.166960 -0.007524 -vn 0.724913 0.292702 0.623560 -vn 0.820751 0.061453 0.567972 -vn 0.985935 -0.166960 -0.007524 -vn 0.984694 0.174160 -0.006738 -vn 0.771535 0.304529 0.558566 -vn 0.993500 0.113826 0.000749 -vn 0.771535 0.304529 0.558566 -vn 0.724913 0.292702 0.623560 -vn 0.993500 0.113826 0.000749 -vn 0.980089 0.198515 -0.004173 -vn 0.740815 0.342904 0.577590 -vn 0.984694 0.174160 -0.006738 -vn 0.740815 0.342904 0.577590 -vn 0.771535 0.304529 0.558566 -vn 0.984694 0.174160 -0.006738 -vn -0.385018 -0.919892 -0.074557 -vn -0.386712 -0.919150 -0.074949 -vn -0.396515 -0.915703 -0.065292 -vn -0.386712 -0.919150 -0.074949 -vn -0.390945 -0.918337 -0.061799 -vn -0.396515 -0.915703 -0.065292 -vn -0.985997 -0.166579 0.007890 -vn -0.982751 -0.184689 0.009457 -vn -0.984334 -0.176055 0.009521 -vn -0.982751 -0.184689 0.009457 -vn -0.982479 -0.186010 0.011654 -vn -0.984334 -0.176055 0.009521 -vn -0.993671 -0.112316 0.001790 -vn -0.985997 -0.166579 0.007890 -vn -0.991086 -0.133014 0.007440 -vn -0.985997 -0.166579 0.007890 -vn -0.984334 -0.176055 0.009521 -vn -0.991086 -0.133014 0.007440 -vn -0.995237 0.097405 0.003889 -vn -0.993671 -0.112316 0.001790 -vn -0.998589 0.052790 0.005722 -vn -0.993671 -0.112316 0.001790 -vn -0.991086 -0.133014 0.007440 -vn -0.998589 0.052790 0.005722 -vn -0.998589 0.052790 0.005722 -vn -0.823527 0.566803 0.023172 -vn -0.995237 0.097405 0.003889 -vn -0.823527 0.566803 0.023172 -vn -0.761245 0.647906 0.026911 -vn -0.995237 0.097405 0.003889 -vn -0.574631 -0.446587 -0.685827 -vn -0.998947 0.045842 0.001757 -vn -0.996550 0.082383 -0.010068 -vn -0.082937 0.995311 0.049767 -vn -0.135626 0.988292 0.069896 -vn -0.322783 0.944059 0.067556 -vn -0.135626 0.988292 0.069896 -vn -0.180265 0.982087 0.054868 -vn -0.322783 0.944059 0.067556 -vn -0.180265 0.982087 0.054868 -vn -0.429327 0.901377 0.056555 -vn -0.322783 0.944059 0.067556 -vn -0.011871 0.999709 0.020995 -vn -0.082937 0.995311 0.049767 -vn -0.083437 0.994889 0.056877 -vn 0.000000 0.999970 0.007701 -vn -0.011871 0.999709 0.020995 -vn -0.000000 0.999216 0.039578 -vn -0.011871 0.999709 0.020995 -vn -0.083437 0.994889 0.056877 -vn -0.000000 0.999216 0.039578 -vn -0.363218 -0.788030 0.497072 -vn -0.354110 -0.803703 0.478192 -vn -0.345594 -0.929888 0.125990 -vn -0.354110 -0.803703 0.478192 -vn -0.357049 -0.929812 0.089253 -vn -0.345594 -0.929888 0.125990 -vn -0.982423 -0.186181 0.013505 -vn -0.984334 -0.176055 0.009521 -vn -0.982479 -0.186010 0.011654 -vn 0.983596 0.179257 -0.020171 -vn 0.984046 0.174020 -0.037009 -vn 0.984694 0.174160 -0.006738 -vn 0.959190 -0.282414 -0.014033 -vn 0.997107 -0.075791 -0.005838 -vn 0.965709 -0.258960 -0.018602 -vn 0.997107 -0.075791 -0.005838 -vn 0.996882 -0.076594 -0.018986 -vn 0.965709 -0.258960 -0.018602 -vn 0.959190 -0.282414 -0.014033 -vn 0.804082 0.167348 0.570480 -vn 0.997107 -0.075791 -0.005838 -vn 0.804082 0.167348 0.570480 -vn 0.775408 0.330567 0.538022 -vn 0.997107 -0.075791 -0.005838 -vn -0.138390 -0.332971 0.932727 -vn -0.134867 -0.315546 0.939277 -vn -0.131033 -0.317293 0.939231 -vn 0.999569 0.028846 0.005434 -vn 0.998069 0.045238 0.042564 -vn 0.999550 0.029492 0.005516 -vn 0.998069 0.045238 0.042564 -vn 0.997809 0.049679 0.043688 -vn 0.999550 0.029492 0.005516 -vn 0.998069 0.045238 0.042564 -vn 0.995800 0.065592 0.063883 -vn 0.997809 0.049679 0.043688 -vn 0.995800 0.065592 0.063883 -vn 0.995888 0.066977 0.061000 -vn 0.997809 0.049679 0.043688 -vn 0.507293 -0.858759 -0.072022 -vn 0.811258 -0.584646 0.007064 -vn 0.515410 -0.853105 -0.081018 -vn 0.811258 -0.584646 0.007064 -vn 0.818825 -0.574042 0.001045 -vn 0.515410 -0.853105 -0.081018 -vn 0.995708 0.084216 0.038390 -vn 0.995703 0.084333 0.038251 -vn 0.992675 0.109002 0.052112 -vn 0.995703 0.084333 0.038251 -vn 0.992674 0.108503 0.053153 -vn 0.992675 0.109002 0.052112 -vn 0.995703 0.084333 0.038251 -vn 0.995708 0.084216 0.038390 -vn 0.999464 0.014411 0.029383 -vn 0.995708 0.084216 0.038390 -vn 0.999501 0.014175 0.028222 -vn 0.999464 0.014411 0.029383 -vn 0.249118 -0.963466 -0.098359 -vn 0.104406 -0.994097 -0.029509 -vn 0.247950 -0.964620 -0.089610 -vn 0.104406 -0.994097 -0.029509 -vn 0.106145 -0.993954 -0.028067 -vn 0.247950 -0.964620 -0.089610 -vn -0.000000 -0.999979 -0.006475 -vn -0.000000 -0.999971 -0.007637 -vn 0.104406 -0.994097 -0.029509 -vn -0.000000 -0.999971 -0.007637 -vn 0.106145 -0.993954 -0.028067 -vn 0.104406 -0.994097 -0.029509 -vn 0.990700 -0.134435 0.020989 -vn 0.990656 -0.134478 0.022719 -vn 0.998261 -0.056077 0.018160 -vn 0.990656 -0.134478 0.022719 -vn 0.998293 -0.055357 0.018610 -vn 0.998261 -0.056077 0.018160 -vn 0.990700 -0.134435 0.020989 -vn 0.959183 -0.281844 0.023066 -vn 0.990656 -0.134478 0.022719 -vn 0.959183 -0.281844 0.023066 -vn 0.957430 -0.287103 0.029993 -vn 0.990656 -0.134478 0.022719 -vn 0.959183 -0.281844 0.023066 -vn 0.818825 -0.574042 0.001045 -vn 0.957430 -0.287103 0.029993 -vn 0.818825 -0.574042 0.001045 -vn 0.811258 -0.584646 0.007064 -vn 0.957430 -0.287103 0.029993 -vn 0.999569 0.028846 0.005434 -vn 0.999550 0.029492 0.005516 -vn 0.969840 0.166099 0.178388 -vn 0.999550 0.029492 0.005516 -vn 0.994998 0.093231 -0.035887 -vn 0.969840 0.166099 0.178388 -vn 0.994625 0.082784 0.062195 -vn 0.994644 0.081683 0.063330 -vn 0.995800 0.065592 0.063883 -vn 0.994644 0.081683 0.063330 -vn 0.995888 0.066977 0.061000 -vn 0.995800 0.065592 0.063883 -vn 0.992675 0.109002 0.052112 -vn 0.992674 0.108503 0.053153 -vn 0.994625 0.082784 0.062195 -vn 0.992674 0.108503 0.053153 -vn 0.994644 0.081683 0.063330 -vn 0.994625 0.082784 0.062195 -vn 0.999501 0.014175 0.028222 -vn 0.998261 -0.056077 0.018160 -vn 0.999464 0.014411 0.029383 -vn 0.998261 -0.056077 0.018160 -vn 0.998293 -0.055357 0.018610 -vn 0.999464 0.014411 0.029383 -vn 0.417566 0.902141 -0.108536 -vn 0.440343 0.896429 0.050135 -vn 0.426749 0.902769 -0.053783 -vn 0.440343 0.896429 0.050135 -vn 0.446303 0.893472 0.050214 -vn 0.426749 0.902769 -0.053783 -vn 0.448052 0.757634 -0.474595 -vn 0.417566 0.902141 -0.108536 -vn 0.446061 0.791914 -0.417015 -vn 0.417566 0.902141 -0.108536 -vn 0.426749 0.902769 -0.053783 -vn 0.446061 0.791914 -0.417015 -vn 0.319057 -0.035786 -0.947060 -vn 0.404581 0.077599 -0.911204 -vn 0.328251 -0.031289 -0.944072 -vn 0.404581 0.077599 -0.911204 -vn 0.359800 0.075412 -0.929977 -vn 0.328251 -0.031289 -0.944072 -vn 0.169298 0.324929 -0.930462 -vn 0.180314 0.325379 -0.928232 -vn 0.263657 0.363905 -0.893341 -vn 0.180314 0.325379 -0.928232 -vn 0.290602 0.358700 -0.887065 -vn 0.263657 0.363905 -0.893341 -vn 0.169298 0.324929 -0.930462 -vn 0.212363 0.301851 -0.929402 -vn 0.180314 0.325379 -0.928232 -vn 0.212363 0.301851 -0.929402 -vn 0.235126 0.317229 -0.918739 -vn 0.180314 0.325379 -0.928232 -vn 0.085991 0.008774 -0.996257 -vn 0.212106 -0.072179 -0.974577 -vn 0.085479 -0.001567 -0.996339 -vn 0.212106 -0.072179 -0.974577 -vn 0.239693 -0.077290 -0.967767 -vn 0.085479 -0.001567 -0.996339 -vn 0.000000 -0.057309 -0.998357 -vn 0.000000 -0.050714 -0.998713 -vn 0.085479 -0.001567 -0.996339 -vn 0.000000 -0.050714 -0.998713 -vn 0.085991 0.008774 -0.996257 -vn 0.085479 -0.001567 -0.996339 -vn 0.255352 0.293656 -0.921174 -vn 0.235126 0.317229 -0.918739 -vn 0.212363 0.301851 -0.929402 -vn 0.263699 0.309474 -0.913613 -vn 0.290613 0.326849 -0.899285 -vn 0.262790 0.310576 -0.913501 -vn 0.290613 0.326849 -0.899285 -vn 0.305134 0.314478 -0.898886 -vn 0.262790 0.310576 -0.913501 -vn 0.310643 0.219722 -0.924783 -vn 0.263699 0.309474 -0.913613 -vn 0.276780 0.226506 -0.933856 -vn 0.263699 0.309474 -0.913613 -vn 0.262790 0.310576 -0.913501 -vn 0.276780 0.226506 -0.933856 -vn 0.276780 0.226506 -0.933856 -vn 0.359800 0.075412 -0.929977 -vn 0.310643 0.219722 -0.924783 -vn 0.359800 0.075412 -0.929977 -vn 0.404581 0.077599 -0.911204 -vn 0.310643 0.219722 -0.924783 -vn 0.446303 0.893472 0.050214 -vn 0.440343 0.896429 0.050135 -vn 0.415109 0.907407 0.065557 -vn 0.440343 0.896429 0.050135 -vn 0.410226 0.909524 0.066933 -vn 0.415109 0.907407 0.065557 -vn 0.405249 0.503584 -0.763005 -vn 0.436406 0.498474 -0.749049 -vn 0.446061 0.791914 -0.417015 -vn 0.436406 0.498474 -0.749049 -vn 0.448052 0.757634 -0.474595 -vn 0.446061 0.791914 -0.417015 -vn 0.263657 0.363905 -0.893341 -vn 0.290602 0.358700 -0.887065 -vn 0.405249 0.503584 -0.763005 -vn 0.290602 0.358700 -0.887065 -vn 0.436406 0.498474 -0.749049 -vn 0.405249 0.503584 -0.763005 -vn 0.305134 0.314478 -0.898886 -vn 0.290613 0.326849 -0.899285 -vn 0.255352 0.293656 -0.921174 -vn 0.290613 0.326849 -0.899285 -vn 0.235126 0.317229 -0.918739 -vn 0.255352 0.293656 -0.921174 -vn 0.850012 -0.526176 -0.024864 -vn 0.539402 -0.840642 -0.048634 -vn 0.791469 -0.609184 -0.049722 -vn 0.539402 -0.840642 -0.048634 -vn 0.488009 -0.871020 -0.056324 -vn 0.791469 -0.609184 -0.049722 -vn -0.562710 0.825931 0.034560 -vn -0.761245 0.647906 0.026911 -vn -0.541816 0.839771 0.034923 -vn -0.761245 0.647906 0.026911 -vn -0.823527 0.566803 0.023172 -vn -0.541816 0.839771 0.034923 -vn -0.495577 0.867646 0.039930 -vn -0.541816 0.839771 0.034923 -vn -0.756449 0.653385 0.029548 -vn -0.541816 0.839771 0.034923 -vn -0.823527 0.566803 0.023172 -vn -0.756449 0.653385 0.029548 -vn -0.138390 -0.332971 0.932727 -vn -0.142304 -0.333246 0.932039 -vn -0.134867 -0.315546 0.939277 -vn -0.980679 -0.195518 0.006376 -vn -0.984334 -0.176055 0.009521 -vn -0.981678 -0.190277 0.010176 -vn -0.981678 -0.190277 0.010176 -vn -0.984334 -0.176055 0.009521 -vn -0.982423 -0.186181 0.013505 -vn 0.984694 0.174160 -0.006738 -vn 0.985848 0.161528 -0.044851 -vn 0.983212 0.180337 -0.027797 -vn 0.984694 0.174160 -0.006738 -vn 0.984046 0.174020 -0.037009 -vn 0.985848 0.161528 -0.044851 -vn -0.075421 -0.342512 -0.936481 -vn -0.080619 -0.343276 -0.935768 -vn -0.088936 -0.352542 -0.931560 -vn -0.080619 -0.343276 -0.935768 -vn -0.094136 -0.352187 -0.931184 -vn -0.088936 -0.352542 -0.931560 -vn -0.088936 -0.352542 -0.931560 -vn -0.094136 -0.352187 -0.931184 -vn -0.110062 -0.360826 -0.926116 -vn -0.094136 -0.352187 -0.931184 -vn -0.115215 -0.359361 -0.926059 -vn -0.110062 -0.360826 -0.926116 -vn -0.731212 -0.381836 -0.565270 -vn -0.713582 -0.257949 -0.651354 -vn -0.099908 -0.581232 -0.807581 -vn -0.713582 -0.257949 -0.651354 -vn -0.071198 -0.408463 -0.909994 -vn -0.099908 -0.581232 -0.807581 -vn -0.713582 -0.257949 -0.651354 -vn -0.723566 -0.082382 -0.685321 -vn -0.071198 -0.408463 -0.909994 -vn -0.723566 -0.082382 -0.685321 -vn -0.051319 -0.202061 -0.978028 -vn -0.071198 -0.408463 -0.909994 -vn -0.731212 -0.381836 -0.565270 -vn -0.099908 -0.581232 -0.807581 -vn -0.574631 -0.446587 -0.685827 -vn -0.099908 -0.581232 -0.807581 -vn -0.108229 -0.493339 -0.863078 -vn -0.574631 -0.446587 -0.685827 -vn -0.108229 -0.493339 -0.863078 -vn -0.080619 -0.343276 -0.935768 -vn -0.092628 -0.376477 -0.921784 -vn -0.080619 -0.343276 -0.935768 -vn -0.075421 -0.342512 -0.936481 -vn -0.092628 -0.376477 -0.921784 -vn -0.080859 -0.444705 -0.892020 -vn -0.108229 -0.493339 -0.863078 -vn -0.092628 -0.376477 -0.921784 -vn -0.574631 -0.446587 -0.685827 -vn -0.108229 -0.493339 -0.863078 -vn -0.080859 -0.444705 -0.892020 -vn -0.723566 -0.082382 -0.685321 -vn -0.668540 0.161888 -0.725842 -vn -0.051319 -0.202061 -0.978028 -vn -0.668540 0.161888 -0.725842 -vn 0.006508 0.083612 -0.996477 -vn -0.051319 -0.202061 -0.978028 -vn 0.000000 -0.871316 -0.490722 -vn 0.119524 -0.861339 -0.493770 -vn -0.000000 -0.514402 -0.857549 -vn 0.119524 -0.861339 -0.493770 -vn 0.192801 -0.483418 -0.853894 -vn -0.000000 -0.514402 -0.857549 -vn 0.476271 -0.348677 -0.807211 -vn 0.192801 -0.483418 -0.853894 -vn 0.324453 -0.809413 -0.489470 -vn 0.192801 -0.483418 -0.853894 -vn 0.119524 -0.861339 -0.493770 -vn 0.324453 -0.809413 -0.489470 -vn 0.879217 -0.280086 -0.385394 -vn 0.702167 -0.425693 -0.570743 -vn 0.658652 -0.695759 -0.286526 -vn 0.702167 -0.425693 -0.570743 -vn 0.491332 -0.797984 -0.349020 -vn 0.658652 -0.695759 -0.286526 -vn 0.658652 -0.695759 -0.286526 -vn 0.833807 -0.528564 -0.159328 -vn 0.879217 -0.280086 -0.385394 -vn 0.833807 -0.528564 -0.159328 -vn 0.957276 -0.214865 -0.193535 -vn 0.879217 -0.280086 -0.385394 -vn -0.446710 0.893463 0.046633 -vn -0.429327 0.901377 0.056555 -vn -0.166799 0.985578 0.028524 -vn -0.429327 0.901377 0.056555 -vn -0.216363 0.975064 0.049360 -vn -0.166799 0.985578 0.028524 -vn 0.324453 -0.809413 -0.489470 -vn 0.253349 -0.964463 -0.075004 -vn 0.491332 -0.797984 -0.349020 -vn 0.494936 -0.863469 -0.097259 -vn 0.658652 -0.695759 -0.286526 -vn 0.491332 -0.797984 -0.349020 -vn 0.956032 -0.272734 -0.107795 -vn 0.957276 -0.214865 -0.193535 -vn 0.813515 -0.572091 -0.104428 -vn 0.957276 -0.214865 -0.193535 -vn 0.833807 -0.528564 -0.159328 -vn 0.813515 -0.572091 -0.104428 -vn -0.429327 0.901377 0.056555 -vn -0.180265 0.982087 0.054868 -vn -0.216363 0.975064 0.049360 -vn 0.780359 -0.622831 -0.055866 -vn 0.755223 -0.652355 0.063808 -vn 0.944473 -0.323507 -0.057569 -vn 0.755223 -0.652355 0.063808 -vn 0.973639 -0.218470 -0.065558 -vn 0.944473 -0.323507 -0.057569 -vn 0.763261 0.075432 0.641672 -vn 0.998456 -0.051981 0.019606 -vn 0.759620 -0.099247 0.642749 -vn 0.998456 -0.051981 0.019606 -vn 0.997150 -0.075336 -0.004072 -vn 0.759620 -0.099247 0.642749 -vn 0.805391 0.217929 0.551228 -vn 0.998707 -0.048248 0.015984 -vn 0.763261 0.075432 0.641672 -vn 0.998707 -0.048248 0.015984 -vn 0.998456 -0.051981 0.019606 -vn 0.763261 0.075432 0.641672 -vn 0.775685 0.361202 0.517538 -vn 0.999627 -0.020816 0.017698 -vn 0.805391 0.217929 0.551228 -vn 0.999627 -0.020816 0.017698 -vn 0.998707 -0.048248 0.015984 -vn 0.805391 0.217929 0.551228 -vn 0.999627 -0.020816 0.017698 -vn 0.775685 0.361202 0.517538 -vn 0.999782 0.020752 0.002261 -vn 0.775685 0.361202 0.517538 -vn 0.740592 0.322814 0.589333 -vn 0.999782 0.020752 0.002261 -vn 0.999782 0.020752 0.002261 -vn 0.740592 0.322814 0.589333 -vn 0.998303 0.058229 0.000632 -vn 0.740592 0.322814 0.589333 -vn 0.728818 0.284083 0.622994 -vn 0.998303 0.058229 0.000632 -vn 0.773857 0.304857 0.555164 -vn 0.990513 0.137395 0.002445 -vn 0.728818 0.284083 0.622994 -vn 0.990513 0.137395 0.002445 -vn 0.998303 0.058229 0.000632 -vn 0.728818 0.284083 0.622994 -vn 0.738957 0.055017 0.671503 -vn 0.763261 0.075432 0.641672 -vn 0.707233 -0.162804 0.687980 -vn 0.763261 0.075432 0.641672 -vn 0.759620 -0.099247 0.642749 -vn 0.707233 -0.162804 0.687980 -vn 0.761618 0.252637 0.596751 -vn 0.805391 0.217929 0.551228 -vn 0.738957 0.055017 0.671503 -vn 0.805391 0.217929 0.551228 -vn 0.763261 0.075432 0.641672 -vn 0.738957 0.055017 0.671503 -vn 0.775408 0.330567 0.538022 -vn 0.775685 0.361202 0.517538 -vn 0.761618 0.252637 0.596751 -vn 0.775685 0.361202 0.517538 -vn 0.805391 0.217929 0.551228 -vn 0.761618 0.252637 0.596751 -vn 0.740592 0.322814 0.589333 -vn 0.775685 0.361202 0.517538 -vn 0.804082 0.167348 0.570480 -vn 0.775685 0.361202 0.517538 -vn 0.775408 0.330567 0.538022 -vn 0.804082 0.167348 0.570480 -vn 0.740592 0.322814 0.589333 -vn 0.804082 0.167348 0.570480 -vn 0.820751 0.061453 0.567972 -vn 0.724913 0.292702 0.623560 -vn 0.728818 0.284083 0.622994 -vn 0.820751 0.061453 0.567972 -vn 0.728818 0.284083 0.622994 -vn 0.740592 0.322814 0.589333 -vn 0.820751 0.061453 0.567972 -vn 0.773857 0.304857 0.555164 -vn 0.728818 0.284083 0.622994 -vn 0.771535 0.304529 0.558566 -vn 0.728818 0.284083 0.622994 -vn 0.724913 0.292702 0.623560 -vn 0.771535 0.304529 0.558566 -vn 0.771535 0.304529 0.558566 -vn 0.740815 0.342904 0.577590 -vn 0.773857 0.304857 0.555164 -vn 0.740815 0.342904 0.577590 -vn 0.969840 0.166099 0.178388 -vn 0.773857 0.304857 0.555164 -vn 0.759620 -0.099247 0.642749 -vn 0.997150 -0.075336 -0.004072 -vn 0.772660 -0.348538 0.530583 -vn 0.997150 -0.075336 -0.004072 -vn 0.990615 -0.133182 -0.030719 -vn 0.772660 -0.348538 0.530583 -vn 0.656028 -0.418182 0.628292 -vn 0.772660 -0.348538 0.530583 -vn 0.627242 -0.676188 0.386443 -vn 0.772660 -0.348538 0.530583 -vn 0.767409 -0.563943 0.305045 -vn 0.627242 -0.676188 0.386443 -vn -0.600495 0.443647 -0.665270 -vn -0.554377 0.702479 -0.446307 -vn -0.004398 0.419539 -0.907726 -vn -0.554377 0.702479 -0.446307 -vn -0.010368 0.800881 -0.598733 -vn -0.004398 0.419539 -0.907726 -vn -0.554377 0.702479 -0.446307 -vn -0.517246 0.846290 -0.127473 -vn -0.010368 0.800881 -0.598733 -vn -0.517246 0.846290 -0.127473 -vn -0.051864 0.975168 -0.215306 -vn -0.010368 0.800881 -0.598733 -vn 0.627242 -0.676188 0.386443 -vn 0.767409 -0.563943 0.305045 -vn 0.634100 -0.764086 0.118699 -vn 0.767409 -0.563943 0.305045 -vn 0.755223 -0.652355 0.063808 -vn 0.634100 -0.764086 0.118699 -vn 0.780359 -0.622831 -0.055866 -vn 0.634100 -0.764086 0.118699 -vn 0.755223 -0.652355 0.063808 -vn -0.517246 0.846290 -0.127473 -vn -0.494071 0.869415 -0.003328 -vn -0.051864 0.975168 -0.215306 -vn -0.494071 0.869415 -0.003328 -vn -0.145820 0.989051 -0.022703 -vn -0.051864 0.975168 -0.215306 -vn 0.707233 -0.162804 0.687980 -vn 0.759620 -0.099247 0.642749 -vn 0.656028 -0.418182 0.628292 -vn 0.759620 -0.099247 0.642749 -vn 0.772660 -0.348538 0.530583 -vn 0.656028 -0.418182 0.628292 -vn -0.668540 0.161888 -0.725842 -vn -0.600495 0.443647 -0.665270 -vn 0.006508 0.083612 -0.996477 -vn -0.600495 0.443647 -0.665270 -vn -0.004398 0.419539 -0.907726 -vn 0.006508 0.083612 -0.996477 -vn 0.923588 -0.380903 -0.043567 -vn 0.985507 -0.169473 0.007393 -vn 0.951043 -0.307690 -0.029046 -vn 0.833807 -0.528564 -0.159328 -vn 0.708309 -0.701790 -0.076086 -vn 0.813515 -0.572091 -0.104428 -vn 0.494936 -0.863469 -0.097259 -vn 0.539402 -0.840642 -0.048634 -vn 0.808708 -0.587341 -0.031976 -vn 0.994998 0.093231 -0.035887 -vn 0.990513 0.137395 0.002445 -vn 0.969840 0.166099 0.178388 -vn 0.990513 0.137395 0.002445 -vn 0.773857 0.304857 0.555164 -vn 0.969840 0.166099 0.178388 -vn -0.969531 0.242434 0.035143 -vn -0.971231 0.238135 0.001538 -vn -0.984202 0.176837 0.008696 -vn -0.984202 0.176837 0.008696 -vn -0.971231 0.238135 0.001538 -vn -0.668540 0.161888 -0.725842 -vn -0.668540 0.161888 -0.725842 -vn -0.971231 0.238135 0.001538 -vn -0.600495 0.443647 -0.665270 -vn -0.554377 0.702479 -0.446307 -vn -0.600495 0.443647 -0.665270 -vn -0.971231 0.238135 0.001538 -vn -0.967156 0.254168 -0.002830 -vn -0.885029 0.465465 0.008081 -vn -0.969531 0.242434 0.035143 -vn -0.885029 0.465465 0.008081 -vn -0.932362 0.360030 0.032846 -vn -0.969531 0.242434 0.035143 -vn -0.956121 0.292541 0.015885 -vn -0.945131 0.326041 0.020602 -vn -0.844338 0.533959 0.044504 -vn -0.945131 0.326041 0.020602 -vn -0.789936 0.611456 0.046072 -vn -0.844338 0.533959 0.044504 -vn -0.996550 0.082383 -0.010068 -vn -0.996380 0.085006 0.000430 -vn -0.993936 0.109771 -0.006474 -vn -0.993936 0.109771 -0.006474 -vn -0.996380 0.085006 0.000430 -vn -0.989557 0.144091 0.003808 -vn -0.996380 0.085006 0.000430 -vn -0.983245 0.182196 0.005792 -vn -0.989557 0.144091 0.003808 -vn -0.723566 -0.082382 -0.685321 -vn -0.713582 -0.257949 -0.651354 -vn -0.995327 0.096478 -0.003944 -vn -0.996550 0.082383 -0.010068 -vn -0.993936 0.109771 -0.006474 -vn -0.713582 -0.257949 -0.651354 -vn -0.713582 -0.257949 -0.651354 -vn -0.993936 0.109771 -0.006474 -vn -0.995327 0.096478 -0.003944 -vn -0.668540 0.161888 -0.725842 -vn -0.723566 -0.082382 -0.685321 -vn -0.984202 0.176837 0.008696 -vn -0.723566 -0.082382 -0.685321 -vn -0.995327 0.096478 -0.003944 -vn -0.984202 0.176837 0.008696 -vn -0.510928 0.859417 0.018820 -vn -0.512047 0.858797 0.016581 -vn -0.453914 0.680417 0.575322 -vn -0.512047 0.858797 0.016581 -vn -0.449290 0.674456 0.585873 -vn -0.453914 0.680417 0.575322 -vn -0.126933 0.991885 0.007160 -vn -0.173425 0.735723 -0.654703 -vn -0.135280 0.990653 -0.017479 -vn -0.173425 0.735723 -0.654703 -vn -0.182289 0.709418 -0.680806 -vn -0.135280 0.990653 -0.017479 -vn -0.178828 0.405350 -0.896500 -vn -0.182289 0.709418 -0.680806 -vn -0.173425 0.735723 -0.654703 -vn -0.453914 0.680417 0.575322 -vn -0.449290 0.674456 0.585873 -vn -0.435398 0.431875 0.789881 -vn -0.603657 0.376752 -0.702606 -vn -0.616263 0.596857 -0.513792 -vn -0.609064 0.605926 -0.511757 -vn -0.248653 0.725676 0.641534 -vn -0.258900 0.717586 0.646561 -vn -0.274003 0.415746 0.867224 -vn -0.126933 0.991885 0.007160 -vn -0.135280 0.990653 -0.017479 -vn -0.248653 0.725676 0.641534 -vn -0.135280 0.990653 -0.017479 -vn -0.258900 0.717586 0.646561 -vn -0.248653 0.725676 0.641534 -vn -0.510928 0.859417 0.018820 -vn -0.609064 0.605926 -0.511757 -vn -0.512047 0.858797 0.016581 -vn -0.609064 0.605926 -0.511757 -vn -0.616263 0.596857 -0.513792 -vn -0.512047 0.858797 0.016581 -vn -0.844338 0.533959 0.044504 -vn -0.885029 0.465465 0.008081 -vn -0.956121 0.292541 0.015885 -vn -0.885029 0.465465 0.008081 -vn -0.967156 0.254168 -0.002830 -vn -0.956121 0.292541 0.015885 -vn -0.494071 0.869415 -0.003328 -vn -0.446710 0.893463 0.046633 -vn -0.145820 0.989051 -0.022703 -vn -0.446710 0.893463 0.046633 -vn -0.166799 0.985578 0.028524 -vn -0.145820 0.989051 -0.022703 -vn 0.780359 -0.622831 -0.055866 -vn 0.944473 -0.323507 -0.057569 -vn 0.813515 -0.572091 -0.104428 -vn 0.944473 -0.323507 -0.057569 -vn 0.956032 -0.272734 -0.107795 -vn 0.813515 -0.572091 -0.104428 -vn -0.989557 0.144091 0.003808 -vn -0.983245 0.182196 0.005792 -vn -0.983787 0.179160 0.008038 -vn -0.956121 0.292541 0.015885 -vn -0.983787 0.179160 0.008038 -vn -0.945131 0.326041 0.020602 -vn -0.945131 0.326041 0.020602 -vn -0.983787 0.179160 0.008038 -vn -0.983245 0.182196 0.005792 -vn -0.713582 -0.257949 -0.651354 -vn -0.731212 -0.381836 -0.565270 -vn -0.996550 0.082383 -0.010068 -vn -0.996550 0.082383 -0.010068 -vn -0.731212 -0.381836 -0.565270 -vn -0.574631 -0.446587 -0.685827 -vn -0.996550 0.082383 -0.010068 -vn -0.998947 0.045842 0.001757 -vn -0.996380 0.085006 0.000430 -vn 0.998432 -0.055875 -0.003518 -vn 0.775408 0.330567 0.538022 -vn 0.761618 0.252637 0.596751 -vn 0.969905 -0.243373 -0.007371 -vn 0.985507 -0.169473 0.007393 -vn 0.923588 -0.380903 -0.043567 -vn 0.923588 -0.380903 -0.043567 -vn 0.808708 -0.587341 -0.031976 -vn 0.969905 -0.243373 -0.007371 -vn 0.998432 -0.055875 -0.003518 -vn 0.985507 -0.169473 0.007393 -vn 0.969905 -0.243373 -0.007371 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.885029 0.465465 0.008081 -vn -0.494071 0.869415 -0.003328 -vn -0.932362 0.360030 0.032846 -vn -0.494071 0.869415 -0.003328 -vn -0.517246 0.846290 -0.127473 -vn -0.932362 0.360030 0.032846 -vn -0.446710 0.893463 0.046633 -vn -0.494071 0.869415 -0.003328 -vn -0.844338 0.533959 0.044504 -vn -0.494071 0.869415 -0.003328 -vn -0.885029 0.465465 0.008081 -vn -0.844338 0.533959 0.044504 -vn -0.932362 0.360030 0.032846 -vn -0.971231 0.238135 0.001538 -vn -0.969531 0.242434 0.035143 -vn -0.554377 0.702479 -0.446307 -vn -0.971231 0.238135 0.001538 -vn -0.932362 0.360030 0.032846 -vn -0.932362 0.360030 0.032846 -vn -0.517246 0.846290 -0.127473 -vn -0.554377 0.702479 -0.446307 -vn -0.429327 0.901377 0.056555 -vn -0.446710 0.893463 0.046633 -vn -0.789936 0.611456 0.046072 -vn -0.446710 0.893463 0.046633 -vn -0.844338 0.533959 0.044504 -vn -0.789936 0.611456 0.046072 -vn -0.682062 0.729639 0.049171 -vn -0.789936 0.611456 0.046072 -vn -0.914969 0.402789 0.024342 -vn -0.789936 0.611456 0.046072 -vn -0.945131 0.326041 0.020602 -vn -0.914969 0.402789 0.024342 -vn -0.284211 0.955066 0.084101 -vn -0.322783 0.944059 0.067556 -vn -0.615919 0.785318 0.062605 -vn -0.322783 0.944059 0.067556 -vn -0.682062 0.729639 0.049171 -vn -0.615919 0.785318 0.062605 -vn -0.144281 -0.209043 0.967204 -vn -0.158943 -0.205989 0.965560 -vn -0.191886 -0.210924 0.958484 -vn -0.158943 -0.205989 0.965560 -vn -0.196192 -0.207154 0.958434 -vn -0.191886 -0.210924 0.958484 -vn 0.247950 -0.964620 -0.089610 -vn 0.507293 -0.858759 -0.072022 -vn 0.249118 -0.963466 -0.098359 -vn 0.507293 -0.858759 -0.072022 -vn 0.515410 -0.853105 -0.081018 -vn 0.249118 -0.963466 -0.098359 -vn 0.212106 -0.072179 -0.974577 -vn 0.319057 -0.035786 -0.947060 -vn 0.239693 -0.077290 -0.967767 -vn 0.319057 -0.035786 -0.947060 -vn 0.328251 -0.031289 -0.944072 -vn 0.239693 -0.077290 -0.967767 -vn 0.253470 -0.964963 -0.067819 -vn 0.488009 -0.871020 -0.056324 -vn 0.253349 -0.964463 -0.075004 -vn 0.488009 -0.871020 -0.056324 -vn 0.539402 -0.840642 -0.048634 -vn 0.253349 -0.964463 -0.075004 -vn -0.322783 0.944059 0.067556 -vn -0.429327 0.901377 0.056555 -vn -0.682062 0.729639 0.049171 -vn -0.429327 0.901377 0.056555 -vn -0.789936 0.611456 0.046072 -vn -0.682062 0.729639 0.049171 -vn 0.491332 -0.797984 -0.349020 -vn 0.253349 -0.964463 -0.075004 -vn 0.494936 -0.863469 -0.097259 -vn -0.322783 0.944059 0.067556 -vn -0.083437 0.994889 0.056877 -vn -0.082937 0.995311 0.049767 -vn 0.324453 -0.809413 -0.489470 -vn 0.491332 -0.797984 -0.349020 -vn 0.476271 -0.348677 -0.807211 -vn 0.491332 -0.797984 -0.349020 -vn 0.702167 -0.425693 -0.570743 -vn 0.476271 -0.348677 -0.807211 -vn 0.324453 -0.809413 -0.489470 -vn 0.095583 -0.992659 -0.074102 -vn 0.253349 -0.964463 -0.075004 -vn 0.095583 -0.992659 -0.074102 -vn 0.253470 -0.964963 -0.067819 -vn 0.253349 -0.964463 -0.075004 -vn 0.253349 -0.964463 -0.075004 -vn 0.539402 -0.840642 -0.048634 -vn 0.494936 -0.863469 -0.097259 -vn 0.833807 -0.528564 -0.159328 -vn 0.658652 -0.695759 -0.286526 -vn 0.494936 -0.863469 -0.097259 -vn 0.494936 -0.863469 -0.097259 -vn 0.708309 -0.701790 -0.076086 -vn 0.833807 -0.528564 -0.159328 -vn 0.708309 -0.701790 -0.076086 -vn 0.745659 -0.659800 -0.093041 -vn 0.813515 -0.572091 -0.104428 -vn 0.764602 -0.641682 -0.060234 -vn 0.780359 -0.622831 -0.055866 -vn 0.813515 -0.572091 -0.104428 -vn 0.813515 -0.572091 -0.104428 -vn 0.745659 -0.659800 -0.093041 -vn 0.764602 -0.641682 -0.060234 -vn 0.780359 -0.622831 -0.055866 -vn 0.764602 -0.641682 -0.060234 -vn 0.634100 -0.764086 0.118699 -vn 0.808708 -0.587341 -0.031976 -vn 0.539402 -0.840642 -0.048634 -vn 0.850012 -0.526176 -0.024864 -vn 0.708309 -0.701790 -0.076086 -vn 0.808708 -0.587341 -0.031976 -vn 0.923588 -0.380903 -0.043567 -vn 0.923588 -0.380903 -0.043567 -vn 0.745659 -0.659800 -0.093041 -vn 0.708309 -0.701790 -0.076086 -vn 0.745659 -0.659800 -0.093041 -vn 0.923588 -0.380903 -0.043567 -vn 0.764602 -0.641682 -0.060234 -vn 0.764602 -0.641682 -0.060234 -vn 0.923588 -0.380903 -0.043567 -vn 0.951043 -0.307690 -0.029046 -vn 0.634100 -0.764086 0.118699 -vn 0.764602 -0.641682 -0.060234 -vn 0.951043 -0.307690 -0.029046 -vn 0.951043 -0.307690 -0.029046 -vn 0.627242 -0.676188 0.386443 -vn 0.634100 -0.764086 0.118699 -vn 0.656028 -0.418182 0.628292 -vn 0.627242 -0.676188 0.386443 -vn 0.951043 -0.307690 -0.029046 -vn 0.707233 -0.162804 0.687980 -vn 0.656028 -0.418182 0.628292 -vn 0.951043 -0.307690 -0.029046 -vn 0.985507 -0.169473 0.007393 -vn 0.707233 -0.162804 0.687980 -vn 0.951043 -0.307690 -0.029046 -vn 0.693869 -0.717639 -0.059504 -vn 0.734614 -0.292666 0.612119 -vn 0.951661 -0.299535 -0.067968 -vn 0.951661 -0.299535 -0.067968 -vn 0.734614 -0.292666 0.612119 -vn 0.865823 -0.075119 0.494680 -vn 0.694372 -0.659335 -0.288316 -vn 0.688953 -0.713776 -0.125968 -vn 0.911130 -0.251283 -0.326649 -vn 0.911130 -0.251283 -0.326649 -vn 0.688953 -0.713776 -0.125968 -vn 0.936547 -0.324609 -0.132316 -vn 0.591638 -0.669054 -0.449811 -vn 0.694372 -0.659335 -0.288316 -vn 0.776501 -0.261174 -0.573441 -vn 0.776501 -0.261174 -0.573441 -vn 0.694372 -0.659335 -0.288316 -vn 0.911130 -0.251283 -0.326649 -vn 0.450135 -0.670894 -0.589305 -vn 0.591638 -0.669054 -0.449811 -vn 0.582436 -0.291964 -0.758634 -vn 0.582436 -0.291964 -0.758634 -vn 0.591638 -0.669054 -0.449811 -vn 0.776501 -0.261174 -0.573441 -vn 0.167519 -0.631543 -0.757027 -vn 0.303200 -0.657246 -0.689998 -vn 0.203644 -0.349140 -0.914675 -vn 0.203644 -0.349140 -0.914675 -vn 0.303200 -0.657246 -0.689998 -vn 0.389637 -0.317883 -0.864369 -vn -0.000000 -0.641479 -0.767141 -vn 0.167519 -0.631543 -0.757027 -vn 0.000000 -0.346225 -0.938152 -vn 0.000000 -0.346225 -0.938152 -vn 0.167519 -0.631543 -0.757027 -vn 0.203644 -0.349140 -0.914675 -vn 0.688953 -0.713776 -0.125968 -vn 0.694372 -0.659335 -0.288316 -vn 0.440580 -0.890619 -0.112635 -vn 0.440580 -0.890619 -0.112635 -vn 0.694372 -0.659335 -0.288316 -vn 0.411066 -0.888894 -0.202218 -vn 0.694372 -0.659335 -0.288316 -vn 0.591638 -0.669054 -0.449811 -vn 0.411066 -0.888894 -0.202218 -vn 0.411066 -0.888894 -0.202218 -vn 0.591638 -0.669054 -0.449811 -vn 0.372727 -0.870575 -0.321206 -vn 0.591638 -0.669054 -0.449811 -vn 0.450135 -0.670894 -0.589305 -vn 0.372727 -0.870575 -0.321206 -vn 0.372727 -0.870575 -0.321206 -vn 0.450135 -0.670894 -0.589305 -vn 0.308118 -0.845792 -0.435546 -vn 0.213971 -0.821557 -0.528451 -vn 0.303200 -0.657246 -0.689998 -vn 0.127120 -0.776749 -0.616849 -vn 0.127120 -0.776749 -0.616849 -vn 0.303200 -0.657246 -0.689998 -vn 0.167519 -0.631543 -0.757027 -vn -0.000000 -0.641479 -0.767141 -vn -0.000000 -0.775130 -0.631802 -vn 0.167519 -0.631543 -0.757027 -vn 0.167519 -0.631543 -0.757027 -vn -0.000000 -0.775130 -0.631802 -vn 0.127120 -0.776749 -0.616849 -vn 0.829370 -0.508463 0.231538 -vn 0.547229 -0.823054 -0.152061 -vn 0.933139 -0.256382 0.252030 -vn 0.933139 -0.256382 0.252030 -vn 0.547229 -0.823054 -0.152061 -vn 0.834994 -0.497446 -0.235229 -vn 0.547229 -0.823054 -0.152061 -vn 0.499176 -0.817395 -0.287557 -vn 0.834994 -0.497446 -0.235229 -vn 0.834994 -0.497446 -0.235229 -vn 0.499176 -0.817395 -0.287557 -vn 0.746611 -0.509098 -0.428241 -vn 0.499176 -0.817395 -0.287557 -vn 0.433962 -0.796400 -0.421218 -vn 0.746611 -0.509098 -0.428241 -vn 0.746611 -0.509098 -0.428241 -vn 0.433962 -0.796400 -0.421218 -vn 0.626875 -0.487380 -0.607855 -vn 0.433962 -0.796400 -0.421218 -vn 0.339986 -0.770658 -0.538977 -vn 0.626875 -0.487380 -0.607855 -vn 0.626875 -0.487380 -0.607855 -vn 0.339986 -0.770658 -0.538977 -vn 0.474424 -0.451462 -0.755715 -vn 0.219380 -0.740034 -0.635784 -vn 0.105150 -0.721120 -0.684785 -vn 0.298918 -0.442208 -0.845636 -vn 0.298918 -0.442208 -0.845636 -vn 0.105150 -0.721120 -0.684785 -vn 0.134280 -0.433849 -0.890923 -vn 0.000000 -0.711059 -0.703132 -vn 0.000000 -0.428150 -0.903708 -vn 0.105150 -0.721120 -0.684785 -vn 0.105150 -0.721120 -0.684785 -vn 0.000000 -0.428150 -0.903708 -vn 0.134280 -0.433849 -0.890923 -vn 0.933139 -0.256382 0.252030 -vn 0.834994 -0.497446 -0.235229 -vn 0.950169 -0.026411 0.310615 -vn 0.950169 -0.026411 0.310615 -vn 0.834994 -0.497446 -0.235229 -vn 0.957770 -0.134386 -0.254199 -vn 0.834994 -0.497446 -0.235229 -vn 0.746611 -0.509098 -0.428241 -vn 0.957770 -0.134386 -0.254199 -vn 0.957770 -0.134386 -0.254199 -vn 0.746611 -0.509098 -0.428241 -vn 0.861660 -0.163786 -0.480330 -vn 0.746611 -0.509098 -0.428241 -vn 0.626875 -0.487380 -0.607855 -vn 0.861660 -0.163786 -0.480330 -vn 0.861660 -0.163786 -0.480330 -vn 0.626875 -0.487380 -0.607855 -vn 0.707443 -0.172771 -0.685328 -vn 0.626875 -0.487380 -0.607855 -vn 0.474424 -0.451462 -0.755715 -vn 0.707443 -0.172771 -0.685328 -vn 0.707443 -0.172771 -0.685328 -vn 0.474424 -0.451462 -0.755715 -vn 0.530815 -0.169218 -0.830422 -vn 0.298918 -0.442208 -0.845636 -vn 0.134280 -0.433849 -0.890923 -vn 0.338040 -0.168109 -0.925996 -vn 0.338040 -0.168109 -0.925996 -vn 0.134280 -0.433849 -0.890923 -vn 0.143223 -0.147346 -0.978661 -vn 0.000000 -0.428150 -0.903708 -vn 0.000000 -0.139213 -0.990262 -vn 0.134280 -0.433849 -0.890923 -vn 0.134280 -0.433849 -0.890923 -vn 0.000000 -0.139213 -0.990262 -vn 0.143223 -0.147346 -0.978661 -vn 0.887379 0.408080 0.214547 -vn 0.955533 0.229356 0.185346 -vn 0.775796 0.611274 -0.156478 -vn 0.775796 0.611274 -0.156478 -vn 0.955533 0.229356 0.185346 -vn 0.899654 0.371805 -0.228876 -vn 0.838201 0.338530 -0.427570 -vn 0.748562 0.572863 -0.333891 -vn 0.899654 0.371805 -0.228876 -vn 0.899654 0.371805 -0.228876 -vn 0.748562 0.572863 -0.333891 -vn 0.775796 0.611274 -0.156478 -vn 0.838201 0.338530 -0.427570 -vn 0.730079 0.280919 -0.622953 -vn 0.748562 0.572863 -0.333891 -vn 0.748562 0.572863 -0.333891 -vn 0.730079 0.280919 -0.622953 -vn 0.670026 0.523745 -0.526077 -vn 0.141285 0.197838 -0.969999 -vn 0.000000 0.169328 -0.985560 -vn 0.141907 0.486043 -0.862337 -vn 0.141907 0.486043 -0.862337 -vn 0.000000 0.169328 -0.985560 -vn -0.000000 0.429750 -0.902948 -vn 0.910865 0.382103 -0.155956 -vn 0.775796 0.611274 -0.156478 -vn 0.852446 0.395819 -0.341559 -vn 0.852446 0.395819 -0.341559 -vn 0.775796 0.611274 -0.156478 -vn 0.748562 0.572863 -0.333891 -vn 0.852446 0.395819 -0.341559 -vn 0.748562 0.572863 -0.333891 -vn 0.727146 0.408695 -0.551567 -vn 0.727146 0.408695 -0.551567 -vn 0.748562 0.572863 -0.333891 -vn 0.670026 0.523745 -0.526077 -vn 0.561493 0.486609 -0.669281 -vn 0.515036 0.508272 -0.690216 -vn 0.260541 0.716419 -0.647196 -vn 0.260541 0.716419 -0.647196 -vn 0.515036 0.508272 -0.690216 -vn 0.306784 0.535384 -0.786923 -vn 0.306784 0.535384 -0.786923 -vn 0.141907 0.486043 -0.862337 -vn 0.260541 0.716419 -0.647196 -vn 0.260541 0.716419 -0.647196 -vn 0.141907 0.486043 -0.862337 -vn 0.139642 0.443685 -0.885237 -vn 0.141907 0.486043 -0.862337 -vn -0.000000 0.429750 -0.902948 -vn 0.139642 0.443685 -0.885237 -vn 0.139642 0.443685 -0.885237 -vn -0.000000 0.429750 -0.902948 -vn 0.000000 0.345679 -0.938353 -vn 0.978524 0.071526 -0.193328 -vn 0.865780 0.298022 0.402004 -vn 0.910865 0.382103 -0.155956 -vn 0.910702 0.410936 -0.041879 -vn 0.865780 0.298022 0.402004 -vn 0.663248 0.596004 0.452638 -vn 0.910865 0.382103 -0.155956 -vn 0.852446 0.395819 -0.341559 -vn 0.978524 0.071526 -0.193328 -vn 0.978524 0.071526 -0.193328 -vn 0.852446 0.395819 -0.341559 -vn 0.911055 0.107518 -0.398019 -vn 0.852446 0.395819 -0.341559 -vn 0.727146 0.408695 -0.551567 -vn 0.911055 0.107518 -0.398019 -vn 0.911055 0.107518 -0.398019 -vn 0.727146 0.408695 -0.551567 -vn 0.783256 0.126122 -0.608771 -vn 0.419181 0.072841 -0.904976 -vn 0.381991 0.053413 -0.922621 -vn 0.426493 0.056983 -0.902694 -vn 0.426493 0.056983 -0.902694 -vn 0.381991 0.053413 -0.922621 -vn 0.394310 0.036711 -0.918244 -vn 0.319266 0.017626 -0.947501 -vn 0.341576 0.029789 -0.939382 -vn 0.381991 0.053413 -0.922621 -vn 0.381991 0.053413 -0.922621 -vn 0.341576 0.029789 -0.939382 -vn 0.394310 0.036711 -0.918244 -vn 0.000000 0.345679 -0.938353 -vn 0.000000 0.077721 -0.996975 -vn 0.139642 0.443685 -0.885237 -vn 0.139642 0.443685 -0.885237 -vn 0.000000 0.077721 -0.996975 -vn 0.103853 0.070740 -0.992074 -vn 0.887417 0.192326 0.418929 -vn 0.963287 0.140801 -0.228590 -vn 0.895262 0.186285 0.404727 -vn 0.895262 0.186285 0.404727 -vn 0.963287 0.140801 -0.228590 -vn 0.922032 0.290901 -0.255407 -vn 0.963287 0.140801 -0.228590 -vn 0.891648 0.172871 -0.418426 -vn 0.922032 0.290901 -0.255407 -vn 0.922032 0.290901 -0.255407 -vn 0.891648 0.172871 -0.418426 -vn 0.845815 0.329793 -0.419325 -vn 0.891648 0.172871 -0.418426 -vn 0.767576 0.190717 -0.611926 -vn 0.845815 0.329793 -0.419325 -vn 0.845815 0.329793 -0.419325 -vn 0.767576 0.190717 -0.611926 -vn 0.708098 0.345784 -0.615654 -vn 0.883142 0.315792 0.346895 -vn 0.895262 0.186285 0.404727 -vn 0.746380 0.632005 -0.208535 -vn 0.746380 0.632005 -0.208535 -vn 0.895262 0.186285 0.404727 -vn 0.922032 0.290901 -0.255407 -vn 0.845815 0.329793 -0.419325 -vn 0.682306 0.642739 -0.348346 -vn 0.922032 0.290901 -0.255407 -vn 0.922032 0.290901 -0.255407 -vn 0.682306 0.642739 -0.348346 -vn 0.746380 0.632005 -0.208535 -vn 0.708098 0.345784 -0.615654 -vn 0.597176 0.623458 -0.504659 -vn 0.845815 0.329793 -0.419325 -vn 0.845815 0.329793 -0.419325 -vn 0.597176 0.623458 -0.504659 -vn 0.682306 0.642739 -0.348346 -vn 0.708098 0.345784 -0.615654 -vn 0.565694 0.317444 -0.761065 -vn 0.597176 0.623458 -0.504659 -vn 0.597176 0.623458 -0.504659 -vn 0.565694 0.317444 -0.761065 -vn 0.484964 0.591691 -0.643981 -vn 0.565694 0.317444 -0.761065 -vn 0.379772 0.322230 -0.867145 -vn 0.484964 0.591691 -0.643981 -vn 0.484964 0.591691 -0.643981 -vn 0.379772 0.322230 -0.867145 -vn 0.297017 0.614079 -0.731223 -vn 0.186911 0.318785 -0.929215 -vn 0.000000 0.303281 -0.952901 -vn 0.160628 0.572026 -0.804354 -vn 0.160628 0.572026 -0.804354 -vn 0.000000 0.303281 -0.952901 -vn 0.000000 0.566902 -0.823785 -vn 0.872500 0.486439 0.046048 -vn 0.883142 0.315792 0.346895 -vn 0.695502 0.699075 -0.166048 -vn 0.695502 0.699075 -0.166048 -vn 0.883142 0.315792 0.346895 -vn 0.746380 0.632005 -0.208535 -vn 0.682306 0.642739 -0.348346 -vn 0.641577 0.697453 -0.319279 -vn 0.746380 0.632005 -0.208535 -vn 0.746380 0.632005 -0.208535 -vn 0.641577 0.697453 -0.319279 -vn 0.695502 0.699075 -0.166048 -vn 0.597176 0.623458 -0.504659 -vn 0.576935 0.677233 -0.456619 -vn 0.682306 0.642739 -0.348346 -vn 0.682306 0.642739 -0.348346 -vn 0.576935 0.677233 -0.456619 -vn 0.641577 0.697453 -0.319279 -vn 0.484964 0.591691 -0.643981 -vn 0.445043 0.671109 -0.592916 -vn 0.597176 0.623458 -0.504659 -vn 0.597176 0.623458 -0.504659 -vn 0.445043 0.671109 -0.592916 -vn 0.576935 0.677233 -0.456619 -vn 0.484964 0.591691 -0.643981 -vn 0.297017 0.614079 -0.731223 -vn 0.445043 0.671109 -0.592916 -vn 0.445043 0.671109 -0.592916 -vn 0.297017 0.614079 -0.731223 -vn 0.311586 0.626785 -0.714181 -vn 0.160628 0.572026 -0.804354 -vn 0.000000 0.566902 -0.823785 -vn 0.167735 0.583693 -0.794460 -vn 0.167735 0.583693 -0.794460 -vn 0.000000 0.566902 -0.823785 -vn 0.000000 0.578067 -0.815989 -vn 0.827008 0.305512 0.471932 -vn 0.663248 0.596004 0.452638 -vn 0.787499 0.326946 0.522448 -vn 0.787499 0.326946 0.522448 -vn 0.663248 0.596004 0.452638 -vn 0.865780 0.298022 0.402004 -vn 0.887417 0.192326 0.418929 -vn 0.895262 0.186285 0.404727 -vn 0.790440 0.189724 0.582417 -vn 0.790440 0.189724 0.582417 -vn 0.895262 0.186285 0.404727 -vn 0.775527 -0.000898 0.631313 -vn 0.883142 0.315792 0.346895 -vn 0.964631 0.193831 0.178653 -vn 0.879022 -0.245419 0.408766 -vn 0.643794 0.051604 0.763457 -vn 0.734614 -0.292666 0.612119 -vn 0.645109 -0.423749 0.635823 -vn 0.827008 0.305512 0.471932 -vn 0.731349 0.176702 0.658715 -vn 0.722072 0.167012 0.671356 -vn 0.722072 0.167012 0.671356 -vn 0.731349 0.176702 0.658715 -vn 0.822162 0.061563 0.565915 -vn 0.731349 0.176702 0.658715 -vn 0.687158 0.108164 0.718411 -vn 0.822162 0.061563 0.565915 -vn 0.827008 0.305512 0.471932 -vn 0.665715 0.458373 0.588828 -vn 0.663248 0.596004 0.452638 -vn 0.141923 0.004781 -0.989866 -vn -0.000000 0.003909 -0.999992 -vn 0.141285 0.197838 -0.969999 -vn 0.141285 0.197838 -0.969999 -vn -0.000000 0.003909 -0.999992 -vn 0.000000 0.169328 -0.985560 -vn 0.549889 0.016593 -0.835073 -vn 0.341784 0.005125 -0.939765 -vn 0.556365 0.235871 -0.796758 -vn 0.556365 0.235871 -0.796758 -vn 0.341784 0.005125 -0.939765 -vn 0.340643 0.199708 -0.918738 -vn 0.879747 0.084713 -0.467833 -vn 0.732050 0.035948 -0.680302 -vn 0.838201 0.338530 -0.427570 -vn 0.838201 0.338530 -0.427570 -vn 0.732050 0.035948 -0.680302 -vn 0.730079 0.280919 -0.622953 -vn 0.963144 0.096949 -0.250908 -vn 0.879747 0.084713 -0.467833 -vn 0.899654 0.371805 -0.228876 -vn 0.899654 0.371805 -0.228876 -vn 0.879747 0.084713 -0.467833 -vn 0.838201 0.338530 -0.427570 -vn 0.952537 0.082086 0.293147 -vn 0.963144 0.096949 -0.250908 -vn 0.955533 0.229356 0.185346 -vn 0.955533 0.229356 0.185346 -vn 0.963144 0.096949 -0.250908 -vn 0.899654 0.371805 -0.228876 -vn 0.645109 -0.423749 0.635823 -vn 0.762062 -0.580087 0.287682 -vn 0.652378 0.102382 0.750946 -vn 0.652378 0.102382 0.750946 -vn 0.762062 -0.580087 0.287682 -vn 0.817308 0.373606 0.438665 -vn 0.066628 0.586188 0.807431 -vn 0.829370 -0.508463 0.231538 -vn 0.933139 -0.256382 0.252030 -vn 0.829370 -0.508463 0.231538 -vn 0.066628 0.586188 0.807431 -vn 0.482375 0.684024 0.547198 -vn 0.933139 -0.256382 0.252030 -vn 0.950169 -0.026411 0.310615 -vn 0.066628 0.586188 0.807431 -vn 0.066628 0.586188 0.807431 -vn 0.950169 -0.026411 0.310615 -vn -0.074275 0.267465 0.960701 -vn 0.955533 0.229356 0.185346 -vn 0.818615 -0.123715 0.560860 -vn 0.172799 -0.451525 0.875366 -vn 0.818615 -0.123715 0.560860 -vn 0.955533 0.229356 0.185346 -vn 0.887379 0.408080 0.214547 -vn -0.096717 0.033816 0.994737 -vn 0.955533 0.229356 0.185346 -vn 0.172799 -0.451525 0.875366 -vn 0.955533 0.229356 0.185346 -vn -0.096717 0.033816 0.994737 -vn 0.952537 0.082086 0.293147 -vn 0.127120 -0.776749 -0.616849 -vn -0.000000 -0.775130 -0.631802 -vn 0.105150 -0.721120 -0.684785 -vn 0.105150 -0.721120 -0.684785 -vn -0.000000 -0.775130 -0.631802 -vn 0.000000 -0.711059 -0.703132 -vn 0.213971 -0.821557 -0.528451 -vn 0.127120 -0.776749 -0.616849 -vn 0.219380 -0.740034 -0.635784 -vn 0.219380 -0.740034 -0.635784 -vn 0.127120 -0.776749 -0.616849 -vn 0.105150 -0.721120 -0.684785 -vn 0.372727 -0.870575 -0.321206 -vn 0.308118 -0.845792 -0.435546 -vn 0.433962 -0.796400 -0.421218 -vn 0.433962 -0.796400 -0.421218 -vn 0.308118 -0.845792 -0.435546 -vn 0.339986 -0.770658 -0.538977 -vn 0.411066 -0.888894 -0.202218 -vn 0.372727 -0.870575 -0.321206 -vn 0.499176 -0.817395 -0.287557 -vn 0.499176 -0.817395 -0.287557 -vn 0.372727 -0.870575 -0.321206 -vn 0.433962 -0.796400 -0.421218 -vn 0.440580 -0.890619 -0.112635 -vn 0.411066 -0.888894 -0.202218 -vn 0.547229 -0.823054 -0.152061 -vn 0.547229 -0.823054 -0.152061 -vn 0.411066 -0.888894 -0.202218 -vn 0.499176 -0.817395 -0.287557 -vn 0.762062 -0.580087 0.287682 -vn 0.440580 -0.890619 -0.112635 -vn 0.829370 -0.508463 0.231538 -vn 0.829370 -0.508463 0.231538 -vn 0.440580 -0.890619 -0.112635 -vn 0.547229 -0.823054 -0.152061 -vn 0.762062 -0.580087 0.287682 -vn 0.829370 -0.508463 0.231538 -vn 0.817308 0.373606 0.438665 -vn 0.817308 0.373606 0.438665 -vn 0.829370 -0.508463 0.231538 -vn 0.482375 0.684024 0.547198 -vn 0.822162 0.061563 0.565915 -vn 0.980730 -0.192660 -0.032425 -vn 0.722072 0.167012 0.671356 -vn 0.722072 0.167012 0.671356 -vn 0.980730 -0.192660 -0.032425 -vn 0.968206 -0.249820 0.012937 -vn 0.652378 0.102382 0.750946 -vn 0.817308 0.373606 0.438665 -vn 0.926853 0.296065 0.230845 -vn 0.849402 0.514429 0.117811 -vn 0.817308 0.373606 0.438665 -vn 0.044560 0.961925 0.269656 -vn 0.482375 0.684024 0.547198 -vn 0.066628 0.586188 0.807431 -vn -0.454056 0.816322 0.357003 -vn -0.454056 0.816322 0.357003 -vn 0.066628 0.586188 0.807431 -vn -0.741744 0.469145 0.479291 -vn 0.066628 0.586188 0.807431 -vn -0.074275 0.267465 0.960701 -vn -0.741744 0.469145 0.479291 -vn -0.741744 0.469145 0.479291 -vn -0.074275 0.267465 0.960701 -vn -0.800068 0.182433 0.571498 -vn 0.818615 -0.123715 0.560860 -vn -0.577310 -0.607635 0.545429 -vn 0.172799 -0.451525 0.875366 -vn 0.172799 -0.451525 0.875366 -vn -0.577310 -0.607635 0.545429 -vn -0.757302 -0.341398 0.556724 -vn 0.497236 -0.822134 0.277223 -vn 0.429055 -0.842434 0.325909 -vn 0.489758 -0.824720 0.282797 -vn 0.489758 -0.824720 0.282797 -vn 0.429055 -0.842434 0.325909 -vn 0.413625 -0.846061 0.336297 -vn 0.172799 -0.451525 0.875366 -vn -0.757302 -0.341398 0.556724 -vn -0.096717 0.033816 0.994737 -vn -0.096717 0.033816 0.994737 -vn -0.757302 -0.341398 0.556724 -vn -0.846383 -0.041168 0.530981 -vn 0.817308 0.373606 0.438665 -vn 0.482375 0.684024 0.547198 -vn 0.044560 0.961925 0.269656 -vn 0.044560 0.961925 0.269656 -vn 0.482375 0.684024 0.547198 -vn -0.454056 0.816322 0.357003 -vn 0.722072 0.167012 0.671356 -vn 0.665715 0.458373 0.588828 -vn 0.827008 0.305512 0.471932 -vn 0.665715 0.458373 0.588828 -vn 0.818615 -0.123715 0.560860 -vn 0.887379 0.408080 0.214547 -vn 0.818615 -0.123715 0.560860 -vn 0.665715 0.458373 0.588828 -vn 0.722072 0.167012 0.671356 -vn 0.822162 0.061563 0.565915 -vn 0.687158 0.108164 0.718411 -vn 0.807536 0.080137 0.584349 -vn 0.807536 0.080137 0.584349 -vn 0.687158 0.108164 0.718411 -vn 0.643614 0.102220 0.758493 -vn 0.980730 -0.192660 -0.032425 -vn 0.822162 0.061563 0.565915 -vn 0.992109 -0.110931 -0.058437 -vn 0.992109 -0.110931 -0.058437 -vn 0.822162 0.061563 0.565915 -vn 0.807536 0.080137 0.584349 -vn 0.643794 0.051604 0.763457 -vn 0.645109 -0.423749 0.635823 -vn 0.652378 0.102382 0.750946 -vn 0.762062 -0.580087 0.287682 -vn 0.645109 -0.423749 0.635823 -vn 0.693869 -0.717639 -0.059504 -vn 0.693869 -0.717639 -0.059504 -vn 0.645109 -0.423749 0.635823 -vn 0.734614 -0.292666 0.612119 -vn 0.688953 -0.713776 -0.125968 -vn 0.693869 -0.717639 -0.059504 -vn 0.936547 -0.324609 -0.132316 -vn 0.936547 -0.324609 -0.132316 -vn 0.693869 -0.717639 -0.059504 -vn 0.951661 -0.299535 -0.067968 -vn 0.695502 0.699075 -0.166048 -vn 0.641577 0.697453 -0.319279 -vn 0.737048 0.630837 -0.242495 -vn 0.576935 0.677233 -0.456619 -vn 0.657376 0.599430 -0.456663 -vn 0.641577 0.697453 -0.319279 -vn 0.641577 0.697453 -0.319279 -vn 0.657376 0.599430 -0.456663 -vn 0.737048 0.630837 -0.242495 -vn 0.445043 0.671109 -0.592916 -vn 0.522000 0.565707 -0.638350 -vn 0.576935 0.677233 -0.456619 -vn 0.576935 0.677233 -0.456619 -vn 0.522000 0.565707 -0.638350 -vn 0.657376 0.599430 -0.456663 -vn 0.445043 0.671109 -0.592916 -vn 0.311586 0.626785 -0.714181 -vn 0.522000 0.565707 -0.638350 -vn 0.522000 0.565707 -0.638350 -vn 0.311586 0.626785 -0.714181 -vn 0.366912 0.544933 -0.753938 -vn 0.167735 0.583693 -0.794460 -vn 0.000000 0.578067 -0.815989 -vn 0.182275 0.548030 -0.816357 -vn 0.182275 0.548030 -0.816357 -vn 0.000000 0.578067 -0.815989 -vn 0.000000 0.566147 -0.824304 -vn 0.522554 0.775614 -0.354063 -vn 0.531461 0.826347 -0.186276 -vn 0.657376 0.599430 -0.456663 -vn 0.657376 0.599430 -0.456663 -vn 0.531461 0.826347 -0.186276 -vn 0.737048 0.630837 -0.242495 -vn 0.124090 0.987698 -0.095156 -vn 0.155681 0.954668 -0.253718 -vn 0.000000 0.996295 -0.085997 -vn 0.000000 0.996295 -0.085997 -vn 0.155681 0.954668 -0.253718 -vn 0.000000 0.968551 -0.248813 -vn 0.155681 0.954668 -0.253718 -vn 0.174351 0.814871 -0.552800 -vn 0.000000 0.968551 -0.248813 -vn 0.000000 0.968551 -0.248813 -vn 0.174351 0.814871 -0.552800 -vn -0.000000 0.828372 -0.560179 -vn 0.370339 0.773014 -0.515071 -vn 0.522554 0.775614 -0.354063 -vn 0.522000 0.565707 -0.638350 -vn 0.522000 0.565707 -0.638350 -vn 0.522554 0.775614 -0.354063 -vn 0.657376 0.599430 -0.456663 -vn 0.366912 0.544933 -0.753938 -vn 0.370339 0.773014 -0.515071 -vn 0.522000 0.565707 -0.638350 -vn 0.000000 0.566147 -0.824304 -vn -0.000000 0.828372 -0.560179 -vn 0.182275 0.548030 -0.816357 -vn 0.182275 0.548030 -0.816357 -vn -0.000000 0.828372 -0.560179 -vn 0.174351 0.814871 -0.552800 -vn 0.370339 0.773014 -0.515071 -vn 0.283844 0.920677 -0.267929 -vn 0.522554 0.775614 -0.354063 -vn 0.283844 0.920677 -0.267929 -vn 0.289060 0.948825 -0.127180 -vn 0.522554 0.775614 -0.354063 -vn 0.522554 0.775614 -0.354063 -vn 0.289060 0.948825 -0.127180 -vn 0.531461 0.826347 -0.186276 -vn 0.811511 0.582008 0.052118 -vn 0.564449 0.824801 0.033177 -vn 0.813126 0.562843 0.148437 -vn 0.813126 0.562843 0.148437 -vn 0.564449 0.824801 0.033177 -vn 0.586343 0.801355 0.118456 -vn 0.107263 0.993482 0.038571 -vn -0.000000 0.999113 0.042110 -vn 0.101507 0.989456 0.103309 -vn 0.101507 0.989456 0.103309 -vn -0.000000 0.999113 0.042110 -vn -0.000000 0.994745 0.102388 -vn 0.564449 0.824801 0.033177 -vn 0.285655 0.957858 0.030146 -vn 0.586343 0.801355 0.118456 -vn 0.586343 0.801355 0.118456 -vn 0.285655 0.957858 0.030146 -vn 0.271656 0.956444 0.106859 -vn 0.675523 0.489859 0.551096 -vn 0.790476 0.510996 0.337684 -vn 0.504243 0.754679 0.419760 -vn 0.504243 0.754679 0.419760 -vn 0.790476 0.510996 0.337684 -vn 0.566436 0.773715 0.283751 -vn 0.306688 0.839558 0.448424 -vn 0.395709 0.594759 0.699769 -vn 0.504243 0.754679 0.419760 -vn 0.504243 0.754679 0.419760 -vn 0.395709 0.594759 0.699769 -vn 0.675523 0.489859 0.551096 -vn 0.000000 0.644588 0.764530 -vn 0.172841 0.641260 0.747604 -vn -0.000000 0.890696 0.454600 -vn -0.000000 0.890696 0.454600 -vn 0.172841 0.641260 0.747604 -vn 0.151422 0.882115 0.446031 -vn 0.114776 0.969606 0.216080 -vn -0.000000 0.977356 0.211603 -vn 0.151422 0.882115 0.446031 -vn 0.151422 0.882115 0.446031 -vn -0.000000 0.977356 0.211603 -vn -0.000000 0.890696 0.454600 -vn 0.306688 0.839558 0.448424 -vn 0.504243 0.754679 0.419760 -vn 0.269387 0.933644 0.236092 -vn 0.269387 0.933644 0.236092 -vn 0.504243 0.754679 0.419760 -vn 0.566436 0.773715 0.283751 -vn 0.775527 -0.000898 0.631313 -vn 0.992653 0.114144 0.040135 -vn 0.790440 0.189724 0.582417 -vn 0.879022 -0.245419 0.408766 -vn 0.992653 0.114144 0.040135 -vn 0.775527 -0.000898 0.631313 -vn 0.964631 0.193831 0.178653 -vn 0.992653 0.114144 0.040135 -vn 0.879022 -0.245419 0.408766 -vn 0.992653 0.114144 0.040135 -vn 0.964631 0.193831 0.178653 -vn 0.965976 0.251500 0.060315 -vn 0.787499 0.326946 0.522448 -vn 0.998468 0.034872 0.042952 -vn 0.827008 0.305512 0.471932 -vn 0.827008 0.305512 0.471932 -vn 0.998468 0.034872 0.042952 -vn 0.731349 0.176702 0.658715 -vn 0.941576 0.289157 0.172692 -vn 0.987901 0.136372 0.073847 -vn 0.965976 0.251500 0.060315 -vn 0.965976 0.251500 0.060315 -vn 0.987901 0.136372 0.073847 -vn 0.992653 0.114144 0.040135 -vn 0.965976 0.251500 0.060315 -vn 0.905940 0.384539 0.177207 -vn 0.941576 0.289157 0.172692 -vn 0.921473 0.383876 0.059379 -vn 0.905940 0.384539 0.177207 -vn 0.965976 0.251500 0.060315 -vn 0.730356 0.204967 0.651589 -vn 0.877960 0.234283 0.417490 -vn 0.736229 0.256875 0.626085 -vn 0.736229 0.256875 0.626085 -vn 0.877960 0.234283 0.417490 -vn 0.859273 0.317420 0.401117 -vn 0.730356 0.204967 0.651589 -vn 0.736229 0.256875 0.626085 -vn 0.478164 0.165313 0.862572 -vn 0.478164 0.165313 0.862572 -vn 0.736229 0.256875 0.626085 -vn 0.464356 0.290440 0.836671 -vn -0.000000 0.342544 0.939502 -vn 0.000000 0.200670 0.979659 -vn 0.190440 0.332540 0.923661 -vn 0.190440 0.332540 0.923661 -vn 0.000000 0.200670 0.979659 -vn 0.189718 0.191129 0.963056 -vn 0.811511 0.582008 0.052118 -vn 0.813126 0.562843 0.148437 -vn 0.921473 0.383876 0.059379 -vn 0.921473 0.383876 0.059379 -vn 0.813126 0.562843 0.148437 -vn 0.905940 0.384539 0.177207 -vn 0.859273 0.317420 0.401117 -vn 0.790476 0.510996 0.337684 -vn 0.736229 0.256875 0.626085 -vn 0.736229 0.256875 0.626085 -vn 0.790476 0.510996 0.337684 -vn 0.675523 0.489859 0.551096 -vn 0.395709 0.594759 0.699769 -vn 0.464356 0.290440 0.836671 -vn 0.675523 0.489859 0.551096 -vn 0.675523 0.489859 0.551096 -vn 0.464356 0.290440 0.836671 -vn 0.736229 0.256875 0.626085 -vn 0.190440 0.332540 0.923661 -vn 0.172841 0.641260 0.747604 -vn -0.000000 0.342544 0.939502 -vn -0.000000 0.342544 0.939502 -vn 0.172841 0.641260 0.747604 -vn 0.000000 0.644588 0.764530 -vn 0.113784 0.993394 -0.014901 -vn -0.000000 0.999950 -0.010010 -vn 0.107263 0.993482 0.038571 -vn 0.107263 0.993482 0.038571 -vn -0.000000 0.999950 -0.010010 -vn -0.000000 0.999113 0.042110 -vn 0.285655 0.957858 0.030146 -vn 0.564449 0.824801 0.033177 -vn 0.293378 0.955452 -0.032274 -vn 0.293378 0.955452 -0.032274 -vn 0.564449 0.824801 0.033177 -vn 0.558464 0.827906 -0.051870 -vn 0.558464 0.827906 -0.051870 -vn 0.564449 0.824801 0.033177 -vn 0.795043 0.603545 -0.060330 -vn 0.795043 0.603545 -0.060330 -vn 0.564449 0.824801 0.033177 -vn 0.811511 0.582008 0.052118 -vn 0.872500 0.486439 0.046048 -vn 0.795043 0.603545 -0.060330 -vn 0.921473 0.383876 0.059379 -vn 0.921473 0.383876 0.059379 -vn 0.795043 0.603545 -0.060330 -vn 0.811511 0.582008 0.052118 -vn 0.910702 0.410936 -0.041879 -vn 0.887379 0.408080 0.214547 -vn 0.775796 0.611274 -0.156478 -vn 0.665715 0.458373 0.588828 -vn 0.910702 0.410936 -0.041879 -vn 0.663248 0.596004 0.452638 -vn 0.795043 0.603545 -0.060330 -vn 0.737048 0.630837 -0.242495 -vn 0.558464 0.827906 -0.051870 -vn 0.558464 0.827906 -0.051870 -vn 0.737048 0.630837 -0.242495 -vn 0.531461 0.826347 -0.186276 -vn 0.558464 0.827906 -0.051870 -vn 0.531461 0.826347 -0.186276 -vn 0.293378 0.955452 -0.032274 -vn 0.293378 0.955452 -0.032274 -vn 0.531461 0.826347 -0.186276 -vn 0.289060 0.948825 -0.127180 -vn 0.000000 0.996295 -0.085997 -vn -0.000000 0.999950 -0.010010 -vn 0.124090 0.987698 -0.095156 -vn 0.124090 0.987698 -0.095156 -vn -0.000000 0.999950 -0.010010 -vn 0.113784 0.993394 -0.014901 -vn 0.895262 0.186285 0.404727 -vn 0.883142 0.315792 0.346895 -vn 0.775527 -0.000898 0.631313 -vn 0.775527 -0.000898 0.631313 -vn 0.883142 0.315792 0.346895 -vn 0.879022 -0.245419 0.408766 -vn 0.964631 0.193831 0.178653 -vn 0.883142 0.315792 0.346895 -vn 0.872500 0.486439 0.046048 -vn 0.737048 0.630837 -0.242495 -vn 0.795043 0.603545 -0.060330 -vn 0.695502 0.699075 -0.166048 -vn 0.695502 0.699075 -0.166048 -vn 0.795043 0.603545 -0.060330 -vn 0.872500 0.486439 0.046048 -vn 0.762062 -0.580087 0.287682 -vn 0.693869 -0.717639 -0.059504 -vn 0.440580 -0.890619 -0.112635 -vn 0.440580 -0.890619 -0.112635 -vn 0.693869 -0.717639 -0.059504 -vn 0.688953 -0.713776 -0.125968 -vn 0.643614 0.102220 0.758493 -vn 0.869836 -0.056841 0.490055 -vn 0.643794 0.051604 0.763457 -vn 0.643794 0.051604 0.763457 -vn 0.869836 -0.056841 0.490055 -vn 0.833627 -0.033590 0.551305 -vn 0.807536 0.080137 0.584349 -vn 0.643614 0.102220 0.758493 -vn 0.652378 0.102382 0.750946 -vn 0.652378 0.102382 0.750946 -vn 0.643614 0.102220 0.758493 -vn 0.643794 0.051604 0.763457 -vn 0.652378 0.102382 0.750946 -vn 0.926853 0.296065 0.230845 -vn 0.807536 0.080137 0.584349 -vn 0.807536 0.080137 0.584349 -vn 0.849402 0.514429 0.117811 -vn 0.992109 -0.110931 -0.058437 -vn 0.998468 0.034872 0.042952 -vn 0.787499 0.326946 0.522448 -vn 0.992653 0.114144 0.040135 -vn 0.000000 0.077721 -0.996975 -vn 0.000000 0.152101 -0.988365 -vn 0.103853 0.070740 -0.992074 -vn 0.103853 0.070740 -0.992074 -vn 0.000000 0.152101 -0.988365 -vn 0.170294 0.181676 -0.968501 -vn 0.402909 -0.008557 -0.915200 -vn 0.394310 0.036711 -0.918244 -vn 0.339259 0.010099 -0.940639 -vn 0.339259 0.010099 -0.940639 -vn 0.394310 0.036711 -0.918244 -vn 0.341576 0.029789 -0.939382 -vn 0.402909 -0.008557 -0.915200 -vn 0.452658 0.019859 -0.891463 -vn 0.394310 0.036711 -0.918244 -vn 0.394310 0.036711 -0.918244 -vn 0.452658 0.019859 -0.891463 -vn 0.426493 0.056983 -0.902694 -vn 0.911055 0.107518 -0.398019 -vn 0.783256 0.126122 -0.608771 -vn 0.891648 0.172871 -0.418426 -vn 0.891648 0.172871 -0.418426 -vn 0.783256 0.126122 -0.608771 -vn 0.767576 0.190717 -0.611926 -vn 0.978524 0.071526 -0.193328 -vn 0.911055 0.107518 -0.398019 -vn 0.963287 0.140801 -0.228590 -vn 0.963287 0.140801 -0.228590 -vn 0.911055 0.107518 -0.398019 -vn 0.891648 0.172871 -0.418426 -vn 0.784323 -0.020364 0.620019 -vn 0.804548 -0.044303 0.592232 -vn 0.791556 -0.097603 0.603252 -vn 0.643794 0.051604 0.763457 -vn 0.784323 -0.020364 0.620019 -vn 0.865823 -0.075119 0.494680 -vn 0.865823 -0.075119 0.494680 -vn 0.784323 -0.020364 0.620019 -vn 0.894455 -0.085918 0.438826 -vn 0.894455 -0.085918 0.438826 -vn 0.987210 -0.158821 -0.013868 -vn 0.865823 -0.075119 0.494680 -vn 0.865823 -0.075119 0.494680 -vn 0.987210 -0.158821 -0.013868 -vn 0.951661 -0.299535 -0.067968 -vn 0.936547 -0.324609 -0.132316 -vn 0.951661 -0.299535 -0.067968 -vn 0.986121 -0.113166 -0.121487 -vn 0.986121 -0.113166 -0.121487 -vn 0.951661 -0.299535 -0.067968 -vn 0.987210 -0.158821 -0.013868 -vn 0.911130 -0.251283 -0.326649 -vn 0.936547 -0.324609 -0.132316 -vn 0.944819 -0.103296 -0.310882 -vn 0.944819 -0.103296 -0.310882 -vn 0.936547 -0.324609 -0.132316 -vn 0.986121 -0.113166 -0.121487 -vn 0.776501 -0.261174 -0.573441 -vn 0.911130 -0.251283 -0.326649 -vn 0.817637 -0.091284 -0.568451 -vn 0.817637 -0.091284 -0.568451 -vn 0.911130 -0.251283 -0.326649 -vn 0.944819 -0.103296 -0.310882 -vn 0.582436 -0.291964 -0.758634 -vn 0.776501 -0.261174 -0.573441 -vn 0.615939 -0.083779 -0.783326 -vn 0.615939 -0.083779 -0.783326 -vn 0.776501 -0.261174 -0.573441 -vn 0.817637 -0.091284 -0.568451 -vn 0.203644 -0.349140 -0.914675 -vn 0.389637 -0.317883 -0.864369 -vn 0.205817 -0.136223 -0.969063 -vn 0.205817 -0.136223 -0.969063 -vn 0.389637 -0.317883 -0.864369 -vn 0.394315 -0.101461 -0.913357 -vn 0.000000 -0.346225 -0.938152 -vn 0.203644 -0.349140 -0.914675 -vn 0.000000 -0.144658 -0.989482 -vn 0.000000 -0.144658 -0.989482 -vn 0.203644 -0.349140 -0.914675 -vn 0.205817 -0.136223 -0.969063 -vn 0.000000 -0.139213 -0.990262 -vn -0.000000 0.003909 -0.999992 -vn 0.143223 -0.147346 -0.978661 -vn 0.143223 -0.147346 -0.978661 -vn -0.000000 0.003909 -0.999992 -vn 0.141923 0.004781 -0.989866 -vn 0.338040 -0.168109 -0.925996 -vn 0.143223 -0.147346 -0.978661 -vn 0.341784 0.005125 -0.939765 -vn 0.341784 0.005125 -0.939765 -vn 0.143223 -0.147346 -0.978661 -vn 0.141923 0.004781 -0.989866 -vn 0.707443 -0.172771 -0.685328 -vn 0.530815 -0.169218 -0.830422 -vn 0.732050 0.035948 -0.680302 -vn 0.732050 0.035948 -0.680302 -vn 0.530815 -0.169218 -0.830422 -vn 0.549889 0.016593 -0.835073 -vn 0.861660 -0.163786 -0.480330 -vn 0.707443 -0.172771 -0.685328 -vn 0.879747 0.084713 -0.467833 -vn 0.879747 0.084713 -0.467833 -vn 0.707443 -0.172771 -0.685328 -vn 0.732050 0.035948 -0.680302 -vn 0.957770 -0.134386 -0.254199 -vn 0.861660 -0.163786 -0.480330 -vn 0.963144 0.096949 -0.250908 -vn 0.963144 0.096949 -0.250908 -vn 0.861660 -0.163786 -0.480330 -vn 0.879747 0.084713 -0.467833 -vn 0.950169 -0.026411 0.310615 -vn 0.957770 -0.134386 -0.254199 -vn 0.952537 0.082086 0.293147 -vn 0.952537 0.082086 0.293147 -vn 0.957770 -0.134386 -0.254199 -vn 0.963144 0.096949 -0.250908 -vn 0.952537 0.082086 0.293147 -vn -0.096717 0.033816 0.994737 -vn 0.950169 -0.026411 0.310615 -vn 0.950169 -0.026411 0.310615 -vn -0.096717 0.033816 0.994737 -vn -0.074275 0.267465 0.960701 -vn -0.074275 0.267465 0.960701 -vn -0.096717 0.033816 0.994737 -vn -0.800068 0.182433 0.571498 -vn -0.800068 0.182433 0.571498 -vn -0.096717 0.033816 0.994737 -vn -0.846383 -0.041168 0.530981 -vn 0.869836 -0.056841 0.490055 -vn 0.643614 0.102220 0.758493 -vn 0.905834 -0.117974 0.406875 -vn 0.905834 -0.117974 0.406875 -vn 0.643614 0.102220 0.758493 -vn 0.687158 0.108164 0.718411 -vn 0.965976 0.251500 0.060315 -vn 0.964631 0.193831 0.178653 -vn 0.921473 0.383876 0.059379 -vn 0.921473 0.383876 0.059379 -vn 0.964631 0.193831 0.178653 -vn 0.872500 0.486439 0.046048 -vn 0.614486 0.229061 -0.754942 -vn 0.767576 0.190717 -0.611926 -vn 0.698707 0.118060 -0.705599 -vn 0.698707 0.118060 -0.705599 -vn 0.767576 0.190717 -0.611926 -vn 0.783256 0.126122 -0.608771 -vn 0.727146 0.408695 -0.551567 -vn 0.561493 0.486609 -0.669281 -vn 0.783256 0.126122 -0.608771 -vn 0.783256 0.126122 -0.608771 -vn 0.561493 0.486609 -0.669281 -vn 0.698707 0.118060 -0.705599 -vn 0.670026 0.523745 -0.526077 -vn 0.515036 0.508272 -0.690216 -vn 0.727146 0.408695 -0.551567 -vn 0.727146 0.408695 -0.551567 -vn 0.515036 0.508272 -0.690216 -vn 0.561493 0.486609 -0.669281 -vn 0.730079 0.280919 -0.622953 -vn 0.556365 0.235871 -0.796758 -vn 0.670026 0.523745 -0.526077 -vn 0.670026 0.523745 -0.526077 -vn 0.556365 0.235871 -0.796758 -vn 0.515036 0.508272 -0.690216 -vn 0.732050 0.035948 -0.680302 -vn 0.549889 0.016593 -0.835073 -vn 0.730079 0.280919 -0.622953 -vn 0.730079 0.280919 -0.622953 -vn 0.549889 0.016593 -0.835073 -vn 0.556365 0.235871 -0.796758 -vn 0.137038 0.934417 -0.328765 -vn 0.229349 0.870656 -0.435152 -vn 0.141598 0.929887 -0.339500 -vn 0.141598 0.929887 -0.339500 -vn 0.229349 0.870656 -0.435152 -vn 0.233757 0.866197 -0.441656 -vn 0.151357 0.841808 -0.518122 -vn 0.149833 0.848035 -0.508318 -vn 0.141598 0.929887 -0.339500 -vn 0.141598 0.929887 -0.339500 -vn 0.149833 0.848035 -0.508318 -vn 0.137038 0.934417 -0.328765 -vn 0.783017 -0.101303 -0.613695 -vn 0.819661 -0.094117 -0.565065 -vn 0.787275 -0.100989 -0.608276 -vn 0.787275 -0.100989 -0.608276 -vn 0.819661 -0.094117 -0.565065 -vn 0.824120 -0.095081 -0.558377 -vn -0.219733 -0.075510 -0.972633 -vn -0.207125 -0.070360 -0.975781 -vn -0.113867 -0.056451 -0.991891 -vn -0.113867 -0.056451 -0.991891 -vn -0.207125 -0.070360 -0.975781 -vn -0.100825 -0.056839 -0.993279 -vn 0.796721 -0.072073 -0.600035 -vn 0.799694 -0.074176 -0.595808 -vn 0.819661 -0.094117 -0.565065 -vn 0.819661 -0.094117 -0.565065 -vn 0.799694 -0.074176 -0.595808 -vn 0.824120 -0.095081 -0.558377 -vn 0.262423 -0.608163 -0.749181 -vn 0.326439 -0.587395 -0.740544 -vn 0.262466 -0.605799 -0.751078 -vn 0.262466 -0.605799 -0.751078 -vn 0.326439 -0.587395 -0.740544 -vn 0.325064 -0.583268 -0.744400 -vn 0.325064 -0.583268 -0.744400 -vn 0.326439 -0.587395 -0.740544 -vn 0.368755 -0.617809 -0.694501 -vn 0.368755 -0.617809 -0.694501 -vn 0.326439 -0.587395 -0.740544 -vn 0.366732 -0.621124 -0.692613 -vn -0.135651 -0.058713 -0.989016 -vn -0.207125 -0.070360 -0.975781 -vn -0.144397 -0.062565 -0.987540 -vn -0.144397 -0.062565 -0.987540 -vn -0.207125 -0.070360 -0.975781 -vn -0.219733 -0.075510 -0.972633 -vn 0.530815 -0.169218 -0.830422 -vn 0.338040 -0.168109 -0.925996 -vn 0.549889 0.016593 -0.835073 -vn 0.549889 0.016593 -0.835073 -vn 0.338040 -0.168109 -0.925996 -vn 0.341784 0.005125 -0.939765 -vn 0.474424 -0.451462 -0.755715 -vn 0.298918 -0.442208 -0.845636 -vn 0.530815 -0.169218 -0.830422 -vn 0.530815 -0.169218 -0.830422 -vn 0.298918 -0.442208 -0.845636 -vn 0.338040 -0.168109 -0.925996 -vn 0.339986 -0.770658 -0.538977 -vn 0.219380 -0.740034 -0.635784 -vn 0.474424 -0.451462 -0.755715 -vn 0.474424 -0.451462 -0.755715 -vn 0.219380 -0.740034 -0.635784 -vn 0.298918 -0.442208 -0.845636 -vn 0.308118 -0.845792 -0.435546 -vn 0.213971 -0.821557 -0.528451 -vn 0.339986 -0.770658 -0.538977 -vn 0.339986 -0.770658 -0.538977 -vn 0.213971 -0.821557 -0.528451 -vn 0.219380 -0.740034 -0.635784 -vn 0.450135 -0.670894 -0.589305 -vn 0.303200 -0.657246 -0.689998 -vn 0.308118 -0.845792 -0.435546 -vn 0.308118 -0.845792 -0.435546 -vn 0.303200 -0.657246 -0.689998 -vn 0.213971 -0.821557 -0.528451 -vn 0.303200 -0.657246 -0.689998 -vn 0.450135 -0.670894 -0.589305 -vn 0.389637 -0.317883 -0.864369 -vn 0.389637 -0.317883 -0.864369 -vn 0.450135 -0.670894 -0.589305 -vn 0.582436 -0.291964 -0.758634 -vn 0.389637 -0.317883 -0.864369 -vn 0.582436 -0.291964 -0.758634 -vn 0.394315 -0.101461 -0.913357 -vn 0.394315 -0.101461 -0.913357 -vn 0.582436 -0.291964 -0.758634 -vn 0.615939 -0.083779 -0.783326 -vn 0.341784 0.005125 -0.939765 -vn 0.141923 0.004781 -0.989866 -vn 0.340643 0.199708 -0.918738 -vn 0.340643 0.199708 -0.918738 -vn 0.141923 0.004781 -0.989866 -vn 0.141285 0.197838 -0.969999 -vn 0.379772 0.322230 -0.867145 -vn 0.186911 0.318785 -0.929215 -vn 0.297017 0.614079 -0.731223 -vn 0.297017 0.614079 -0.731223 -vn 0.186911 0.318785 -0.929215 -vn 0.160628 0.572026 -0.804354 -vn 0.297017 0.614079 -0.731223 -vn 0.160628 0.572026 -0.804354 -vn 0.311586 0.626785 -0.714181 -vn 0.311586 0.626785 -0.714181 -vn 0.160628 0.572026 -0.804354 -vn 0.167735 0.583693 -0.794460 -vn 0.311586 0.626785 -0.714181 -vn 0.167735 0.583693 -0.794460 -vn 0.366912 0.544933 -0.753938 -vn 0.366912 0.544933 -0.753938 -vn 0.167735 0.583693 -0.794460 -vn 0.182275 0.548030 -0.816357 -vn 0.182275 0.548030 -0.816357 -vn 0.174351 0.814871 -0.552800 -vn 0.366912 0.544933 -0.753938 -vn 0.366912 0.544933 -0.753938 -vn 0.174351 0.814871 -0.552800 -vn 0.370339 0.773014 -0.515071 -vn 0.174351 0.814871 -0.552800 -vn 0.155681 0.954668 -0.253718 -vn 0.370339 0.773014 -0.515071 -vn 0.370339 0.773014 -0.515071 -vn 0.155681 0.954668 -0.253718 -vn 0.283844 0.920677 -0.267929 -vn 0.155681 0.954668 -0.253718 -vn 0.124090 0.987698 -0.095156 -vn 0.283844 0.920677 -0.267929 -vn 0.283844 0.920677 -0.267929 -vn 0.124090 0.987698 -0.095156 -vn 0.289060 0.948825 -0.127180 -vn 0.124090 0.987698 -0.095156 -vn 0.113784 0.993394 -0.014901 -vn 0.289060 0.948825 -0.127180 -vn 0.289060 0.948825 -0.127180 -vn 0.113784 0.993394 -0.014901 -vn 0.293378 0.955452 -0.032274 -vn 0.107263 0.993482 0.038571 -vn 0.285655 0.957858 0.030146 -vn 0.113784 0.993394 -0.014901 -vn 0.113784 0.993394 -0.014901 -vn 0.285655 0.957858 0.030146 -vn 0.293378 0.955452 -0.032274 -vn 0.285655 0.957858 0.030146 -vn 0.107263 0.993482 0.038571 -vn 0.271656 0.956444 0.106859 -vn 0.271656 0.956444 0.106859 -vn 0.107263 0.993482 0.038571 -vn 0.101507 0.989456 0.103309 -vn 0.151422 0.882115 0.446031 -vn 0.306688 0.839558 0.448424 -vn 0.114776 0.969606 0.216080 -vn 0.114776 0.969606 0.216080 -vn 0.306688 0.839558 0.448424 -vn 0.269387 0.933644 0.236092 -vn 0.172841 0.641260 0.747604 -vn 0.395709 0.594759 0.699769 -vn 0.151422 0.882115 0.446031 -vn 0.151422 0.882115 0.446031 -vn 0.395709 0.594759 0.699769 -vn 0.306688 0.839558 0.448424 -vn 0.172841 0.641260 0.747604 -vn 0.190440 0.332540 0.923661 -vn 0.395709 0.594759 0.699769 -vn 0.395709 0.594759 0.699769 -vn 0.190440 0.332540 0.923661 -vn 0.464356 0.290440 0.836671 -vn 0.478164 0.165313 0.862572 -vn 0.464356 0.290440 0.836671 -vn 0.189718 0.191129 0.963056 -vn 0.189718 0.191129 0.963056 -vn 0.464356 0.290440 0.836671 -vn 0.190440 0.332540 0.923661 -vn 0.186911 0.318785 -0.929215 -vn 0.379772 0.322230 -0.867145 -vn 0.170294 0.181676 -0.968501 -vn 0.170294 0.181676 -0.968501 -vn 0.379772 0.322230 -0.867145 -vn 0.409926 0.237447 -0.880670 -vn 0.000000 0.303281 -0.952901 -vn 0.186911 0.318785 -0.929215 -vn 0.000000 0.152101 -0.988365 -vn 0.000000 0.152101 -0.988365 -vn 0.186911 0.318785 -0.929215 -vn 0.170294 0.181676 -0.968501 -vn 0.379772 0.322230 -0.867145 -vn 0.565694 0.317444 -0.761065 -vn 0.409926 0.237447 -0.880670 -vn 0.409926 0.237447 -0.880670 -vn 0.565694 0.317444 -0.761065 -vn 0.614486 0.229061 -0.754942 -vn 0.767576 0.190717 -0.611926 -vn 0.614486 0.229061 -0.754942 -vn 0.708098 0.345784 -0.615654 -vn 0.708098 0.345784 -0.615654 -vn 0.614486 0.229061 -0.754942 -vn 0.565694 0.317444 -0.761065 -vn 0.978524 0.071526 -0.193328 -vn 0.963287 0.140801 -0.228590 -vn 0.865780 0.298022 0.402004 -vn 0.963287 0.140801 -0.228590 -vn 0.887417 0.192326 0.418929 -vn 0.865780 0.298022 0.402004 -vn 0.787499 0.326946 0.522448 -vn 0.865780 0.298022 0.402004 -vn 0.790440 0.189724 0.582417 -vn 0.790440 0.189724 0.582417 -vn 0.865780 0.298022 0.402004 -vn 0.887417 0.192326 0.418929 -vn 0.790440 0.189724 0.582417 -vn 0.992653 0.114144 0.040135 -vn 0.787499 0.326946 0.522448 -vn 0.804548 -0.044303 0.592232 -vn 0.833627 -0.033590 0.551305 -vn 0.796174 -0.034614 0.604077 -vn 0.865823 -0.075119 0.494680 -vn 0.734614 -0.292666 0.612119 -vn 0.643794 0.051604 0.763457 -vn 0.998468 0.034872 0.042952 -vn 0.992653 0.114144 0.040135 -vn 0.998297 0.019801 0.054872 -vn 0.998297 0.019801 0.054872 -vn 0.992653 0.114144 0.040135 -vn 0.987901 0.136372 0.073847 -vn 0.731349 0.176702 0.658715 -vn 0.926994 -0.129511 0.352007 -vn 0.687158 0.108164 0.718411 -vn 0.687158 0.108164 0.718411 -vn 0.926994 -0.129511 0.352007 -vn 0.905834 -0.117974 0.406875 -vn 0.216505 -0.964012 0.154295 -vn 0.344016 -0.936633 0.066114 -vn 0.128723 -0.973951 0.186681 -vn 0.804548 -0.044303 0.592232 -vn 0.796174 -0.034614 0.604077 -vn 0.791053 -0.070536 0.607668 -vn 0.051570 -0.896247 0.440547 -vn 0.055472 -0.996740 -0.058593 -vn 0.035555 -0.976723 0.211536 -vn 0.035555 -0.976723 0.211536 -vn 0.055472 -0.996740 -0.058593 -vn 0.040877 -0.998968 -0.019776 -vn 0.173479 0.168868 0.970252 -vn 0.170701 0.176661 0.969357 -vn 0.103368 0.223513 0.969204 -vn 0.103368 0.223513 0.969204 -vn 0.170701 0.176661 0.969357 -vn 0.097159 0.235044 0.967117 -vn 0.052936 0.216365 0.974876 -vn 0.064598 0.228971 0.971287 -vn 0.097159 0.235044 0.967117 -vn 0.097159 0.235044 0.967117 -vn 0.064598 0.228971 0.971287 -vn 0.103368 0.223513 0.969204 -vn 0.170701 0.176661 0.969357 -vn 0.173479 0.168868 0.970252 -vn 0.168149 0.101726 0.980499 -vn 0.168149 0.101726 0.980499 -vn 0.173479 0.168868 0.970252 -vn 0.164097 0.082307 0.983004 -vn 0.064598 0.228971 0.971287 -vn 0.052936 0.216365 0.974876 -vn 0.028834 -0.044924 0.998574 -vn 0.028834 -0.044924 0.998574 -vn 0.052936 0.216365 0.974876 -vn 0.002361 -0.045708 0.998952 -vn 0.116158 0.033510 0.992665 -vn 0.123951 0.033775 0.991713 -vn 0.164097 0.082307 0.983004 -vn 0.164097 0.082307 0.983004 -vn 0.123951 0.033775 0.991713 -vn 0.168149 0.101726 0.980499 -vn 0.082393 -0.961065 0.263752 -vn 0.216505 -0.964012 0.154295 -vn 0.031297 -0.968343 0.247652 -vn 0.031297 -0.968343 0.247652 -vn 0.216505 -0.964012 0.154295 -vn 0.128723 -0.973951 0.186681 -vn 0.035555 -0.976723 0.211536 -vn 0.069238 -0.603543 0.794318 -vn 0.051570 -0.896247 0.440547 -vn 0.051570 -0.896247 0.440547 -vn 0.069238 -0.603543 0.794318 -vn 0.059046 -0.495915 0.866361 -vn -0.073850 -0.984960 -0.156207 -vn -0.011693 -0.985385 -0.169942 -vn -0.066127 -0.984212 -0.164178 -vn -0.066127 -0.984212 -0.164178 -vn -0.011693 -0.985385 -0.169942 -vn -0.001533 -0.984680 -0.174366 -vn -0.093677 -0.987412 -0.127443 -vn -0.073850 -0.984960 -0.156207 -vn -0.091072 -0.986479 -0.136255 -vn -0.091072 -0.986479 -0.136255 -vn -0.073850 -0.984960 -0.156207 -vn -0.066127 -0.984212 -0.164178 -vn 0.000000 -0.998857 -0.047789 -vn -0.055000 -0.996369 -0.064993 -vn -0.000000 -0.998702 -0.050933 -vn -0.000000 -0.998702 -0.050933 -vn -0.055000 -0.996369 -0.064993 -vn -0.055740 -0.996133 -0.067916 -vn -0.011693 -0.985385 -0.169942 -vn 0.049456 -0.988223 -0.144810 -vn -0.001533 -0.984680 -0.174366 -vn -0.001533 -0.984680 -0.174366 -vn 0.049456 -0.988223 -0.144810 -vn 0.055033 -0.987514 -0.147607 -vn 0.049456 -0.988223 -0.144810 -vn 0.071620 -0.991106 -0.112155 -vn 0.055033 -0.987514 -0.147607 -vn 0.055033 -0.987514 -0.147607 -vn 0.071620 -0.991106 -0.112155 -vn 0.073058 -0.990988 -0.112275 -vn 0.073058 -0.990988 -0.112275 -vn 0.071620 -0.991106 -0.112155 -vn 0.055472 -0.996740 -0.058593 -vn 0.055472 -0.996740 -0.058593 -vn 0.071620 -0.991106 -0.112155 -vn 0.060234 -0.996137 -0.063893 -vn 0.055472 -0.996740 -0.058593 -vn 0.060234 -0.996137 -0.063893 -vn 0.040877 -0.998968 -0.019776 -vn -0.085404 -0.992811 -0.083858 -vn -0.093677 -0.987412 -0.127443 -vn -0.085338 -0.992316 -0.089595 -vn -0.085338 -0.992316 -0.089595 -vn -0.093677 -0.987412 -0.127443 -vn -0.091072 -0.986479 -0.136255 -vn -0.055000 -0.996369 -0.064993 -vn -0.085404 -0.992811 -0.083858 -vn -0.055740 -0.996133 -0.067916 -vn -0.055740 -0.996133 -0.067916 -vn -0.085404 -0.992811 -0.083858 -vn -0.085338 -0.992316 -0.089595 -vn 0.905940 0.384539 0.177207 -vn 0.859273 0.317420 0.401117 -vn 0.941576 0.289157 0.172692 -vn 0.941576 0.289157 0.172692 -vn 0.859273 0.317420 0.401117 -vn 0.877960 0.234283 0.417490 -vn 0.101507 0.989456 0.103309 -vn -0.000000 0.994745 0.102388 -vn 0.114776 0.969606 0.216080 -vn 0.114776 0.969606 0.216080 -vn -0.000000 0.994745 0.102388 -vn -0.000000 0.977356 0.211603 -vn 0.271656 0.956444 0.106859 -vn 0.101507 0.989456 0.103309 -vn 0.269387 0.933644 0.236092 -vn 0.269387 0.933644 0.236092 -vn 0.101507 0.989456 0.103309 -vn 0.114776 0.969606 0.216080 -vn 0.586343 0.801355 0.118456 -vn 0.271656 0.956444 0.106859 -vn 0.566436 0.773715 0.283751 -vn 0.566436 0.773715 0.283751 -vn 0.271656 0.956444 0.106859 -vn 0.269387 0.933644 0.236092 -vn 0.813126 0.562843 0.148437 -vn 0.586343 0.801355 0.118456 -vn 0.790476 0.510996 0.337684 -vn 0.790476 0.510996 0.337684 -vn 0.586343 0.801355 0.118456 -vn 0.566436 0.773715 0.283751 -vn 0.813126 0.562843 0.148437 -vn 0.790476 0.510996 0.337684 -vn 0.905940 0.384539 0.177207 -vn 0.905940 0.384539 0.177207 -vn 0.790476 0.510996 0.337684 -vn 0.859273 0.317420 0.401117 -vn 0.796705 -0.095826 0.596723 -vn 0.791556 -0.097603 0.603252 -vn 0.804548 -0.044303 0.592232 -vn 0.069238 -0.603543 0.794318 -vn 0.028834 -0.044924 0.998574 -vn 0.059046 -0.495915 0.866361 -vn 0.059046 -0.495915 0.866361 -vn 0.028834 -0.044924 0.998574 -vn 0.002361 -0.045708 0.998952 -vn 0.796705 -0.095826 0.596723 -vn 0.804548 -0.044303 0.592232 -vn 0.791053 -0.070536 0.607668 -vn 0.068959 0.997617 0.002300 -vn 0.218354 0.974305 0.055235 -vn 0.084065 0.996201 0.022715 -vn 0.084065 0.996201 0.022715 -vn 0.218354 0.974305 0.055235 -vn 0.252470 0.964683 0.075137 -vn 0.014728 0.999791 -0.014175 -vn 0.068959 0.997617 0.002300 -vn 0.018825 0.999773 -0.010023 -vn 0.018825 0.999773 -0.010023 -vn 0.068959 0.997617 0.002300 -vn 0.084065 0.996201 0.022715 -vn 0.015249 0.999853 -0.007842 -vn 0.014728 0.999791 -0.014175 -vn 0.015359 0.999847 -0.008355 -vn 0.015359 0.999847 -0.008355 -vn 0.014728 0.999791 -0.014175 -vn 0.018825 0.999773 -0.010023 -vn 0.007721 0.999968 -0.001961 -vn 0.007912 0.999965 -0.002547 -vn 0.015359 0.999847 -0.008355 -vn 0.015359 0.999847 -0.008355 -vn 0.007912 0.999965 -0.002547 -vn 0.015249 0.999853 -0.007842 -vn 0.000000 1.000000 -0.000000 -vn -0.000000 1.000000 -0.000005 -vn 0.007721 0.999968 -0.001961 -vn 0.007721 0.999968 -0.001961 -vn -0.000000 1.000000 -0.000005 -vn 0.007912 0.999965 -0.002547 -vn 0.110017 0.005351 -0.993915 -vn 0.111445 0.005659 -0.993755 -vn 0.126614 0.038353 -0.991210 -vn 0.126614 0.038353 -0.991210 -vn 0.111445 0.005659 -0.993755 -vn 0.133476 0.042166 -0.990155 -vn 0.126614 0.038353 -0.991210 -vn 0.133476 0.042166 -0.990155 -vn 0.253493 0.077283 -0.964245 -vn 0.253493 0.077283 -0.964245 -vn 0.133476 0.042166 -0.990155 -vn 0.262361 0.077868 -0.961823 -vn 0.340643 0.199708 -0.918738 -vn 0.306784 0.535384 -0.786923 -vn 0.556365 0.235871 -0.796758 -vn 0.556365 0.235871 -0.796758 -vn 0.306784 0.535384 -0.786923 -vn 0.515036 0.508272 -0.690216 -vn 0.141907 0.486043 -0.862337 -vn 0.306784 0.535384 -0.786923 -vn 0.141285 0.197838 -0.969999 -vn 0.141285 0.197838 -0.969999 -vn 0.306784 0.535384 -0.786923 -vn 0.340643 0.199708 -0.918738 -vn -0.888112 0.137352 -0.438624 -vn -0.946841 -0.010033 -0.321544 -vn -0.961150 0.056049 -0.270275 -vn -0.956670 -0.001270 0.291171 -vn -0.963043 0.024640 0.268217 -vn -0.840437 -0.003126 0.541901 -vn -0.840437 -0.003126 0.541901 -vn -0.963043 0.024640 0.268217 -vn -0.857807 0.003552 0.513960 -vn -0.621471 -0.025881 0.783010 -vn -0.840437 -0.003126 0.541901 -vn -0.649274 -0.021358 0.760255 -vn -0.649274 -0.021358 0.760255 -vn -0.840437 -0.003126 0.541901 -vn -0.857807 0.003552 0.513960 -vn -0.223132 -0.032589 0.974243 -vn 0.000000 -0.039132 0.999234 -vn -0.212283 -0.038788 0.976438 -vn -0.212283 -0.038788 0.976438 -vn 0.000000 -0.039132 0.999234 -vn -0.000000 -0.037251 0.999306 -vn -0.963043 0.024640 0.268217 -vn -0.956670 -0.001270 0.291171 -vn -0.996973 0.006708 0.077452 -vn -0.996973 0.006708 0.077452 -vn -0.956670 -0.001270 0.291171 -vn -0.994531 0.006140 0.104260 -vn -0.996973 0.006708 0.077452 -vn -0.999371 0.000763 -0.035441 -vn -0.984573 -0.023021 -0.173451 -vn -0.999371 0.000763 -0.035441 -vn -0.996973 0.006708 0.077452 -vn -0.994531 0.006140 0.104260 -vn -0.928473 0.002886 -0.371389 -vn -0.984573 -0.023021 -0.173451 -vn -0.946841 -0.010033 -0.321544 -vn -0.946841 -0.010033 -0.321544 -vn -0.984573 -0.023021 -0.173451 -vn -0.961150 0.056049 -0.270275 -vn -0.961150 0.056049 -0.270275 -vn -0.984573 -0.023021 -0.173451 -vn -0.999371 0.000763 -0.035441 -vn -0.621471 -0.025881 0.783010 -vn -0.649274 -0.021358 0.760255 -vn -0.405789 -0.043061 0.912952 -vn -0.405789 -0.043061 0.912952 -vn -0.649274 -0.021358 0.760255 -vn -0.427059 -0.024260 0.903898 -vn -0.405789 -0.043061 0.912952 -vn -0.427059 -0.024260 0.903898 -vn -0.212283 -0.038788 0.976438 -vn -0.212283 -0.038788 0.976438 -vn -0.427059 -0.024260 0.903898 -vn -0.223132 -0.032589 0.974243 -vn -0.984573 -0.023021 -0.173451 -vn -0.928473 0.002886 -0.371389 -vn -0.962439 -0.024231 -0.270413 -vn -0.202739 -0.978340 -0.041815 -vn -0.023703 -0.999235 -0.031121 -vn -0.050170 -0.995292 -0.082922 -vn 0.601143 0.119267 0.790191 -vn 0.614054 0.126132 0.779120 -vn 0.603048 0.121629 0.788378 -vn 0.614054 0.126132 0.779120 -vn 0.601143 0.119267 0.790191 -vn 0.601351 0.120282 0.789879 -vn 0.601143 0.119267 0.790191 -vn 0.597652 0.112916 0.793764 -vn 0.601351 0.120282 0.789879 -vn 0.603048 0.121629 0.788378 -vn 0.614054 0.126132 0.779120 -vn 0.599764 0.125022 0.790350 -vn 0.599764 0.125022 0.790350 -vn 0.614054 0.126132 0.779120 -vn 0.635852 0.133040 0.760258 -vn 0.635852 0.133040 0.760258 -vn 0.614054 0.126132 0.779120 -vn 0.687777 0.151464 0.709945 -vn 0.597652 0.112916 0.793764 -vn 0.572388 0.153981 0.805396 -vn 0.601351 0.120282 0.789879 -vn 0.572388 0.153981 0.805396 -vn 0.594374 0.153736 0.789357 -vn 0.601351 0.120282 0.789879 -vn 0.601351 0.120282 0.789879 -vn 0.594374 0.153736 0.789357 -vn 0.668633 0.073281 0.739973 -vn 0.093377 0.001257 -0.995630 -vn 0.094757 0.001026 -0.995500 -vn 0.110017 0.005351 -0.993915 -vn 0.110017 0.005351 -0.993915 -vn 0.094757 0.001026 -0.995500 -vn 0.111445 0.005659 -0.993755 -vn 0.731349 0.176702 0.658715 -vn 0.998468 0.034872 0.042952 -vn 0.997539 -0.014146 0.068676 -vn 0.997539 -0.014146 0.068676 -vn 0.998468 0.034872 0.042952 -vn 0.998297 0.019801 0.054872 -vn -0.757937 0.083145 -0.647008 -vn -0.888112 0.137352 -0.438624 -vn -0.812212 0.128738 -0.568980 -vn -0.812212 0.128738 -0.568980 -vn -0.888112 0.137352 -0.438624 -vn -0.961150 0.056049 -0.270275 -vn -0.743623 0.126560 -0.656511 -vn -0.757937 0.083145 -0.647008 -vn -0.812212 0.128738 -0.568980 -vn -0.743623 0.126560 -0.656511 -vn -0.728687 0.061348 -0.682093 -vn -0.757937 0.083145 -0.647008 -vn -0.765253 0.041319 -0.642403 -vn -0.793371 0.048012 -0.606842 -vn -0.728687 0.061348 -0.682093 -vn -0.728687 0.061348 -0.682093 -vn -0.793371 0.048012 -0.606842 -vn -0.757937 0.083145 -0.647008 -vn -0.793371 0.048012 -0.606842 -vn -0.765253 0.041319 -0.642403 -vn -0.928473 0.002886 -0.371389 -vn 0.784323 -0.020364 0.620019 -vn 0.643794 0.051604 0.763457 -vn 0.804548 -0.044303 0.592232 -vn 0.643794 0.051604 0.763457 -vn 0.833627 -0.033590 0.551305 -vn 0.804548 -0.044303 0.592232 -vn 0.887379 0.408080 0.214547 -vn 0.910702 0.410936 -0.041879 -vn 0.665715 0.458373 0.588828 -vn 0.910702 0.410936 -0.041879 -vn 0.775796 0.611274 -0.156478 -vn 0.910865 0.382103 -0.155956 -vn 0.910865 0.382103 -0.155956 -vn 0.865780 0.298022 0.402004 -vn 0.910702 0.410936 -0.041879 -vn 0.926853 0.296065 0.230845 -vn 0.817308 0.373606 0.438665 -vn 0.849402 0.514429 0.117811 -vn 0.807536 0.080137 0.584349 -vn 0.926853 0.296065 0.230845 -vn 0.849402 0.514429 0.117811 -vn -0.996773 -0.018467 0.078112 -vn -0.996358 -0.022534 0.082241 -vn -0.963650 -0.052073 0.262043 -vn -0.963650 -0.052073 0.262043 -vn -0.996358 -0.022534 0.082241 -vn -0.962906 -0.051413 0.264895 -vn -0.999792 0.019275 -0.006705 -vn -0.999913 0.012170 -0.005074 -vn -0.996773 -0.018467 0.078112 -vn -0.996773 -0.018467 0.078112 -vn -0.999913 0.012170 -0.005074 -vn -0.996358 -0.022534 0.082241 -vn -0.252664 -0.057093 0.965868 -vn -0.251793 -0.044009 0.966780 -vn 0.000000 -0.036099 0.999348 -vn 0.000000 -0.036099 0.999348 -vn -0.251793 -0.044009 0.966780 -vn -0.000000 -0.022294 0.999751 -vn -0.493589 -0.076185 0.866352 -vn -0.494095 -0.060695 0.867287 -vn -0.252664 -0.057093 0.965868 -vn -0.252664 -0.057093 0.965868 -vn -0.494095 -0.060695 0.867287 -vn -0.251793 -0.044009 0.966780 -vn -0.689424 -0.095290 0.718063 -vn -0.690337 -0.077073 0.719371 -vn -0.493589 -0.076185 0.866352 -vn -0.493589 -0.076185 0.866352 -vn -0.690337 -0.077073 0.719371 -vn -0.494095 -0.060695 0.867287 -vn -0.861733 -0.089612 0.499385 -vn -0.862233 -0.079902 0.500170 -vn -0.689424 -0.095290 0.718063 -vn -0.689424 -0.095290 0.718063 -vn -0.862233 -0.079902 0.500170 -vn -0.690337 -0.077073 0.719371 -vn -0.963650 -0.052073 0.262043 -vn -0.962906 -0.051413 0.264895 -vn -0.861733 -0.089612 0.499385 -vn -0.861733 -0.089612 0.499385 -vn -0.962906 -0.051413 0.264895 -vn -0.862233 -0.079902 0.500170 -vn -0.508924 -0.173879 0.843067 -vn -0.580600 -0.129349 0.803849 -vn -0.530011 -0.161213 0.832525 -vn -0.530011 -0.161213 0.832525 -vn -0.580600 -0.129349 0.803849 -vn -0.606607 -0.112074 0.787063 -vn -0.420642 -0.894155 -0.153453 -vn -0.423196 -0.892876 -0.153873 -vn -0.445537 -0.885349 -0.132870 -vn -0.445537 -0.885349 -0.132870 -vn -0.423196 -0.892876 -0.153873 -vn -0.445045 -0.885607 -0.132797 -vn -0.443902 -0.894515 -0.052850 -vn -0.445537 -0.885349 -0.132870 -vn -0.444520 -0.893994 -0.056369 -vn -0.444520 -0.893994 -0.056369 -vn -0.445537 -0.885349 -0.132870 -vn -0.445045 -0.885607 -0.132797 -vn -0.382942 -0.923043 0.036704 -vn -0.443902 -0.894515 -0.052850 -vn -0.390221 -0.920247 0.029540 -vn -0.390221 -0.920247 0.029540 -vn -0.443902 -0.894515 -0.052850 -vn -0.444520 -0.893994 -0.056369 -vn -0.308278 -0.943585 0.120883 -vn -0.382942 -0.923043 0.036704 -vn -0.309267 -0.942490 0.126753 -vn -0.309267 -0.942490 0.126753 -vn -0.382942 -0.923043 0.036704 -vn -0.390221 -0.920247 0.029540 -vn -0.308278 -0.943585 0.120883 -vn -0.309267 -0.942490 0.126753 -vn -0.240249 -0.947922 0.209103 -vn -0.240249 -0.947922 0.209103 -vn -0.309267 -0.942490 0.126753 -vn -0.245596 -0.944213 0.219420 -vn -0.143501 -0.937524 0.316949 -vn -0.139148 -0.943161 0.301804 -vn -0.245596 -0.944213 0.219420 -vn -0.245596 -0.944213 0.219420 -vn -0.139148 -0.943161 0.301804 -vn -0.240249 -0.947922 0.209103 -vn -0.139148 -0.943161 0.301804 -vn -0.143501 -0.937524 0.316949 -vn 0.000000 -0.924899 0.380214 -vn 0.000000 -0.924899 0.380214 -vn -0.143501 -0.937524 0.316949 -vn 0.000000 -0.917956 0.396682 -vn -0.928473 0.002886 -0.371389 -vn -0.946841 -0.010033 -0.321544 -vn -0.793371 0.048012 -0.606842 -vn -0.207642 0.930056 -0.303118 -vn -0.218086 0.925466 -0.309759 -vn -0.208097 0.929860 -0.303408 -vn -0.208097 0.929860 -0.303408 -vn -0.218086 0.925466 -0.309759 -vn -0.218979 0.925066 -0.310326 -vn -0.854784 0.009411 -0.518898 -vn -0.854783 0.009414 -0.518900 -vn -0.854781 0.009420 -0.518903 -vn -0.854781 0.009420 -0.518903 -vn -0.854783 0.009414 -0.518900 -vn -0.854780 0.009423 -0.518904 -vn -0.391140 -0.918370 -0.060048 -vn -0.391102 -0.918388 -0.060026 -vn -0.391137 -0.918371 -0.060046 -vn -0.391137 -0.918371 -0.060046 -vn -0.391102 -0.918388 -0.060026 -vn -0.391100 -0.918389 -0.060025 -vn 0.157284 -0.147242 -0.976515 -vn 0.157283 -0.147243 -0.976515 -vn 0.157284 -0.147242 -0.976515 -vn 0.157284 -0.147242 -0.976515 -vn 0.157283 -0.147243 -0.976515 -vn 0.157282 -0.147243 -0.976515 -vn -0.791236 0.154415 0.591693 -vn -0.790899 0.154309 0.592172 -vn -0.791187 0.154399 0.591763 -vn -0.791187 0.154399 0.591763 -vn -0.790899 0.154309 0.592172 -vn -0.790837 0.154289 0.592260 -vn -0.693869 -0.717639 -0.059504 -vn -0.951661 -0.299535 -0.067968 -vn -0.734614 -0.292666 0.612119 -vn -0.951661 -0.299535 -0.067968 -vn -0.865823 -0.075119 0.494680 -vn -0.734614 -0.292666 0.612119 -vn -0.694372 -0.659335 -0.288316 -vn -0.911130 -0.251282 -0.326649 -vn -0.688953 -0.713776 -0.125968 -vn -0.911130 -0.251282 -0.326649 -vn -0.936547 -0.324609 -0.132316 -vn -0.688953 -0.713776 -0.125968 -vn -0.591638 -0.669054 -0.449811 -vn -0.776501 -0.261174 -0.573441 -vn -0.694372 -0.659335 -0.288316 -vn -0.776501 -0.261174 -0.573441 -vn -0.911130 -0.251282 -0.326649 -vn -0.694372 -0.659335 -0.288316 -vn -0.450135 -0.670894 -0.589305 -vn -0.582436 -0.291964 -0.758634 -vn -0.591638 -0.669054 -0.449811 -vn -0.582436 -0.291964 -0.758634 -vn -0.776501 -0.261174 -0.573441 -vn -0.591638 -0.669054 -0.449811 -vn -0.167519 -0.631543 -0.757027 -vn -0.203644 -0.349140 -0.914675 -vn -0.303200 -0.657246 -0.689998 -vn -0.203644 -0.349140 -0.914675 -vn -0.389637 -0.317883 -0.864369 -vn -0.303200 -0.657246 -0.689998 -vn -0.000000 -0.641479 -0.767141 -vn 0.000000 -0.346225 -0.938152 -vn -0.167519 -0.631543 -0.757027 -vn 0.000000 -0.346225 -0.938152 -vn -0.203644 -0.349140 -0.914675 -vn -0.167519 -0.631543 -0.757027 -vn -0.688953 -0.713776 -0.125968 -vn -0.440580 -0.890619 -0.112635 -vn -0.694372 -0.659335 -0.288316 -vn -0.440580 -0.890619 -0.112635 -vn -0.411066 -0.888894 -0.202218 -vn -0.694372 -0.659335 -0.288316 -vn -0.694372 -0.659335 -0.288316 -vn -0.411066 -0.888894 -0.202218 -vn -0.591638 -0.669054 -0.449811 -vn -0.411066 -0.888894 -0.202218 -vn -0.372727 -0.870575 -0.321206 -vn -0.591638 -0.669054 -0.449811 -vn -0.591638 -0.669054 -0.449811 -vn -0.372727 -0.870575 -0.321206 -vn -0.450135 -0.670894 -0.589305 -vn -0.372727 -0.870575 -0.321206 -vn -0.308118 -0.845792 -0.435546 -vn -0.450135 -0.670894 -0.589305 -vn -0.213971 -0.821557 -0.528451 -vn -0.127120 -0.776749 -0.616849 -vn -0.303200 -0.657246 -0.689998 -vn -0.127120 -0.776749 -0.616849 -vn -0.167519 -0.631543 -0.757027 -vn -0.303200 -0.657246 -0.689998 -vn -0.000000 -0.641479 -0.767141 -vn -0.167519 -0.631543 -0.757027 -vn -0.000000 -0.775130 -0.631802 -vn -0.167519 -0.631543 -0.757027 -vn -0.127120 -0.776749 -0.616849 -vn -0.000000 -0.775130 -0.631802 -vn -0.829370 -0.508464 0.231538 -vn -0.933139 -0.256382 0.252030 -vn -0.547229 -0.823054 -0.152061 -vn -0.933139 -0.256382 0.252030 -vn -0.834994 -0.497446 -0.235229 -vn -0.547229 -0.823054 -0.152061 -vn -0.547229 -0.823054 -0.152061 -vn -0.834994 -0.497446 -0.235229 -vn -0.499176 -0.817395 -0.287557 -vn -0.834994 -0.497446 -0.235229 -vn -0.746611 -0.509098 -0.428241 -vn -0.499176 -0.817395 -0.287557 -vn -0.499176 -0.817395 -0.287557 -vn -0.746611 -0.509098 -0.428241 -vn -0.433962 -0.796400 -0.421218 -vn -0.746611 -0.509098 -0.428241 -vn -0.626875 -0.487380 -0.607855 -vn -0.433962 -0.796400 -0.421218 -vn -0.433962 -0.796400 -0.421218 -vn -0.626875 -0.487380 -0.607855 -vn -0.339986 -0.770658 -0.538977 -vn -0.626875 -0.487380 -0.607855 -vn -0.474424 -0.451462 -0.755715 -vn -0.339986 -0.770658 -0.538977 -vn -0.219380 -0.740034 -0.635784 -vn -0.298918 -0.442208 -0.845636 -vn -0.105150 -0.721120 -0.684785 -vn -0.298918 -0.442208 -0.845636 -vn -0.134280 -0.433849 -0.890923 -vn -0.105150 -0.721120 -0.684785 -vn 0.000000 -0.711059 -0.703132 -vn -0.105150 -0.721120 -0.684785 -vn 0.000000 -0.428150 -0.903708 -vn -0.105150 -0.721120 -0.684785 -vn -0.134280 -0.433849 -0.890923 -vn 0.000000 -0.428150 -0.903708 -vn -0.933139 -0.256382 0.252030 -vn -0.950169 -0.026411 0.310615 -vn -0.834994 -0.497446 -0.235229 -vn -0.950169 -0.026411 0.310615 -vn -0.957770 -0.134386 -0.254199 -vn -0.834994 -0.497446 -0.235229 -vn -0.834994 -0.497446 -0.235229 -vn -0.957770 -0.134386 -0.254199 -vn -0.746611 -0.509098 -0.428241 -vn -0.957770 -0.134386 -0.254199 -vn -0.861660 -0.163786 -0.480330 -vn -0.746611 -0.509098 -0.428241 -vn -0.746611 -0.509098 -0.428241 -vn -0.861660 -0.163786 -0.480330 -vn -0.626875 -0.487380 -0.607855 -vn -0.861660 -0.163786 -0.480330 -vn -0.707443 -0.172771 -0.685328 -vn -0.626875 -0.487380 -0.607855 -vn -0.626875 -0.487380 -0.607855 -vn -0.707443 -0.172771 -0.685328 -vn -0.474424 -0.451462 -0.755715 -vn -0.707443 -0.172771 -0.685328 -vn -0.530815 -0.169218 -0.830422 -vn -0.474424 -0.451462 -0.755715 -vn -0.298918 -0.442208 -0.845636 -vn -0.338040 -0.168109 -0.925996 -vn -0.134280 -0.433849 -0.890923 -vn -0.338040 -0.168109 -0.925996 -vn -0.143223 -0.147346 -0.978661 -vn -0.134280 -0.433849 -0.890923 -vn 0.000000 -0.428150 -0.903708 -vn -0.134280 -0.433849 -0.890923 -vn 0.000000 -0.139213 -0.990262 -vn -0.134280 -0.433849 -0.890923 -vn -0.143223 -0.147346 -0.978661 -vn 0.000000 -0.139213 -0.990262 -vn -0.887379 0.408080 0.214547 -vn -0.775796 0.611274 -0.156478 -vn -0.955533 0.229356 0.185346 -vn -0.775796 0.611274 -0.156478 -vn -0.899654 0.371805 -0.228876 -vn -0.955533 0.229356 0.185346 -vn -0.838201 0.338530 -0.427570 -vn -0.899654 0.371805 -0.228876 -vn -0.748562 0.572863 -0.333891 -vn -0.899654 0.371805 -0.228876 -vn -0.775796 0.611274 -0.156478 -vn -0.748562 0.572863 -0.333891 -vn -0.838201 0.338530 -0.427570 -vn -0.748562 0.572863 -0.333891 -vn -0.730079 0.280919 -0.622953 -vn -0.748562 0.572863 -0.333891 -vn -0.670026 0.523745 -0.526076 -vn -0.730079 0.280919 -0.622953 -vn -0.141285 0.197838 -0.969999 -vn -0.141907 0.486043 -0.862337 -vn 0.000000 0.169328 -0.985560 -vn -0.141907 0.486043 -0.862337 -vn -0.000000 0.429750 -0.902948 -vn 0.000000 0.169328 -0.985560 -vn -0.910865 0.382102 -0.155957 -vn -0.852446 0.395819 -0.341559 -vn -0.775796 0.611274 -0.156478 -vn -0.852446 0.395819 -0.341559 -vn -0.748562 0.572863 -0.333891 -vn -0.775796 0.611274 -0.156478 -vn -0.852446 0.395819 -0.341559 -vn -0.727146 0.408695 -0.551567 -vn -0.748562 0.572863 -0.333891 -vn -0.727146 0.408695 -0.551567 -vn -0.670026 0.523745 -0.526076 -vn -0.748562 0.572863 -0.333891 -vn -0.561493 0.486609 -0.669281 -vn -0.260541 0.716419 -0.647196 -vn -0.515036 0.508272 -0.690216 -vn -0.260541 0.716419 -0.647196 -vn -0.306784 0.535384 -0.786923 -vn -0.515036 0.508272 -0.690216 -vn -0.306784 0.535384 -0.786923 -vn -0.260541 0.716419 -0.647196 -vn -0.141907 0.486043 -0.862337 -vn -0.260541 0.716419 -0.647196 -vn -0.139642 0.443685 -0.885237 -vn -0.141907 0.486043 -0.862337 -vn -0.141907 0.486043 -0.862337 -vn -0.139642 0.443685 -0.885237 -vn -0.000000 0.429750 -0.902948 -vn -0.139642 0.443685 -0.885237 -vn 0.000000 0.345679 -0.938353 -vn -0.000000 0.429750 -0.902948 -vn -0.978524 0.071526 -0.193328 -vn -0.910865 0.382102 -0.155957 -vn -0.865780 0.298022 0.402004 -vn -0.910702 0.410936 -0.041879 -vn -0.663248 0.596004 0.452638 -vn -0.865780 0.298022 0.402004 -vn -0.910865 0.382102 -0.155957 -vn -0.978524 0.071526 -0.193328 -vn -0.852446 0.395819 -0.341559 -vn -0.978524 0.071526 -0.193328 -vn -0.911055 0.107518 -0.398019 -vn -0.852446 0.395819 -0.341559 -vn -0.852446 0.395819 -0.341559 -vn -0.911055 0.107518 -0.398019 -vn -0.727146 0.408695 -0.551567 -vn -0.911055 0.107518 -0.398019 -vn -0.783256 0.126122 -0.608772 -vn -0.727146 0.408695 -0.551567 -vn -0.419181 0.072841 -0.904976 -vn -0.426493 0.056983 -0.902694 -vn -0.381991 0.053413 -0.922621 -vn -0.426493 0.056983 -0.902694 -vn -0.394310 0.036711 -0.918244 -vn -0.381991 0.053413 -0.922621 -vn -0.319266 0.017626 -0.947501 -vn -0.381991 0.053413 -0.922621 -vn -0.341576 0.029789 -0.939382 -vn -0.381991 0.053413 -0.922621 -vn -0.394310 0.036711 -0.918244 -vn -0.341576 0.029789 -0.939382 -vn 0.000000 0.345679 -0.938353 -vn -0.139642 0.443685 -0.885237 -vn 0.000000 0.077721 -0.996975 -vn -0.139642 0.443685 -0.885237 -vn -0.103853 0.070740 -0.992074 -vn 0.000000 0.077721 -0.996975 -vn -0.887417 0.192326 0.418929 -vn -0.895262 0.186285 0.404727 -vn -0.963287 0.140801 -0.228590 -vn -0.895262 0.186285 0.404727 -vn -0.922032 0.290901 -0.255407 -vn -0.963287 0.140801 -0.228590 -vn -0.963287 0.140801 -0.228590 -vn -0.922032 0.290901 -0.255407 -vn -0.891648 0.172871 -0.418426 -vn -0.922032 0.290901 -0.255407 -vn -0.845815 0.329793 -0.419325 -vn -0.891648 0.172871 -0.418426 -vn -0.891648 0.172871 -0.418426 -vn -0.845815 0.329793 -0.419325 -vn -0.767576 0.190717 -0.611926 -vn -0.845815 0.329793 -0.419325 -vn -0.708098 0.345784 -0.615654 -vn -0.767576 0.190717 -0.611926 -vn -0.883142 0.315792 0.346895 -vn -0.746380 0.632005 -0.208535 -vn -0.895262 0.186285 0.404727 -vn -0.746380 0.632005 -0.208535 -vn -0.922032 0.290901 -0.255407 -vn -0.895262 0.186285 0.404727 -vn -0.845815 0.329793 -0.419325 -vn -0.922032 0.290901 -0.255407 -vn -0.682306 0.642739 -0.348346 -vn -0.922032 0.290901 -0.255407 -vn -0.746380 0.632005 -0.208535 -vn -0.682306 0.642739 -0.348346 -vn -0.708098 0.345784 -0.615654 -vn -0.845815 0.329793 -0.419325 -vn -0.597176 0.623458 -0.504659 -vn -0.845815 0.329793 -0.419325 -vn -0.682306 0.642739 -0.348346 -vn -0.597176 0.623458 -0.504659 -vn -0.708098 0.345784 -0.615654 -vn -0.597176 0.623458 -0.504659 -vn -0.565694 0.317444 -0.761065 -vn -0.597176 0.623458 -0.504659 -vn -0.484964 0.591691 -0.643982 -vn -0.565694 0.317444 -0.761065 -vn -0.565694 0.317444 -0.761065 -vn -0.484964 0.591691 -0.643982 -vn -0.379772 0.322230 -0.867145 -vn -0.484964 0.591691 -0.643982 -vn -0.297017 0.614079 -0.731223 -vn -0.379772 0.322230 -0.867145 -vn -0.186911 0.318785 -0.929215 -vn -0.160628 0.572026 -0.804354 -vn 0.000000 0.303281 -0.952901 -vn -0.160628 0.572026 -0.804354 -vn 0.000000 0.566902 -0.823785 -vn 0.000000 0.303281 -0.952901 -vn -0.872500 0.486439 0.046048 -vn -0.695502 0.699074 -0.166048 -vn -0.883142 0.315792 0.346895 -vn -0.695502 0.699074 -0.166048 -vn -0.746380 0.632005 -0.208535 -vn -0.883142 0.315792 0.346895 -vn -0.682306 0.642739 -0.348346 -vn -0.746380 0.632005 -0.208535 -vn -0.641577 0.697453 -0.319279 -vn -0.746380 0.632005 -0.208535 -vn -0.695502 0.699074 -0.166048 -vn -0.641577 0.697453 -0.319279 -vn -0.597176 0.623458 -0.504659 -vn -0.682306 0.642739 -0.348346 -vn -0.576935 0.677233 -0.456619 -vn -0.682306 0.642739 -0.348346 -vn -0.641577 0.697453 -0.319279 -vn -0.576935 0.677233 -0.456619 -vn -0.484964 0.591691 -0.643982 -vn -0.597176 0.623458 -0.504659 -vn -0.445043 0.671109 -0.592916 -vn -0.597176 0.623458 -0.504659 -vn -0.576935 0.677233 -0.456619 -vn -0.445043 0.671109 -0.592916 -vn -0.484964 0.591691 -0.643982 -vn -0.445043 0.671109 -0.592916 -vn -0.297017 0.614079 -0.731223 -vn -0.445043 0.671109 -0.592916 -vn -0.311586 0.626785 -0.714181 -vn -0.297017 0.614079 -0.731223 -vn -0.160628 0.572026 -0.804354 -vn -0.167735 0.583693 -0.794460 -vn 0.000000 0.566902 -0.823785 -vn -0.167735 0.583693 -0.794460 -vn 0.000000 0.578067 -0.815989 -vn 0.000000 0.566902 -0.823785 -vn -0.827008 0.305512 0.471932 -vn -0.787499 0.326946 0.522448 -vn -0.663248 0.596004 0.452638 -vn -0.787499 0.326946 0.522448 -vn -0.865780 0.298022 0.402004 -vn -0.663248 0.596004 0.452638 -vn -0.887417 0.192326 0.418929 -vn -0.790440 0.189724 0.582417 -vn -0.895262 0.186285 0.404727 -vn -0.790440 0.189724 0.582417 -vn -0.775527 -0.000898 0.631313 -vn -0.895262 0.186285 0.404727 -vn -0.883142 0.315792 0.346895 -vn -0.879022 -0.245419 0.408766 -vn -0.964631 0.193831 0.178653 -vn -0.643794 0.051604 0.763457 -vn -0.645109 -0.423749 0.635823 -vn -0.734614 -0.292666 0.612119 -vn -0.827008 0.305512 0.471932 -vn -0.722072 0.167012 0.671356 -vn -0.731349 0.176702 0.658715 -vn -0.722072 0.167012 0.671356 -vn -0.822162 0.061563 0.565915 -vn -0.731349 0.176702 0.658715 -vn -0.731349 0.176702 0.658715 -vn -0.822162 0.061563 0.565915 -vn -0.687158 0.108164 0.718411 -vn -0.827008 0.305512 0.471932 -vn -0.663248 0.596004 0.452638 -vn -0.665715 0.458373 0.588828 -vn -0.141923 0.004781 -0.989866 -vn -0.141285 0.197838 -0.969999 -vn -0.000000 0.003909 -0.999992 -vn -0.141285 0.197838 -0.969999 -vn 0.000000 0.169328 -0.985560 -vn -0.000000 0.003909 -0.999992 -vn -0.549889 0.016593 -0.835073 -vn -0.556365 0.235871 -0.796758 -vn -0.341784 0.005125 -0.939765 -vn -0.556365 0.235871 -0.796758 -vn -0.340643 0.199708 -0.918738 -vn -0.341784 0.005125 -0.939765 -vn -0.879747 0.084713 -0.467833 -vn -0.838201 0.338530 -0.427570 -vn -0.732050 0.035948 -0.680302 -vn -0.838201 0.338530 -0.427570 -vn -0.730079 0.280919 -0.622953 -vn -0.732050 0.035948 -0.680302 -vn -0.963144 0.096949 -0.250908 -vn -0.899654 0.371805 -0.228876 -vn -0.879747 0.084713 -0.467833 -vn -0.899654 0.371805 -0.228876 -vn -0.838201 0.338530 -0.427570 -vn -0.879747 0.084713 -0.467833 -vn -0.952537 0.082086 0.293147 -vn -0.955533 0.229356 0.185346 -vn -0.963144 0.096949 -0.250908 -vn -0.955533 0.229356 0.185346 -vn -0.899654 0.371805 -0.228876 -vn -0.963144 0.096949 -0.250908 -vn -0.645109 -0.423749 0.635823 -vn -0.652378 0.102382 0.750946 -vn -0.762062 -0.580087 0.287682 -vn -0.652378 0.102382 0.750946 -vn -0.817308 0.373606 0.438665 -vn -0.762062 -0.580087 0.287682 -vn -0.066628 0.586188 0.807431 -vn -0.933139 -0.256382 0.252030 -vn -0.829370 -0.508464 0.231538 -vn -0.829370 -0.508464 0.231538 -vn -0.482375 0.684024 0.547198 -vn -0.066628 0.586188 0.807431 -vn -0.933139 -0.256382 0.252030 -vn -0.066628 0.586188 0.807431 -vn -0.950169 -0.026411 0.310615 -vn -0.066628 0.586188 0.807431 -vn 0.074275 0.267465 0.960701 -vn -0.950169 -0.026411 0.310615 -vn -0.955533 0.229356 0.185346 -vn -0.172799 -0.451525 0.875366 -vn -0.818615 -0.123715 0.560860 -vn -0.818615 -0.123715 0.560860 -vn -0.887379 0.408080 0.214547 -vn -0.955533 0.229356 0.185346 -vn 0.096717 0.033816 0.994737 -vn -0.172799 -0.451525 0.875366 -vn -0.955533 0.229356 0.185346 -vn -0.955533 0.229356 0.185346 -vn -0.952537 0.082086 0.293147 -vn 0.096717 0.033816 0.994737 -vn -0.127120 -0.776749 -0.616849 -vn -0.105150 -0.721120 -0.684785 -vn -0.000000 -0.775130 -0.631802 -vn -0.105150 -0.721120 -0.684785 -vn 0.000000 -0.711059 -0.703132 -vn -0.000000 -0.775130 -0.631802 -vn -0.213971 -0.821557 -0.528451 -vn -0.219380 -0.740034 -0.635784 -vn -0.127120 -0.776749 -0.616849 -vn -0.219380 -0.740034 -0.635784 -vn -0.105150 -0.721120 -0.684785 -vn -0.127120 -0.776749 -0.616849 -vn -0.372727 -0.870575 -0.321206 -vn -0.433962 -0.796400 -0.421218 -vn -0.308118 -0.845792 -0.435546 -vn -0.433962 -0.796400 -0.421218 -vn -0.339986 -0.770658 -0.538977 -vn -0.308118 -0.845792 -0.435546 -vn -0.411066 -0.888894 -0.202218 -vn -0.499176 -0.817395 -0.287557 -vn -0.372727 -0.870575 -0.321206 -vn -0.499176 -0.817395 -0.287557 -vn -0.433962 -0.796400 -0.421218 -vn -0.372727 -0.870575 -0.321206 -vn -0.440580 -0.890619 -0.112635 -vn -0.547229 -0.823054 -0.152061 -vn -0.411066 -0.888894 -0.202218 -vn -0.547229 -0.823054 -0.152061 -vn -0.499176 -0.817395 -0.287557 -vn -0.411066 -0.888894 -0.202218 -vn -0.762062 -0.580087 0.287682 -vn -0.829370 -0.508464 0.231538 -vn -0.440580 -0.890619 -0.112635 -vn -0.829370 -0.508464 0.231538 -vn -0.547229 -0.823054 -0.152061 -vn -0.440580 -0.890619 -0.112635 -vn -0.762062 -0.580087 0.287682 -vn -0.817308 0.373606 0.438665 -vn -0.829370 -0.508464 0.231538 -vn -0.817308 0.373606 0.438665 -vn -0.482375 0.684024 0.547198 -vn -0.829370 -0.508464 0.231538 -vn -0.822162 0.061563 0.565915 -vn -0.722072 0.167012 0.671356 -vn -0.980730 -0.192660 -0.032425 -vn -0.722072 0.167012 0.671356 -vn -0.968206 -0.249820 0.012937 -vn -0.980730 -0.192660 -0.032425 -vn -0.652378 0.102382 0.750946 -vn -0.926853 0.296065 0.230845 -vn -0.817308 0.373606 0.438665 -vn -0.849402 0.514429 0.117811 -vn -0.044560 0.961925 0.269656 -vn -0.817308 0.373606 0.438665 -vn -0.482375 0.684024 0.547198 -vn 0.454056 0.816322 0.357003 -vn -0.066628 0.586188 0.807431 -vn 0.454056 0.816322 0.357003 -vn 0.741744 0.469145 0.479291 -vn -0.066628 0.586188 0.807431 -vn -0.066628 0.586188 0.807431 -vn 0.741744 0.469145 0.479291 -vn 0.074275 0.267465 0.960701 -vn 0.741744 0.469145 0.479291 -vn 0.800068 0.182433 0.571498 -vn 0.074275 0.267465 0.960701 -vn -0.818615 -0.123715 0.560860 -vn -0.172799 -0.451525 0.875366 -vn 0.577310 -0.607635 0.545429 -vn -0.172799 -0.451525 0.875366 -vn 0.757302 -0.341398 0.556724 -vn 0.577310 -0.607635 0.545429 -vn -0.497236 -0.822134 0.277223 -vn -0.489758 -0.824720 0.282797 -vn -0.429055 -0.842434 0.325909 -vn -0.489758 -0.824720 0.282797 -vn -0.413625 -0.846061 0.336297 -vn -0.429055 -0.842434 0.325909 -vn -0.172799 -0.451525 0.875366 -vn 0.096717 0.033816 0.994737 -vn 0.757302 -0.341398 0.556724 -vn 0.096717 0.033816 0.994737 -vn 0.846383 -0.041168 0.530981 -vn 0.757302 -0.341398 0.556724 -vn -0.817308 0.373606 0.438665 -vn -0.044560 0.961925 0.269656 -vn -0.482375 0.684024 0.547198 -vn -0.044560 0.961925 0.269656 -vn 0.454056 0.816322 0.357003 -vn -0.482375 0.684024 0.547198 -vn -0.722072 0.167012 0.671356 -vn -0.827008 0.305512 0.471932 -vn -0.665715 0.458373 0.588828 -vn -0.665715 0.458373 0.588828 -vn -0.887379 0.408080 0.214547 -vn -0.818615 -0.123715 0.560860 -vn -0.818615 -0.123715 0.560860 -vn -0.722072 0.167012 0.671356 -vn -0.665715 0.458373 0.588828 -vn -0.822162 0.061563 0.565915 -vn -0.807536 0.080137 0.584349 -vn -0.687158 0.108164 0.718411 -vn -0.807536 0.080137 0.584349 -vn -0.643614 0.102220 0.758493 -vn -0.687158 0.108164 0.718411 -vn -0.980730 -0.192660 -0.032425 -vn -0.992109 -0.110931 -0.058437 -vn -0.822162 0.061563 0.565915 -vn -0.992109 -0.110931 -0.058437 -vn -0.807536 0.080137 0.584349 -vn -0.822162 0.061563 0.565915 -vn -0.643794 0.051604 0.763457 -vn -0.652378 0.102382 0.750946 -vn -0.645109 -0.423749 0.635823 -vn -0.762062 -0.580087 0.287682 -vn -0.693869 -0.717639 -0.059504 -vn -0.645109 -0.423749 0.635823 -vn -0.693869 -0.717639 -0.059504 -vn -0.734614 -0.292666 0.612119 -vn -0.645109 -0.423749 0.635823 -vn -0.688953 -0.713776 -0.125968 -vn -0.936547 -0.324609 -0.132316 -vn -0.693869 -0.717639 -0.059504 -vn -0.936547 -0.324609 -0.132316 -vn -0.951661 -0.299535 -0.067968 -vn -0.693869 -0.717639 -0.059504 -vn -0.695502 0.699074 -0.166048 -vn -0.737048 0.630837 -0.242495 -vn -0.641577 0.697453 -0.319279 -vn -0.576935 0.677233 -0.456619 -vn -0.641577 0.697453 -0.319279 -vn -0.657376 0.599430 -0.456663 -vn -0.641577 0.697453 -0.319279 -vn -0.737048 0.630837 -0.242495 -vn -0.657376 0.599430 -0.456663 -vn -0.445043 0.671109 -0.592916 -vn -0.576935 0.677233 -0.456619 -vn -0.522000 0.565707 -0.638350 -vn -0.576935 0.677233 -0.456619 -vn -0.657376 0.599430 -0.456663 -vn -0.522000 0.565707 -0.638350 -vn -0.445043 0.671109 -0.592916 -vn -0.522000 0.565707 -0.638350 -vn -0.311586 0.626785 -0.714181 -vn -0.522000 0.565707 -0.638350 -vn -0.366912 0.544933 -0.753938 -vn -0.311586 0.626785 -0.714181 -vn -0.167735 0.583693 -0.794460 -vn -0.182275 0.548030 -0.816357 -vn 0.000000 0.578067 -0.815989 -vn -0.182275 0.548030 -0.816357 -vn 0.000000 0.566147 -0.824304 -vn 0.000000 0.578067 -0.815989 -vn -0.522554 0.775614 -0.354063 -vn -0.657376 0.599430 -0.456663 -vn -0.531461 0.826347 -0.186276 -vn -0.657376 0.599430 -0.456663 -vn -0.737048 0.630837 -0.242495 -vn -0.531461 0.826347 -0.186276 -vn -0.124090 0.987698 -0.095156 -vn 0.000000 0.996295 -0.085997 -vn -0.155681 0.954668 -0.253718 -vn 0.000000 0.996295 -0.085997 -vn 0.000000 0.968551 -0.248813 -vn -0.155681 0.954668 -0.253718 -vn -0.155681 0.954668 -0.253718 -vn 0.000000 0.968551 -0.248813 -vn -0.174351 0.814871 -0.552800 -vn 0.000000 0.968551 -0.248813 -vn -0.000000 0.828372 -0.560179 -vn -0.174351 0.814871 -0.552800 -vn -0.370339 0.773014 -0.515071 -vn -0.522000 0.565707 -0.638350 -vn -0.522554 0.775614 -0.354063 -vn -0.522000 0.565707 -0.638350 -vn -0.657376 0.599430 -0.456663 -vn -0.522554 0.775614 -0.354063 -vn -0.366912 0.544933 -0.753938 -vn -0.522000 0.565707 -0.638350 -vn -0.370339 0.773014 -0.515071 -vn 0.000000 0.566147 -0.824304 -vn -0.182275 0.548030 -0.816357 -vn -0.000000 0.828372 -0.560179 -vn -0.182275 0.548030 -0.816357 -vn -0.174351 0.814871 -0.552800 -vn -0.000000 0.828372 -0.560179 -vn -0.370339 0.773014 -0.515071 -vn -0.522554 0.775614 -0.354063 -vn -0.283844 0.920677 -0.267929 -vn -0.283844 0.920677 -0.267929 -vn -0.522554 0.775614 -0.354063 -vn -0.289060 0.948825 -0.127180 -vn -0.522554 0.775614 -0.354063 -vn -0.531461 0.826347 -0.186276 -vn -0.289060 0.948825 -0.127180 -vn -0.811511 0.582008 0.052118 -vn -0.813126 0.562843 0.148437 -vn -0.564449 0.824801 0.033177 -vn -0.813126 0.562843 0.148437 -vn -0.586343 0.801355 0.118456 -vn -0.564449 0.824801 0.033177 -vn -0.107263 0.993482 0.038571 -vn -0.101507 0.989456 0.103309 -vn -0.000000 0.999113 0.042110 -vn -0.101507 0.989456 0.103309 -vn -0.000000 0.994745 0.102388 -vn -0.000000 0.999113 0.042110 -vn -0.564449 0.824801 0.033177 -vn -0.586343 0.801355 0.118456 -vn -0.285655 0.957858 0.030146 -vn -0.586343 0.801355 0.118456 -vn -0.271656 0.956444 0.106859 -vn -0.285655 0.957858 0.030146 -vn -0.675523 0.489859 0.551096 -vn -0.504243 0.754679 0.419760 -vn -0.790476 0.510996 0.337684 -vn -0.504243 0.754679 0.419760 -vn -0.566436 0.773715 0.283751 -vn -0.790476 0.510996 0.337684 -vn -0.306688 0.839558 0.448424 -vn -0.504243 0.754679 0.419760 -vn -0.395709 0.594759 0.699769 -vn -0.504243 0.754679 0.419760 -vn -0.675523 0.489859 0.551096 -vn -0.395709 0.594759 0.699769 -vn 0.000000 0.644588 0.764530 -vn -0.000000 0.890696 0.454600 -vn -0.172841 0.641260 0.747604 -vn -0.000000 0.890696 0.454600 -vn -0.151422 0.882115 0.446031 -vn -0.172841 0.641260 0.747604 -vn -0.114776 0.969606 0.216080 -vn -0.151422 0.882115 0.446031 -vn -0.000000 0.977356 0.211603 -vn -0.151422 0.882115 0.446031 -vn -0.000000 0.890696 0.454600 -vn -0.000000 0.977356 0.211603 -vn -0.306688 0.839558 0.448424 -vn -0.269387 0.933644 0.236092 -vn -0.504243 0.754679 0.419760 -vn -0.269387 0.933644 0.236092 -vn -0.566436 0.773715 0.283751 -vn -0.504243 0.754679 0.419760 -vn -0.775527 -0.000898 0.631313 -vn -0.790440 0.189724 0.582417 -vn -0.992653 0.114144 0.040135 -vn -0.879022 -0.245419 0.408766 -vn -0.775527 -0.000898 0.631313 -vn -0.992653 0.114144 0.040135 -vn -0.964631 0.193831 0.178653 -vn -0.879022 -0.245419 0.408766 -vn -0.992653 0.114144 0.040135 -vn -0.992653 0.114144 0.040135 -vn -0.965976 0.251500 0.060315 -vn -0.964631 0.193831 0.178653 -vn -0.787499 0.326946 0.522448 -vn -0.827008 0.305512 0.471932 -vn -0.998468 0.034872 0.042952 -vn -0.827008 0.305512 0.471932 -vn -0.731349 0.176702 0.658715 -vn -0.998468 0.034872 0.042952 -vn -0.941576 0.289157 0.172692 -vn -0.965976 0.251500 0.060315 -vn -0.987901 0.136372 0.073847 -vn -0.965976 0.251500 0.060315 -vn -0.992653 0.114144 0.040135 -vn -0.987901 0.136372 0.073847 -vn -0.965976 0.251500 0.060315 -vn -0.941576 0.289157 0.172692 -vn -0.905940 0.384539 0.177207 -vn -0.921473 0.383876 0.059379 -vn -0.965976 0.251500 0.060315 -vn -0.905940 0.384539 0.177207 -vn -0.730356 0.204967 0.651589 -vn -0.736229 0.256875 0.626085 -vn -0.877960 0.234283 0.417490 -vn -0.736229 0.256875 0.626085 -vn -0.859273 0.317420 0.401117 -vn -0.877960 0.234283 0.417490 -vn -0.730356 0.204967 0.651589 -vn -0.478164 0.165313 0.862572 -vn -0.736229 0.256875 0.626085 -vn -0.478164 0.165313 0.862572 -vn -0.464356 0.290440 0.836671 -vn -0.736229 0.256875 0.626085 -vn -0.000000 0.342544 0.939502 -vn -0.190440 0.332540 0.923661 -vn 0.000000 0.200670 0.979659 -vn -0.190440 0.332540 0.923661 -vn -0.189718 0.191129 0.963056 -vn 0.000000 0.200670 0.979659 -vn -0.811511 0.582008 0.052118 -vn -0.921473 0.383876 0.059379 -vn -0.813126 0.562843 0.148437 -vn -0.921473 0.383876 0.059379 -vn -0.905940 0.384539 0.177207 -vn -0.813126 0.562843 0.148437 -vn -0.859273 0.317420 0.401117 -vn -0.736229 0.256875 0.626085 -vn -0.790476 0.510996 0.337684 -vn -0.736229 0.256875 0.626085 -vn -0.675523 0.489859 0.551096 -vn -0.790476 0.510996 0.337684 -vn -0.395709 0.594759 0.699769 -vn -0.675523 0.489859 0.551096 -vn -0.464356 0.290440 0.836671 -vn -0.675523 0.489859 0.551096 -vn -0.736229 0.256875 0.626085 -vn -0.464356 0.290440 0.836671 -vn -0.190440 0.332540 0.923661 -vn -0.000000 0.342544 0.939502 -vn -0.172841 0.641260 0.747604 -vn -0.000000 0.342544 0.939502 -vn 0.000000 0.644588 0.764530 -vn -0.172841 0.641260 0.747604 -vn -0.113784 0.993394 -0.014901 -vn -0.107263 0.993482 0.038571 -vn -0.000000 0.999950 -0.010010 -vn -0.107263 0.993482 0.038571 -vn -0.000000 0.999113 0.042110 -vn -0.000000 0.999950 -0.010010 -vn -0.285655 0.957858 0.030146 -vn -0.293378 0.955452 -0.032274 -vn -0.564449 0.824801 0.033177 -vn -0.293378 0.955452 -0.032274 -vn -0.558464 0.827906 -0.051870 -vn -0.564449 0.824801 0.033177 -vn -0.558464 0.827906 -0.051870 -vn -0.795044 0.603545 -0.060330 -vn -0.564449 0.824801 0.033177 -vn -0.795044 0.603545 -0.060330 -vn -0.811511 0.582008 0.052118 -vn -0.564449 0.824801 0.033177 -vn -0.872500 0.486439 0.046048 -vn -0.921473 0.383876 0.059379 -vn -0.795044 0.603545 -0.060330 -vn -0.921473 0.383876 0.059379 -vn -0.811511 0.582008 0.052118 -vn -0.795044 0.603545 -0.060330 -vn -0.910702 0.410936 -0.041879 -vn -0.775796 0.611274 -0.156478 -vn -0.887379 0.408080 0.214547 -vn -0.665715 0.458373 0.588828 -vn -0.663248 0.596004 0.452638 -vn -0.910702 0.410936 -0.041879 -vn -0.795044 0.603545 -0.060330 -vn -0.558464 0.827906 -0.051870 -vn -0.737048 0.630837 -0.242495 -vn -0.558464 0.827906 -0.051870 -vn -0.531461 0.826347 -0.186276 -vn -0.737048 0.630837 -0.242495 -vn -0.558464 0.827906 -0.051870 -vn -0.293378 0.955452 -0.032274 -vn -0.531461 0.826347 -0.186276 -vn -0.293378 0.955452 -0.032274 -vn -0.289060 0.948825 -0.127180 -vn -0.531461 0.826347 -0.186276 -vn 0.000000 0.996295 -0.085997 -vn -0.124090 0.987698 -0.095156 -vn -0.000000 0.999950 -0.010010 -vn -0.124090 0.987698 -0.095156 -vn -0.113784 0.993394 -0.014901 -vn -0.000000 0.999950 -0.010010 -vn -0.895262 0.186285 0.404727 -vn -0.775527 -0.000898 0.631313 -vn -0.883142 0.315792 0.346895 -vn -0.775527 -0.000898 0.631313 -vn -0.879022 -0.245419 0.408766 -vn -0.883142 0.315792 0.346895 -vn -0.964631 0.193831 0.178653 -vn -0.872500 0.486439 0.046048 -vn -0.883142 0.315792 0.346895 -vn -0.737048 0.630837 -0.242495 -vn -0.695502 0.699074 -0.166048 -vn -0.795044 0.603545 -0.060330 -vn -0.695502 0.699074 -0.166048 -vn -0.872500 0.486439 0.046048 -vn -0.795044 0.603545 -0.060330 -vn -0.762062 -0.580087 0.287682 -vn -0.440580 -0.890619 -0.112635 -vn -0.693869 -0.717639 -0.059504 -vn -0.440580 -0.890619 -0.112635 -vn -0.688953 -0.713776 -0.125968 -vn -0.693869 -0.717639 -0.059504 -vn -0.643614 0.102220 0.758493 -vn -0.643794 0.051604 0.763457 -vn -0.869836 -0.056841 0.490055 -vn -0.643794 0.051604 0.763457 -vn -0.833627 -0.033590 0.551305 -vn -0.869836 -0.056841 0.490055 -vn -0.807536 0.080137 0.584349 -vn -0.652378 0.102382 0.750946 -vn -0.643614 0.102220 0.758493 -vn -0.652378 0.102382 0.750946 -vn -0.643794 0.051604 0.763457 -vn -0.643614 0.102220 0.758493 -vn -0.652378 0.102382 0.750946 -vn -0.807536 0.080137 0.584349 -vn -0.926853 0.296065 0.230845 -vn -0.807536 0.080137 0.584349 -vn -0.992109 -0.110931 -0.058437 -vn -0.849402 0.514429 0.117811 -vn -0.998468 0.034872 0.042952 -vn -0.992653 0.114144 0.040135 -vn -0.787499 0.326946 0.522448 -vn 0.000000 0.077721 -0.996975 -vn -0.103853 0.070740 -0.992074 -vn 0.000000 0.152101 -0.988365 -vn -0.103853 0.070740 -0.992074 -vn -0.170294 0.181676 -0.968501 -vn 0.000000 0.152101 -0.988365 -vn -0.402909 -0.008557 -0.915200 -vn -0.339259 0.010099 -0.940639 -vn -0.394310 0.036711 -0.918244 -vn -0.339259 0.010099 -0.940639 -vn -0.341576 0.029789 -0.939382 -vn -0.394310 0.036711 -0.918244 -vn -0.402909 -0.008557 -0.915200 -vn -0.394310 0.036711 -0.918244 -vn -0.452658 0.019859 -0.891463 -vn -0.394310 0.036711 -0.918244 -vn -0.426493 0.056983 -0.902694 -vn -0.452658 0.019859 -0.891463 -vn -0.911055 0.107518 -0.398019 -vn -0.891648 0.172871 -0.418426 -vn -0.783256 0.126122 -0.608772 -vn -0.891648 0.172871 -0.418426 -vn -0.767576 0.190717 -0.611926 -vn -0.783256 0.126122 -0.608772 -vn -0.978524 0.071526 -0.193328 -vn -0.963287 0.140801 -0.228590 -vn -0.911055 0.107518 -0.398019 -vn -0.963287 0.140801 -0.228590 -vn -0.891648 0.172871 -0.418426 -vn -0.911055 0.107518 -0.398019 -vn -0.784323 -0.020364 0.620019 -vn -0.791556 -0.097603 0.603252 -vn -0.804548 -0.044303 0.592232 -vn -0.643794 0.051604 0.763457 -vn -0.865823 -0.075119 0.494680 -vn -0.784323 -0.020364 0.620019 -vn -0.865823 -0.075119 0.494680 -vn -0.894455 -0.085918 0.438825 -vn -0.784323 -0.020364 0.620019 -vn -0.894455 -0.085918 0.438825 -vn -0.865823 -0.075119 0.494680 -vn -0.987210 -0.158821 -0.013868 -vn -0.865823 -0.075119 0.494680 -vn -0.951661 -0.299535 -0.067968 -vn -0.987210 -0.158821 -0.013868 -vn -0.936547 -0.324609 -0.132316 -vn -0.986121 -0.113166 -0.121487 -vn -0.951661 -0.299535 -0.067968 -vn -0.986121 -0.113166 -0.121487 -vn -0.987210 -0.158821 -0.013868 -vn -0.951661 -0.299535 -0.067968 -vn -0.911130 -0.251282 -0.326649 -vn -0.944819 -0.103296 -0.310882 -vn -0.936547 -0.324609 -0.132316 -vn -0.944819 -0.103296 -0.310882 -vn -0.986121 -0.113166 -0.121487 -vn -0.936547 -0.324609 -0.132316 -vn -0.776501 -0.261174 -0.573441 -vn -0.817637 -0.091284 -0.568451 -vn -0.911130 -0.251282 -0.326649 -vn -0.817637 -0.091284 -0.568451 -vn -0.944819 -0.103296 -0.310882 -vn -0.911130 -0.251282 -0.326649 -vn -0.582436 -0.291964 -0.758634 -vn -0.615939 -0.083779 -0.783326 -vn -0.776501 -0.261174 -0.573441 -vn -0.615939 -0.083779 -0.783326 -vn -0.817637 -0.091284 -0.568451 -vn -0.776501 -0.261174 -0.573441 -vn -0.203644 -0.349140 -0.914675 -vn -0.205817 -0.136223 -0.969063 -vn -0.389637 -0.317883 -0.864369 -vn -0.205817 -0.136223 -0.969063 -vn -0.394315 -0.101461 -0.913357 -vn -0.389637 -0.317883 -0.864369 -vn 0.000000 -0.346225 -0.938152 -vn 0.000000 -0.144658 -0.989482 -vn -0.203644 -0.349140 -0.914675 -vn 0.000000 -0.144658 -0.989482 -vn -0.205817 -0.136223 -0.969063 -vn -0.203644 -0.349140 -0.914675 -vn 0.000000 -0.139213 -0.990262 -vn -0.143223 -0.147346 -0.978661 -vn -0.000000 0.003909 -0.999992 -vn -0.143223 -0.147346 -0.978661 -vn -0.141923 0.004781 -0.989866 -vn -0.000000 0.003909 -0.999992 -vn -0.338040 -0.168109 -0.925996 -vn -0.341784 0.005125 -0.939765 -vn -0.143223 -0.147346 -0.978661 -vn -0.341784 0.005125 -0.939765 -vn -0.141923 0.004781 -0.989866 -vn -0.143223 -0.147346 -0.978661 -vn -0.707443 -0.172771 -0.685328 -vn -0.732050 0.035948 -0.680302 -vn -0.530815 -0.169218 -0.830422 -vn -0.732050 0.035948 -0.680302 -vn -0.549889 0.016593 -0.835073 -vn -0.530815 -0.169218 -0.830422 -vn -0.861660 -0.163786 -0.480330 -vn -0.879747 0.084713 -0.467833 -vn -0.707443 -0.172771 -0.685328 -vn -0.879747 0.084713 -0.467833 -vn -0.732050 0.035948 -0.680302 -vn -0.707443 -0.172771 -0.685328 -vn -0.957770 -0.134386 -0.254199 -vn -0.963144 0.096949 -0.250908 -vn -0.861660 -0.163786 -0.480330 -vn -0.963144 0.096949 -0.250908 -vn -0.879747 0.084713 -0.467833 -vn -0.861660 -0.163786 -0.480330 -vn -0.950169 -0.026411 0.310615 -vn -0.952537 0.082086 0.293147 -vn -0.957770 -0.134386 -0.254199 -vn -0.952537 0.082086 0.293147 -vn -0.963144 0.096949 -0.250908 -vn -0.957770 -0.134386 -0.254199 -vn -0.952537 0.082086 0.293147 -vn -0.950169 -0.026411 0.310615 -vn 0.096717 0.033816 0.994737 -vn -0.950169 -0.026411 0.310615 -vn 0.074275 0.267465 0.960701 -vn 0.096717 0.033816 0.994737 -vn 0.074275 0.267465 0.960701 -vn 0.800068 0.182433 0.571498 -vn 0.096717 0.033816 0.994737 -vn 0.800068 0.182433 0.571498 -vn 0.846383 -0.041168 0.530981 -vn 0.096717 0.033816 0.994737 -vn -0.869836 -0.056841 0.490055 -vn -0.905834 -0.117974 0.406875 -vn -0.643614 0.102220 0.758493 -vn -0.905834 -0.117974 0.406875 -vn -0.687158 0.108164 0.718411 -vn -0.643614 0.102220 0.758493 -vn -0.965976 0.251500 0.060315 -vn -0.921473 0.383876 0.059379 -vn -0.964631 0.193831 0.178653 -vn -0.921473 0.383876 0.059379 -vn -0.872500 0.486439 0.046048 -vn -0.964631 0.193831 0.178653 -vn -0.614486 0.229061 -0.754942 -vn -0.698707 0.118060 -0.705599 -vn -0.767576 0.190717 -0.611926 -vn -0.698707 0.118060 -0.705599 -vn -0.783256 0.126122 -0.608772 -vn -0.767576 0.190717 -0.611926 -vn -0.727146 0.408695 -0.551567 -vn -0.783256 0.126122 -0.608772 -vn -0.561493 0.486609 -0.669281 -vn -0.783256 0.126122 -0.608772 -vn -0.698707 0.118060 -0.705599 -vn -0.561493 0.486609 -0.669281 -vn -0.670026 0.523745 -0.526076 -vn -0.727146 0.408695 -0.551567 -vn -0.515036 0.508272 -0.690216 -vn -0.727146 0.408695 -0.551567 -vn -0.561493 0.486609 -0.669281 -vn -0.515036 0.508272 -0.690216 -vn -0.730079 0.280919 -0.622953 -vn -0.670026 0.523745 -0.526076 -vn -0.556365 0.235871 -0.796758 -vn -0.670026 0.523745 -0.526076 -vn -0.515036 0.508272 -0.690216 -vn -0.556365 0.235871 -0.796758 -vn -0.732050 0.035948 -0.680302 -vn -0.730079 0.280919 -0.622953 -vn -0.549889 0.016593 -0.835073 -vn -0.730079 0.280919 -0.622953 -vn -0.556365 0.235871 -0.796758 -vn -0.549889 0.016593 -0.835073 -vn -0.137038 0.934417 -0.328765 -vn -0.141598 0.929887 -0.339500 -vn -0.229349 0.870656 -0.435152 -vn -0.141598 0.929887 -0.339500 -vn -0.233757 0.866197 -0.441656 -vn -0.229349 0.870656 -0.435152 -vn -0.151357 0.841808 -0.518122 -vn -0.141598 0.929887 -0.339500 -vn -0.149833 0.848035 -0.508318 -vn -0.141598 0.929887 -0.339500 -vn -0.137038 0.934417 -0.328765 -vn -0.149833 0.848035 -0.508318 -vn -0.783017 -0.101303 -0.613695 -vn -0.787275 -0.100989 -0.608275 -vn -0.819661 -0.094117 -0.565065 -vn -0.787275 -0.100989 -0.608275 -vn -0.824120 -0.095081 -0.558377 -vn -0.819661 -0.094117 -0.565065 -vn 0.219733 -0.075510 -0.972633 -vn 0.113867 -0.056451 -0.991891 -vn 0.207125 -0.070360 -0.975781 -vn 0.113867 -0.056451 -0.991891 -vn 0.100825 -0.056839 -0.993279 -vn 0.207125 -0.070360 -0.975781 -vn -0.796721 -0.072073 -0.600035 -vn -0.819661 -0.094117 -0.565065 -vn -0.799694 -0.074176 -0.595808 -vn -0.819661 -0.094117 -0.565065 -vn -0.824120 -0.095081 -0.558377 -vn -0.799694 -0.074176 -0.595808 -vn -0.262423 -0.608163 -0.749181 -vn -0.262466 -0.605799 -0.751078 -vn -0.326439 -0.587395 -0.740544 -vn -0.262466 -0.605799 -0.751078 -vn -0.325064 -0.583268 -0.744400 -vn -0.326439 -0.587395 -0.740544 -vn -0.325064 -0.583268 -0.744400 -vn -0.368755 -0.617809 -0.694501 -vn -0.326439 -0.587395 -0.740544 -vn -0.368755 -0.617809 -0.694501 -vn -0.366732 -0.621124 -0.692613 -vn -0.326439 -0.587395 -0.740544 -vn 0.135651 -0.058713 -0.989016 -vn 0.144397 -0.062565 -0.987540 -vn 0.207125 -0.070360 -0.975781 -vn 0.144397 -0.062565 -0.987540 -vn 0.219733 -0.075510 -0.972633 -vn 0.207125 -0.070360 -0.975781 -vn -0.530815 -0.169218 -0.830422 -vn -0.549889 0.016593 -0.835073 -vn -0.338040 -0.168109 -0.925996 -vn -0.549889 0.016593 -0.835073 -vn -0.341784 0.005125 -0.939765 -vn -0.338040 -0.168109 -0.925996 -vn -0.474424 -0.451462 -0.755715 -vn -0.530815 -0.169218 -0.830422 -vn -0.298918 -0.442208 -0.845636 -vn -0.530815 -0.169218 -0.830422 -vn -0.338040 -0.168109 -0.925996 -vn -0.298918 -0.442208 -0.845636 -vn -0.339986 -0.770658 -0.538977 -vn -0.474424 -0.451462 -0.755715 -vn -0.219380 -0.740034 -0.635784 -vn -0.474424 -0.451462 -0.755715 -vn -0.298918 -0.442208 -0.845636 -vn -0.219380 -0.740034 -0.635784 -vn -0.308118 -0.845792 -0.435546 -vn -0.339986 -0.770658 -0.538977 -vn -0.213971 -0.821557 -0.528451 -vn -0.339986 -0.770658 -0.538977 -vn -0.219380 -0.740034 -0.635784 -vn -0.213971 -0.821557 -0.528451 -vn -0.450135 -0.670894 -0.589305 -vn -0.308118 -0.845792 -0.435546 -vn -0.303200 -0.657246 -0.689998 -vn -0.308118 -0.845792 -0.435546 -vn -0.213971 -0.821557 -0.528451 -vn -0.303200 -0.657246 -0.689998 -vn -0.303200 -0.657246 -0.689998 -vn -0.389637 -0.317883 -0.864369 -vn -0.450135 -0.670894 -0.589305 -vn -0.389637 -0.317883 -0.864369 -vn -0.582436 -0.291964 -0.758634 -vn -0.450135 -0.670894 -0.589305 -vn -0.389637 -0.317883 -0.864369 -vn -0.394315 -0.101461 -0.913357 -vn -0.582436 -0.291964 -0.758634 -vn -0.394315 -0.101461 -0.913357 -vn -0.615939 -0.083779 -0.783326 -vn -0.582436 -0.291964 -0.758634 -vn -0.341784 0.005125 -0.939765 -vn -0.340643 0.199708 -0.918738 -vn -0.141923 0.004781 -0.989866 -vn -0.340643 0.199708 -0.918738 -vn -0.141285 0.197838 -0.969999 -vn -0.141923 0.004781 -0.989866 -vn -0.379772 0.322230 -0.867145 -vn -0.297017 0.614079 -0.731223 -vn -0.186911 0.318785 -0.929215 -vn -0.297017 0.614079 -0.731223 -vn -0.160628 0.572026 -0.804354 -vn -0.186911 0.318785 -0.929215 -vn -0.297017 0.614079 -0.731223 -vn -0.311586 0.626785 -0.714181 -vn -0.160628 0.572026 -0.804354 -vn -0.311586 0.626785 -0.714181 -vn -0.167735 0.583693 -0.794460 -vn -0.160628 0.572026 -0.804354 -vn -0.311586 0.626785 -0.714181 -vn -0.366912 0.544933 -0.753938 -vn -0.167735 0.583693 -0.794460 -vn -0.366912 0.544933 -0.753938 -vn -0.182275 0.548030 -0.816357 -vn -0.167735 0.583693 -0.794460 -vn -0.182275 0.548030 -0.816357 -vn -0.366912 0.544933 -0.753938 -vn -0.174351 0.814871 -0.552800 -vn -0.366912 0.544933 -0.753938 -vn -0.370339 0.773014 -0.515071 -vn -0.174351 0.814871 -0.552800 -vn -0.174351 0.814871 -0.552800 -vn -0.370339 0.773014 -0.515071 -vn -0.155681 0.954668 -0.253718 -vn -0.370339 0.773014 -0.515071 -vn -0.283844 0.920677 -0.267929 -vn -0.155681 0.954668 -0.253718 -vn -0.155681 0.954668 -0.253718 -vn -0.283844 0.920677 -0.267929 -vn -0.124090 0.987698 -0.095156 -vn -0.283844 0.920677 -0.267929 -vn -0.289060 0.948825 -0.127180 -vn -0.124090 0.987698 -0.095156 -vn -0.124090 0.987698 -0.095156 -vn -0.289060 0.948825 -0.127180 -vn -0.113784 0.993394 -0.014901 -vn -0.289060 0.948825 -0.127180 -vn -0.293378 0.955452 -0.032274 -vn -0.113784 0.993394 -0.014901 -vn -0.107263 0.993482 0.038571 -vn -0.113784 0.993394 -0.014901 -vn -0.285655 0.957858 0.030146 -vn -0.113784 0.993394 -0.014901 -vn -0.293378 0.955452 -0.032274 -vn -0.285655 0.957858 0.030146 -vn -0.285655 0.957858 0.030146 -vn -0.271656 0.956444 0.106859 -vn -0.107263 0.993482 0.038571 -vn -0.271656 0.956444 0.106859 -vn -0.101507 0.989456 0.103309 -vn -0.107263 0.993482 0.038571 -vn -0.151422 0.882115 0.446031 -vn -0.114776 0.969606 0.216080 -vn -0.306688 0.839558 0.448424 -vn -0.114776 0.969606 0.216080 -vn -0.269387 0.933644 0.236092 -vn -0.306688 0.839558 0.448424 -vn -0.172841 0.641260 0.747604 -vn -0.151422 0.882115 0.446031 -vn -0.395709 0.594759 0.699769 -vn -0.151422 0.882115 0.446031 -vn -0.306688 0.839558 0.448424 -vn -0.395709 0.594759 0.699769 -vn -0.172841 0.641260 0.747604 -vn -0.395709 0.594759 0.699769 -vn -0.190440 0.332540 0.923661 -vn -0.395709 0.594759 0.699769 -vn -0.464356 0.290440 0.836671 -vn -0.190440 0.332540 0.923661 -vn -0.478164 0.165313 0.862572 -vn -0.189718 0.191129 0.963056 -vn -0.464356 0.290440 0.836671 -vn -0.189718 0.191129 0.963056 -vn -0.190440 0.332540 0.923661 -vn -0.464356 0.290440 0.836671 -vn -0.186911 0.318785 -0.929215 -vn -0.170294 0.181676 -0.968501 -vn -0.379772 0.322230 -0.867145 -vn -0.170294 0.181676 -0.968501 -vn -0.409926 0.237447 -0.880670 -vn -0.379772 0.322230 -0.867145 -vn 0.000000 0.303281 -0.952901 -vn 0.000000 0.152101 -0.988365 -vn -0.186911 0.318785 -0.929215 -vn 0.000000 0.152101 -0.988365 -vn -0.170294 0.181676 -0.968501 -vn -0.186911 0.318785 -0.929215 -vn -0.379772 0.322230 -0.867145 -vn -0.409926 0.237447 -0.880670 -vn -0.565694 0.317444 -0.761065 -vn -0.409926 0.237447 -0.880670 -vn -0.614486 0.229061 -0.754942 -vn -0.565694 0.317444 -0.761065 -vn -0.767576 0.190717 -0.611926 -vn -0.708098 0.345784 -0.615654 -vn -0.614486 0.229061 -0.754942 -vn -0.708098 0.345784 -0.615654 -vn -0.565694 0.317444 -0.761065 -vn -0.614486 0.229061 -0.754942 -vn -0.978524 0.071526 -0.193328 -vn -0.865780 0.298022 0.402004 -vn -0.963287 0.140801 -0.228590 -vn -0.963287 0.140801 -0.228590 -vn -0.865780 0.298022 0.402004 -vn -0.887417 0.192326 0.418929 -vn -0.787499 0.326946 0.522448 -vn -0.790440 0.189724 0.582417 -vn -0.865780 0.298022 0.402004 -vn -0.790440 0.189724 0.582417 -vn -0.887417 0.192326 0.418929 -vn -0.865780 0.298022 0.402004 -vn -0.790440 0.189724 0.582417 -vn -0.787499 0.326946 0.522448 -vn -0.992653 0.114144 0.040135 -vn -0.804548 -0.044303 0.592232 -vn -0.796174 -0.034614 0.604077 -vn -0.833627 -0.033590 0.551305 -vn -0.865823 -0.075119 0.494680 -vn -0.643794 0.051604 0.763457 -vn -0.734614 -0.292666 0.612119 -vn -0.998468 0.034872 0.042952 -vn -0.998297 0.019801 0.054872 -vn -0.992653 0.114144 0.040135 -vn -0.998297 0.019801 0.054872 -vn -0.987901 0.136372 0.073847 -vn -0.992653 0.114144 0.040135 -vn -0.731349 0.176702 0.658715 -vn -0.687158 0.108164 0.718411 -vn -0.926994 -0.129511 0.352007 -vn -0.687158 0.108164 0.718411 -vn -0.905834 -0.117974 0.406875 -vn -0.926994 -0.129511 0.352007 -vn -0.216505 -0.964012 0.154295 -vn -0.128723 -0.973951 0.186681 -vn -0.344016 -0.936633 0.066114 -vn -0.804548 -0.044303 0.592232 -vn -0.791053 -0.070536 0.607668 -vn -0.796174 -0.034614 0.604077 -vn -0.051570 -0.896247 0.440547 -vn -0.035555 -0.976723 0.211536 -vn -0.055472 -0.996740 -0.058593 -vn -0.035555 -0.976723 0.211536 -vn -0.040877 -0.998968 -0.019776 -vn -0.055472 -0.996740 -0.058593 -vn -0.173479 0.168867 0.970252 -vn -0.103368 0.223513 0.969204 -vn -0.170701 0.176661 0.969357 -vn -0.103368 0.223513 0.969204 -vn -0.097159 0.235044 0.967117 -vn -0.170701 0.176661 0.969357 -vn -0.052936 0.216365 0.974876 -vn -0.097159 0.235044 0.967117 -vn -0.064598 0.228971 0.971287 -vn -0.097159 0.235044 0.967117 -vn -0.103368 0.223513 0.969204 -vn -0.064598 0.228971 0.971287 -vn -0.170701 0.176661 0.969357 -vn -0.168149 0.101726 0.980499 -vn -0.173479 0.168867 0.970252 -vn -0.168149 0.101726 0.980499 -vn -0.164097 0.082307 0.983004 -vn -0.173479 0.168867 0.970252 -vn -0.064598 0.228971 0.971287 -vn -0.028834 -0.044924 0.998574 -vn -0.052936 0.216365 0.974876 -vn -0.028834 -0.044924 0.998574 -vn -0.002361 -0.045709 0.998952 -vn -0.052936 0.216365 0.974876 -vn -0.116158 0.033510 0.992665 -vn -0.164097 0.082307 0.983004 -vn -0.123951 0.033775 0.991713 -vn -0.164097 0.082307 0.983004 -vn -0.168149 0.101726 0.980499 -vn -0.123951 0.033775 0.991713 -vn -0.082393 -0.961065 0.263752 -vn -0.031297 -0.968343 0.247652 -vn -0.216505 -0.964012 0.154295 -vn -0.031297 -0.968343 0.247652 -vn -0.128723 -0.973951 0.186681 -vn -0.216505 -0.964012 0.154295 -vn -0.035555 -0.976723 0.211536 -vn -0.051570 -0.896247 0.440547 -vn -0.069238 -0.603543 0.794318 -vn -0.051570 -0.896247 0.440547 -vn -0.059046 -0.495915 0.866361 -vn -0.069238 -0.603543 0.794318 -vn 0.073850 -0.984960 -0.156207 -vn 0.066127 -0.984212 -0.164178 -vn 0.011693 -0.985385 -0.169942 -vn 0.066127 -0.984212 -0.164178 -vn 0.001533 -0.984680 -0.174366 -vn 0.011693 -0.985385 -0.169942 -vn 0.093677 -0.987412 -0.127443 -vn 0.091072 -0.986479 -0.136255 -vn 0.073850 -0.984960 -0.156207 -vn 0.091072 -0.986479 -0.136255 -vn 0.066127 -0.984212 -0.164178 -vn 0.073850 -0.984960 -0.156207 -vn 0.000000 -0.998857 -0.047789 -vn -0.000000 -0.998702 -0.050933 -vn 0.055000 -0.996369 -0.064993 -vn -0.000000 -0.998702 -0.050933 -vn 0.055740 -0.996133 -0.067916 -vn 0.055000 -0.996369 -0.064993 -vn 0.011693 -0.985385 -0.169942 -vn 0.001533 -0.984680 -0.174366 -vn -0.049456 -0.988223 -0.144810 -vn 0.001533 -0.984680 -0.174366 -vn -0.055033 -0.987514 -0.147607 -vn -0.049456 -0.988223 -0.144810 -vn -0.049456 -0.988223 -0.144810 -vn -0.055033 -0.987514 -0.147607 -vn -0.071620 -0.991106 -0.112155 -vn -0.055033 -0.987514 -0.147607 -vn -0.073058 -0.990988 -0.112275 -vn -0.071620 -0.991106 -0.112155 -vn -0.073058 -0.990988 -0.112275 -vn -0.055472 -0.996740 -0.058593 -vn -0.071620 -0.991106 -0.112155 -vn -0.055472 -0.996740 -0.058593 -vn -0.060234 -0.996137 -0.063893 -vn -0.071620 -0.991106 -0.112155 -vn -0.055472 -0.996740 -0.058593 -vn -0.040877 -0.998968 -0.019776 -vn -0.060234 -0.996137 -0.063893 -vn 0.085405 -0.992811 -0.083858 -vn 0.085338 -0.992316 -0.089595 -vn 0.093677 -0.987412 -0.127443 -vn 0.085338 -0.992316 -0.089595 -vn 0.091072 -0.986479 -0.136255 -vn 0.093677 -0.987412 -0.127443 -vn 0.055000 -0.996369 -0.064993 -vn 0.055740 -0.996133 -0.067916 -vn 0.085405 -0.992811 -0.083858 -vn 0.055740 -0.996133 -0.067916 -vn 0.085338 -0.992316 -0.089595 -vn 0.085405 -0.992811 -0.083858 -vn -0.905940 0.384539 0.177207 -vn -0.941576 0.289157 0.172692 -vn -0.859273 0.317420 0.401117 -vn -0.941576 0.289157 0.172692 -vn -0.877960 0.234283 0.417490 -vn -0.859273 0.317420 0.401117 -vn -0.101507 0.989456 0.103309 -vn -0.114776 0.969606 0.216080 -vn -0.000000 0.994745 0.102388 -vn -0.114776 0.969606 0.216080 -vn -0.000000 0.977356 0.211603 -vn -0.000000 0.994745 0.102388 -vn -0.271656 0.956444 0.106859 -vn -0.269387 0.933644 0.236092 -vn -0.101507 0.989456 0.103309 -vn -0.269387 0.933644 0.236092 -vn -0.114776 0.969606 0.216080 -vn -0.101507 0.989456 0.103309 -vn -0.586343 0.801355 0.118456 -vn -0.566436 0.773715 0.283751 -vn -0.271656 0.956444 0.106859 -vn -0.566436 0.773715 0.283751 -vn -0.269387 0.933644 0.236092 -vn -0.271656 0.956444 0.106859 -vn -0.813126 0.562843 0.148437 -vn -0.790476 0.510996 0.337684 -vn -0.586343 0.801355 0.118456 -vn -0.790476 0.510996 0.337684 -vn -0.566436 0.773715 0.283751 -vn -0.586343 0.801355 0.118456 -vn -0.813126 0.562843 0.148437 -vn -0.905940 0.384539 0.177207 -vn -0.790476 0.510996 0.337684 -vn -0.905940 0.384539 0.177207 -vn -0.859273 0.317420 0.401117 -vn -0.790476 0.510996 0.337684 -vn -0.796705 -0.095826 0.596723 -vn -0.804548 -0.044303 0.592232 -vn -0.791556 -0.097603 0.603252 -vn -0.069238 -0.603543 0.794318 -vn -0.059046 -0.495915 0.866361 -vn -0.028834 -0.044924 0.998574 -vn -0.059046 -0.495915 0.866361 -vn -0.002361 -0.045709 0.998952 -vn -0.028834 -0.044924 0.998574 -vn -0.796705 -0.095826 0.596723 -vn -0.791053 -0.070536 0.607668 -vn -0.804548 -0.044303 0.592232 -vn -0.068959 0.997617 0.002300 -vn -0.084065 0.996201 0.022715 -vn -0.218354 0.974305 0.055235 -vn -0.084065 0.996201 0.022715 -vn -0.252470 0.964683 0.075137 -vn -0.218354 0.974305 0.055235 -vn -0.014728 0.999791 -0.014175 -vn -0.018825 0.999773 -0.010023 -vn -0.068959 0.997617 0.002300 -vn -0.018825 0.999773 -0.010023 -vn -0.084065 0.996201 0.022715 -vn -0.068959 0.997617 0.002300 -vn -0.015249 0.999853 -0.007842 -vn -0.015359 0.999847 -0.008355 -vn -0.014728 0.999791 -0.014175 -vn -0.015359 0.999847 -0.008355 -vn -0.018825 0.999773 -0.010023 -vn -0.014728 0.999791 -0.014175 -vn -0.007721 0.999968 -0.001961 -vn -0.015359 0.999847 -0.008355 -vn -0.007912 0.999965 -0.002547 -vn -0.015359 0.999847 -0.008355 -vn -0.015249 0.999853 -0.007842 -vn -0.007912 0.999965 -0.002547 -vn 0.000000 1.000000 -0.000000 -vn -0.007721 0.999968 -0.001961 -vn -0.000000 1.000000 -0.000005 -vn -0.007721 0.999968 -0.001961 -vn -0.007912 0.999965 -0.002547 -vn -0.000000 1.000000 -0.000005 -vn -0.110017 0.005351 -0.993915 -vn -0.126614 0.038353 -0.991210 -vn -0.111445 0.005659 -0.993755 -vn -0.126614 0.038353 -0.991210 -vn -0.133476 0.042166 -0.990155 -vn -0.111445 0.005659 -0.993755 -vn -0.126614 0.038353 -0.991210 -vn -0.253493 0.077283 -0.964245 -vn -0.133476 0.042166 -0.990155 -vn -0.253493 0.077283 -0.964245 -vn -0.262361 0.077868 -0.961823 -vn -0.133476 0.042166 -0.990155 -vn -0.340643 0.199708 -0.918738 -vn -0.556365 0.235871 -0.796758 -vn -0.306784 0.535384 -0.786923 -vn -0.556365 0.235871 -0.796758 -vn -0.515036 0.508272 -0.690216 -vn -0.306784 0.535384 -0.786923 -vn -0.141907 0.486043 -0.862337 -vn -0.141285 0.197838 -0.969999 -vn -0.306784 0.535384 -0.786923 -vn -0.141285 0.197838 -0.969999 -vn -0.340643 0.199708 -0.918738 -vn -0.306784 0.535384 -0.786923 -vn 0.888112 0.137352 -0.438624 -vn 0.961150 0.056049 -0.270275 -vn 0.946841 -0.010033 -0.321544 -vn 0.956670 -0.001270 0.291171 -vn 0.840437 -0.003126 0.541901 -vn 0.963043 0.024640 0.268217 -vn 0.840437 -0.003126 0.541901 -vn 0.857807 0.003552 0.513960 -vn 0.963043 0.024640 0.268217 -vn 0.621471 -0.025881 0.783010 -vn 0.649274 -0.021358 0.760255 -vn 0.840437 -0.003126 0.541901 -vn 0.649274 -0.021358 0.760255 -vn 0.857807 0.003552 0.513960 -vn 0.840437 -0.003126 0.541901 -vn 0.223132 -0.032589 0.974243 -vn 0.212283 -0.038788 0.976438 -vn 0.000000 -0.039132 0.999234 -vn 0.212283 -0.038788 0.976438 -vn -0.000000 -0.037251 0.999306 -vn 0.000000 -0.039132 0.999234 -vn 0.963043 0.024640 0.268217 -vn 0.996973 0.006708 0.077452 -vn 0.956670 -0.001270 0.291171 -vn 0.996973 0.006708 0.077452 -vn 0.994531 0.006140 0.104260 -vn 0.956670 -0.001270 0.291171 -vn 0.996973 0.006708 0.077452 -vn 0.984573 -0.023021 -0.173451 -vn 0.999371 0.000763 -0.035441 -vn 0.999371 0.000763 -0.035441 -vn 0.994531 0.006140 0.104260 -vn 0.996973 0.006708 0.077452 -vn 0.928473 0.002886 -0.371389 -vn 0.946841 -0.010033 -0.321544 -vn 0.984573 -0.023021 -0.173451 -vn 0.946841 -0.010033 -0.321544 -vn 0.961150 0.056049 -0.270275 -vn 0.984573 -0.023021 -0.173451 -vn 0.961150 0.056049 -0.270275 -vn 0.999371 0.000763 -0.035441 -vn 0.984573 -0.023021 -0.173451 -vn 0.621471 -0.025881 0.783010 -vn 0.405789 -0.043061 0.912952 -vn 0.649274 -0.021358 0.760255 -vn 0.405789 -0.043061 0.912952 -vn 0.427059 -0.024260 0.903898 -vn 0.649274 -0.021358 0.760255 -vn 0.405789 -0.043061 0.912952 -vn 0.212283 -0.038788 0.976438 -vn 0.427059 -0.024260 0.903898 -vn 0.212283 -0.038788 0.976438 -vn 0.223132 -0.032589 0.974243 -vn 0.427059 -0.024260 0.903898 -vn 0.984573 -0.023021 -0.173451 -vn 0.962439 -0.024231 -0.270413 -vn 0.928473 0.002886 -0.371389 -vn 0.202739 -0.978340 -0.041815 -vn 0.050170 -0.995292 -0.082922 -vn 0.023703 -0.999235 -0.031121 -vn -0.601143 0.119267 0.790191 -vn -0.603048 0.121629 0.788378 -vn -0.614054 0.126132 0.779120 -vn -0.614054 0.126132 0.779120 -vn -0.601351 0.120282 0.789879 -vn -0.601143 0.119267 0.790191 -vn -0.601143 0.119267 0.790191 -vn -0.601351 0.120282 0.789879 -vn -0.597652 0.112916 0.793764 -vn -0.603048 0.121629 0.788378 -vn -0.599764 0.125022 0.790350 -vn -0.614054 0.126132 0.779120 -vn -0.599764 0.125022 0.790350 -vn -0.635852 0.133040 0.760258 -vn -0.614054 0.126132 0.779120 -vn -0.635852 0.133040 0.760258 -vn -0.687777 0.151464 0.709945 -vn -0.614054 0.126132 0.779120 -vn -0.597652 0.112916 0.793764 -vn -0.601351 0.120282 0.789879 -vn -0.572387 0.153981 0.805396 -vn -0.572387 0.153981 0.805396 -vn -0.601351 0.120282 0.789879 -vn -0.594374 0.153736 0.789357 -vn -0.601351 0.120282 0.789879 -vn -0.668633 0.073281 0.739973 -vn -0.594374 0.153736 0.789357 -vn -0.093377 0.001257 -0.995630 -vn -0.110017 0.005351 -0.993915 -vn -0.094757 0.001026 -0.995500 -vn -0.110017 0.005351 -0.993915 -vn -0.111445 0.005659 -0.993755 -vn -0.094757 0.001026 -0.995500 -vn -0.731349 0.176702 0.658715 -vn -0.997539 -0.014146 0.068676 -vn -0.998468 0.034872 0.042952 -vn -0.997539 -0.014146 0.068676 -vn -0.998297 0.019801 0.054872 -vn -0.998468 0.034872 0.042952 -vn 0.757937 0.083145 -0.647008 -vn 0.812212 0.128738 -0.568980 -vn 0.888112 0.137352 -0.438624 -vn 0.812212 0.128738 -0.568980 -vn 0.961150 0.056049 -0.270275 -vn 0.888112 0.137352 -0.438624 -vn 0.743623 0.126560 -0.656511 -vn 0.812212 0.128738 -0.568980 -vn 0.757937 0.083145 -0.647008 -vn 0.743623 0.126560 -0.656511 -vn 0.757937 0.083145 -0.647008 -vn 0.728687 0.061348 -0.682093 -vn 0.765253 0.041319 -0.642403 -vn 0.728687 0.061348 -0.682093 -vn 0.793371 0.048012 -0.606842 -vn 0.728687 0.061348 -0.682093 -vn 0.757937 0.083145 -0.647008 -vn 0.793371 0.048012 -0.606842 -vn 0.793371 0.048012 -0.606842 -vn 0.928473 0.002886 -0.371389 -vn 0.765253 0.041319 -0.642403 -vn -0.784323 -0.020364 0.620019 -vn -0.804548 -0.044303 0.592232 -vn -0.643794 0.051604 0.763457 -vn -0.643794 0.051604 0.763457 -vn -0.804548 -0.044303 0.592232 -vn -0.833627 -0.033590 0.551305 -vn -0.887379 0.408080 0.214547 -vn -0.665715 0.458373 0.588828 -vn -0.910702 0.410936 -0.041879 -vn -0.910702 0.410936 -0.041879 -vn -0.910865 0.382102 -0.155957 -vn -0.775796 0.611274 -0.156478 -vn -0.910865 0.382102 -0.155957 -vn -0.910702 0.410936 -0.041879 -vn -0.865780 0.298022 0.402004 -vn -0.926853 0.296065 0.230845 -vn -0.849402 0.514429 0.117811 -vn -0.817308 0.373606 0.438665 -vn -0.807536 0.080137 0.584349 -vn -0.849402 0.514429 0.117811 -vn -0.926853 0.296065 0.230845 -vn 0.996773 -0.018467 0.078112 -vn 0.963650 -0.052073 0.262043 -vn 0.996358 -0.022534 0.082241 -vn 0.963650 -0.052073 0.262043 -vn 0.962906 -0.051413 0.264895 -vn 0.996358 -0.022534 0.082241 -vn 0.999792 0.019275 -0.006705 -vn 0.996773 -0.018467 0.078112 -vn 0.999913 0.012170 -0.005074 -vn 0.996773 -0.018467 0.078112 -vn 0.996358 -0.022534 0.082241 -vn 0.999913 0.012170 -0.005074 -vn 0.252664 -0.057093 0.965868 -vn 0.000000 -0.036099 0.999348 -vn 0.251793 -0.044009 0.966780 -vn 0.000000 -0.036099 0.999348 -vn -0.000000 -0.022294 0.999751 -vn 0.251793 -0.044009 0.966780 -vn 0.493589 -0.076185 0.866352 -vn 0.252664 -0.057093 0.965868 -vn 0.494095 -0.060695 0.867287 -vn 0.252664 -0.057093 0.965868 -vn 0.251793 -0.044009 0.966780 -vn 0.494095 -0.060695 0.867287 -vn 0.689423 -0.095290 0.718063 -vn 0.493589 -0.076185 0.866352 -vn 0.690337 -0.077073 0.719371 -vn 0.493589 -0.076185 0.866352 -vn 0.494095 -0.060695 0.867287 -vn 0.690337 -0.077073 0.719371 -vn 0.861733 -0.089612 0.499385 -vn 0.689423 -0.095290 0.718063 -vn 0.862233 -0.079902 0.500170 -vn 0.689423 -0.095290 0.718063 -vn 0.690337 -0.077073 0.719371 -vn 0.862233 -0.079902 0.500170 -vn 0.963650 -0.052073 0.262043 -vn 0.861733 -0.089612 0.499385 -vn 0.962906 -0.051413 0.264895 -vn 0.861733 -0.089612 0.499385 -vn 0.862233 -0.079902 0.500170 -vn 0.962906 -0.051413 0.264895 -vn 0.508924 -0.173879 0.843067 -vn 0.530011 -0.161213 0.832525 -vn 0.580600 -0.129349 0.803849 -vn 0.530011 -0.161213 0.832525 -vn 0.606607 -0.112074 0.787063 -vn 0.580600 -0.129349 0.803849 -vn 0.420642 -0.894155 -0.153453 -vn 0.445537 -0.885349 -0.132870 -vn 0.423196 -0.892876 -0.153873 -vn 0.445537 -0.885349 -0.132870 -vn 0.445045 -0.885607 -0.132797 -vn 0.423196 -0.892876 -0.153873 -vn 0.443902 -0.894515 -0.052850 -vn 0.444520 -0.893994 -0.056369 -vn 0.445537 -0.885349 -0.132870 -vn 0.444520 -0.893994 -0.056369 -vn 0.445045 -0.885607 -0.132797 -vn 0.445537 -0.885349 -0.132870 -vn 0.382942 -0.923043 0.036704 -vn 0.390221 -0.920247 0.029540 -vn 0.443902 -0.894515 -0.052850 -vn 0.390221 -0.920247 0.029540 -vn 0.444520 -0.893994 -0.056369 -vn 0.443902 -0.894515 -0.052850 -vn 0.308278 -0.943585 0.120883 -vn 0.309267 -0.942490 0.126753 -vn 0.382942 -0.923043 0.036704 -vn 0.309267 -0.942490 0.126753 -vn 0.390221 -0.920247 0.029540 -vn 0.382942 -0.923043 0.036704 -vn 0.308278 -0.943585 0.120883 -vn 0.240249 -0.947922 0.209103 -vn 0.309267 -0.942490 0.126753 -vn 0.240249 -0.947922 0.209103 -vn 0.245596 -0.944213 0.219420 -vn 0.309267 -0.942490 0.126753 -vn 0.143501 -0.937524 0.316949 -vn 0.245596 -0.944213 0.219420 -vn 0.139149 -0.943161 0.301804 -vn 0.245596 -0.944213 0.219420 -vn 0.240249 -0.947922 0.209103 -vn 0.139149 -0.943161 0.301804 -vn 0.139149 -0.943161 0.301804 -vn 0.000000 -0.924899 0.380214 -vn 0.143501 -0.937524 0.316949 -vn 0.000000 -0.924899 0.380214 -vn 0.000000 -0.917956 0.396682 -vn 0.143501 -0.937524 0.316949 -vn 0.928473 0.002886 -0.371389 -vn 0.793371 0.048012 -0.606842 -vn 0.946841 -0.010033 -0.321544 -vn 0.207643 0.930056 -0.303118 -vn 0.208097 0.929860 -0.303408 -vn 0.218086 0.925466 -0.309759 -vn 0.208097 0.929860 -0.303408 -vn 0.218979 0.925066 -0.310326 -vn 0.218086 0.925466 -0.309759 -vn 0.854784 0.009411 -0.518898 -vn 0.854781 0.009420 -0.518903 -vn 0.854783 0.009414 -0.518900 -vn 0.854781 0.009420 -0.518903 -vn 0.854780 0.009423 -0.518904 -vn 0.854783 0.009414 -0.518900 -vn 0.391140 -0.918370 -0.060048 -vn 0.391137 -0.918371 -0.060046 -vn 0.391102 -0.918388 -0.060026 -vn 0.391137 -0.918371 -0.060046 -vn 0.391100 -0.918389 -0.060025 -vn 0.391102 -0.918388 -0.060026 -vn -0.157284 -0.147242 -0.976515 -vn -0.157284 -0.147242 -0.976515 -vn -0.157283 -0.147243 -0.976515 -vn -0.157284 -0.147242 -0.976515 -vn -0.157282 -0.147243 -0.976515 -vn -0.157283 -0.147243 -0.976515 -vn 0.791236 0.154415 0.591693 -vn 0.791187 0.154399 0.591763 -vn 0.790899 0.154309 0.592172 -vn 0.791187 0.154399 0.591763 -vn 0.790837 0.154289 0.592260 -vn 0.790899 0.154309 0.592172 -vn -0.002040 -0.982183 -0.187914 -vn 0.000000 -0.975856 -0.218413 -vn -0.019019 -0.978509 -0.205324 -vn 0.023703 -0.999235 -0.031121 -vn 0.050170 -0.995292 -0.082922 -vn -0.050170 -0.995292 -0.082922 -vn -0.050170 -0.995292 -0.082922 -vn -0.023703 -0.999235 -0.031121 -vn 0.023703 -0.999235 -0.031121 -vn 0.002040 -0.982183 -0.187914 -vn -0.002040 -0.982183 -0.187914 -vn 0.050170 -0.995292 -0.082922 -vn -0.002040 -0.982183 -0.187914 -vn -0.050170 -0.995292 -0.082922 -vn 0.050170 -0.995292 -0.082922 -vn 0.019019 -0.978509 -0.205324 -vn 0.015799 -0.977740 -0.209227 -vn 0.000000 -0.975856 -0.218413 -vn 0.002040 -0.982183 -0.187914 -vn 0.000000 -0.975856 -0.218413 -vn -0.002040 -0.982183 -0.187914 -vn -0.019019 -0.978509 -0.205324 -vn -0.015799 -0.977740 -0.209227 -vn -0.067791 -0.985150 -0.157747 -vn -0.019019 -0.978509 -0.205324 -vn 0.000000 -0.975856 -0.218413 -vn -0.015799 -0.977740 -0.209227 -vn -0.067791 -0.985150 -0.157747 -vn -0.015773 -0.974169 -0.225268 -vn 0.012040 -0.967510 -0.252545 -vn -0.067791 -0.985150 -0.157747 -vn -0.015799 -0.977740 -0.209227 -vn -0.015773 -0.974169 -0.225268 -vn 0.019019 -0.978509 -0.205324 -vn 0.000000 -0.975856 -0.218413 -vn 0.002040 -0.982183 -0.187914 -vn 0.067791 -0.985150 -0.157747 -vn 0.015773 -0.974169 -0.225268 -vn 0.015799 -0.977740 -0.209227 -vn 0.067791 -0.985150 -0.157747 -vn 0.015799 -0.977740 -0.209227 -vn 0.019019 -0.978509 -0.205324 -vn -0.012040 -0.967510 -0.252545 -vn 0.015773 -0.974169 -0.225268 -vn 0.067791 -0.985150 -0.157747 -vn 0.697758 0.640804 0.320162 -vn 0.377613 0.848927 0.369770 -vn 0.668696 0.574599 0.471891 -vn 0.668696 0.574599 0.471891 -vn 0.377613 0.848927 0.369770 -vn 0.362004 0.774468 0.518799 -vn 0.000000 0.921893 0.387443 -vn -0.377616 0.848928 0.369767 -vn -0.000000 0.843980 0.536375 -vn -0.000000 0.843980 0.536375 -vn -0.377616 0.848928 0.369767 -vn -0.362004 0.774468 0.518799 -vn -0.697759 0.640807 0.320155 -vn -0.911691 0.329542 0.245403 -vn -0.668696 0.574599 0.471891 -vn -0.668696 0.574599 0.471891 -vn -0.911691 0.329542 0.245403 -vn -0.873986 0.276575 0.399567 -vn -0.986768 -0.037754 0.157680 -vn -0.911686 -0.404959 0.069542 -vn -0.945676 -0.075697 0.316176 -vn -0.945676 -0.075697 0.316176 -vn -0.911686 -0.404959 0.069542 -vn -0.873983 -0.427558 0.230973 -vn -0.697752 -0.716323 -0.004794 -vn -0.377636 -0.924330 -0.054816 -vn -0.668690 -0.726020 0.160464 -vn -0.668690 -0.726020 0.160464 -vn -0.377636 -0.924330 -0.054816 -vn -0.362020 -0.925447 0.111757 -vn -0.000000 -0.997398 -0.072093 -vn 0.377636 -0.924330 -0.054816 -vn 0.000000 -0.995385 0.095966 -vn 0.000000 -0.995385 0.095966 -vn 0.377636 -0.924330 -0.054816 -vn 0.362020 -0.925447 0.111757 -vn 0.697752 -0.716323 -0.004794 -vn 0.911686 -0.404959 0.069542 -vn 0.668690 -0.726020 0.160464 -vn 0.668690 -0.726020 0.160464 -vn 0.911686 -0.404959 0.069542 -vn 0.873983 -0.427558 0.230973 -vn 0.986768 -0.037754 0.157680 -vn 0.911691 0.329538 0.245406 -vn 0.945676 -0.075697 0.316176 -vn 0.945676 -0.075697 0.316176 -vn 0.911691 0.329538 0.245406 -vn 0.873986 0.276575 0.399567 -vn 0.000000 0.921893 0.387443 -vn 0.377613 0.848927 0.369770 -vn 0.000000 0.972184 0.234219 -vn 0.000000 0.972184 0.234219 -vn 0.377613 0.848927 0.369770 -vn 0.382689 0.898156 0.216482 -vn -0.697759 0.640807 0.320155 -vn -0.377616 0.848928 0.369767 -vn -0.707113 0.687335 0.166016 -vn -0.707113 0.687335 0.166016 -vn -0.377616 0.848928 0.369767 -vn -0.382694 0.898152 0.216489 -vn -0.986768 -0.037754 0.157680 -vn -0.911691 0.329542 0.245403 -vn -0.999999 -0.000329 0.001369 -vn -0.999999 -0.000329 0.001369 -vn -0.911691 0.329542 0.245403 -vn -0.923879 0.371836 0.090475 -vn -0.697752 -0.716323 -0.004794 -vn -0.911686 -0.404959 0.069542 -vn -0.707102 -0.688000 -0.163286 -vn -0.707102 -0.688000 -0.163286 -vn -0.911686 -0.404959 0.069542 -vn -0.923879 -0.372490 -0.087743 -vn -0.000000 -0.997398 -0.072093 -vn -0.377636 -0.924330 -0.054816 -vn 0.000000 -0.972838 -0.231488 -vn 0.000000 -0.972838 -0.231488 -vn -0.377636 -0.924330 -0.054816 -vn -0.382697 -0.898803 -0.213765 -vn 0.697752 -0.716323 -0.004794 -vn 0.377636 -0.924330 -0.054816 -vn 0.707102 -0.688000 -0.163286 -vn 0.707102 -0.688000 -0.163286 -vn 0.377636 -0.924330 -0.054816 -vn 0.382697 -0.898803 -0.213765 -vn 0.986768 -0.037754 0.157680 -vn 0.911686 -0.404959 0.069542 -vn 0.999999 -0.000329 0.001369 -vn 0.999999 -0.000329 0.001369 -vn 0.911686 -0.404959 0.069542 -vn 0.923879 -0.372490 -0.087743 -vn 0.707113 0.687339 0.166001 -vn 0.697758 0.640804 0.320162 -vn 0.923881 0.371832 0.090466 -vn 0.923881 0.371832 0.090466 -vn 0.697758 0.640804 0.320162 -vn 0.911691 0.329538 0.245406 -vn 0.707113 0.687339 0.166001 -vn 0.382689 0.898156 0.216482 -vn 0.697758 0.640804 0.320162 -vn 0.697758 0.640804 0.320162 -vn 0.382689 0.898156 0.216482 -vn 0.377613 0.848927 0.369770 -vn 0.000000 0.921893 0.387443 -vn 0.000000 0.972184 0.234219 -vn -0.377616 0.848928 0.369767 -vn -0.377616 0.848928 0.369767 -vn 0.000000 0.972184 0.234219 -vn -0.382694 0.898152 0.216489 -vn -0.697759 0.640807 0.320155 -vn -0.707113 0.687335 0.166016 -vn -0.911691 0.329542 0.245403 -vn -0.911691 0.329542 0.245403 -vn -0.707113 0.687335 0.166016 -vn -0.923879 0.371836 0.090475 -vn -0.986768 -0.037754 0.157680 -vn -0.999999 -0.000329 0.001369 -vn -0.911686 -0.404959 0.069542 -vn -0.911686 -0.404959 0.069542 -vn -0.999999 -0.000329 0.001369 -vn -0.923879 -0.372490 -0.087743 -vn 0.697752 -0.716323 -0.004794 -vn 0.707102 -0.688000 -0.163286 -vn 0.911686 -0.404959 0.069542 -vn 0.911686 -0.404959 0.069542 -vn 0.707102 -0.688000 -0.163286 -vn 0.923879 -0.372490 -0.087743 -vn 0.986768 -0.037754 0.157680 -vn 0.999999 -0.000329 0.001369 -vn 0.911691 0.329538 0.245406 -vn 0.911691 0.329538 0.245406 -vn 0.999999 -0.000329 0.001369 -vn 0.923881 0.371832 0.090466 -vn 0.873986 0.276575 0.399567 -vn 0.911691 0.329538 0.245406 -vn 0.668696 0.574599 0.471891 -vn 0.668696 0.574599 0.471891 -vn 0.911691 0.329538 0.245406 -vn 0.697758 0.640804 0.320162 -vn 0.986768 -0.037754 0.157680 -vn 0.945676 -0.075697 0.316176 -vn 0.911686 -0.404959 0.069542 -vn 0.911686 -0.404959 0.069542 -vn 0.945676 -0.075697 0.316176 -vn 0.873983 -0.427558 0.230973 -vn 0.697752 -0.716323 -0.004794 -vn 0.668690 -0.726020 0.160464 -vn 0.377636 -0.924330 -0.054816 -vn 0.377636 -0.924330 -0.054816 -vn 0.668690 -0.726020 0.160464 -vn 0.362020 -0.925447 0.111757 -vn -0.000000 -0.997398 -0.072093 -vn 0.000000 -0.995385 0.095966 -vn -0.377636 -0.924330 -0.054816 -vn -0.377636 -0.924330 -0.054816 -vn 0.000000 -0.995385 0.095966 -vn -0.362020 -0.925447 0.111757 -vn -0.697752 -0.716323 -0.004794 -vn -0.668690 -0.726020 0.160464 -vn -0.911686 -0.404959 0.069542 -vn -0.911686 -0.404959 0.069542 -vn -0.668690 -0.726020 0.160464 -vn -0.873983 -0.427558 0.230973 -vn -0.986768 -0.037754 0.157680 -vn -0.945676 -0.075697 0.316176 -vn -0.911691 0.329542 0.245403 -vn -0.911691 0.329542 0.245403 -vn -0.945676 -0.075697 0.316176 -vn -0.873986 0.276575 0.399567 -vn -0.697759 0.640807 0.320155 -vn -0.668696 0.574599 0.471891 -vn -0.377616 0.848928 0.369767 -vn -0.377616 0.848928 0.369767 -vn -0.668696 0.574599 0.471891 -vn -0.362004 0.774468 0.518799 -vn 0.000000 0.921893 0.387443 -vn -0.000000 0.843980 0.536375 -vn 0.377613 0.848927 0.369770 -vn 0.377613 0.848927 0.369770 -vn -0.000000 0.843980 0.536375 -vn 0.362004 0.774468 0.518799 -vn 0.000000 -0.277783 0.960644 -vn 0.000000 -0.277750 0.960654 -vn -0.017785 -0.274350 0.961465 -vn -0.017785 -0.274350 0.961465 -vn 0.000000 -0.277750 0.960654 -vn -0.017790 -0.274330 0.961471 -vn -0.032750 -0.264436 0.963847 -vn -0.017785 -0.274350 0.961465 -vn -0.032751 -0.264436 0.963847 -vn -0.032751 -0.264436 0.963847 -vn -0.017785 -0.274350 0.961465 -vn -0.017790 -0.274330 0.961471 -vn 0.032750 -0.264436 0.963847 -vn 0.032751 -0.264436 0.963847 -vn 0.017785 -0.274350 0.961465 -vn 0.017785 -0.274350 0.961465 -vn 0.032751 -0.264436 0.963847 -vn 0.017790 -0.274330 0.961471 -vn 0.000000 -0.277783 0.960644 -vn 0.017785 -0.274350 0.961465 -vn 0.000000 -0.277750 0.960654 -vn 0.000000 -0.277750 0.960654 -vn 0.017785 -0.274350 0.961465 -vn 0.017790 -0.274330 0.961471 -vn 0.046351 -0.232601 0.971467 -vn 0.046347 -0.232603 0.971467 -vn 0.042918 -0.249889 0.967323 -vn 0.042918 -0.249889 0.967323 -vn 0.046347 -0.232603 0.971467 -vn 0.042909 -0.249890 0.967323 -vn 0.032750 -0.264436 0.963847 -vn 0.042918 -0.249889 0.967323 -vn 0.032751 -0.264436 0.963847 -vn 0.032751 -0.264436 0.963847 -vn 0.042918 -0.249889 0.967323 -vn 0.042909 -0.249890 0.967323 -vn 0.032644 -0.200849 0.979078 -vn 0.032676 -0.200818 0.979083 -vn 0.042938 -0.215297 0.975604 -vn 0.042938 -0.215297 0.975604 -vn 0.032676 -0.200818 0.979083 -vn 0.042958 -0.215274 0.975608 -vn 0.046351 -0.232601 0.971467 -vn 0.042938 -0.215297 0.975604 -vn 0.046347 -0.232603 0.971467 -vn 0.046347 -0.232603 0.971467 -vn 0.042938 -0.215297 0.975604 -vn 0.042958 -0.215274 0.975608 -vn -0.000000 -0.187577 0.982250 -vn -0.000000 -0.187566 0.982252 -vn 0.017785 -0.190857 0.981457 -vn 0.017785 -0.190857 0.981457 -vn -0.000000 -0.187566 0.982252 -vn 0.017807 -0.190835 0.981461 -vn 0.032644 -0.200849 0.979078 -vn 0.017785 -0.190857 0.981457 -vn 0.032676 -0.200818 0.979083 -vn 0.032676 -0.200818 0.979083 -vn 0.017785 -0.190857 0.981457 -vn 0.017807 -0.190835 0.981461 -vn -0.032644 -0.200849 0.979078 -vn -0.032676 -0.200819 0.979083 -vn -0.017785 -0.190857 0.981457 -vn -0.017785 -0.190857 0.981457 -vn -0.032676 -0.200819 0.979083 -vn -0.017807 -0.190835 0.981461 -vn -0.000000 -0.187577 0.982250 -vn -0.017785 -0.190857 0.981457 -vn -0.000000 -0.187566 0.982252 -vn -0.000000 -0.187566 0.982252 -vn -0.017785 -0.190857 0.981457 -vn -0.017807 -0.190835 0.981461 -vn -0.046351 -0.232601 0.971467 -vn -0.046347 -0.232603 0.971467 -vn -0.042938 -0.215297 0.975604 -vn -0.042938 -0.215297 0.975604 -vn -0.046347 -0.232603 0.971467 -vn -0.042958 -0.215274 0.975608 -vn -0.032644 -0.200849 0.979078 -vn -0.042938 -0.215297 0.975604 -vn -0.032676 -0.200819 0.979083 -vn -0.032676 -0.200819 0.979083 -vn -0.042938 -0.215297 0.975604 -vn -0.042958 -0.215274 0.975608 -vn -0.032750 -0.264436 0.963847 -vn -0.032751 -0.264436 0.963847 -vn -0.042918 -0.249889 0.967323 -vn -0.042918 -0.249889 0.967323 -vn -0.032751 -0.264436 0.963847 -vn -0.042909 -0.249890 0.967323 -vn -0.046351 -0.232601 0.971467 -vn -0.042918 -0.249889 0.967323 -vn -0.046347 -0.232603 0.971467 -vn -0.046347 -0.232603 0.971467 -vn -0.042918 -0.249889 0.967323 -vn -0.042909 -0.249890 0.967323 -vn -0.019644 -0.213940 0.976649 -vn -0.000000 -0.233082 0.972457 -vn 0.000000 -0.206033 0.978545 -vn 0.000000 -0.206033 0.978545 -vn -0.000000 -0.233082 0.972457 -vn 0.019644 -0.213940 0.976649 -vn 0.019644 -0.213940 0.976649 -vn -0.000000 -0.233082 0.972457 -vn 0.027733 -0.233031 0.972074 -vn 0.027733 -0.233031 0.972074 -vn -0.000000 -0.233082 0.972457 -vn 0.019590 -0.252093 0.967505 -vn 0.019590 -0.252093 0.967505 -vn -0.000000 -0.233082 0.972457 -vn -0.000000 -0.259970 0.965617 -vn -0.000000 -0.259970 0.965617 -vn -0.000000 -0.233082 0.972457 -vn -0.019590 -0.252093 0.967505 -vn -0.019590 -0.252093 0.967505 -vn -0.000000 -0.233082 0.972457 -vn -0.027733 -0.233031 0.972074 -vn -0.027733 -0.233031 0.972074 -vn -0.000000 -0.233082 0.972457 -vn -0.019644 -0.213940 0.976649 -vn -0.697752 -0.716323 -0.004794 -vn -0.707102 -0.688000 -0.163286 -vn -0.377636 -0.924330 -0.054816 -vn -0.377636 -0.924330 -0.054816 -vn -0.707102 -0.688000 -0.163286 -vn -0.382697 -0.898803 -0.213765 -vn -0.000000 -0.997398 -0.072093 -vn 0.000000 -0.972838 -0.231488 -vn 0.377636 -0.924330 -0.054816 -vn 0.377636 -0.924330 -0.054816 -vn 0.000000 -0.972838 -0.231488 -vn 0.382697 -0.898803 -0.213765 -vn 0.737682 0.632293 0.236708 -vn 0.681840 0.613669 0.398125 -vn 0.738575 0.630131 0.239670 -vn 0.738575 0.630131 0.239670 -vn 0.681840 0.613669 0.398125 -vn 0.665560 0.605372 0.436525 -vn -0.311467 0.906530 0.284940 -vn -0.278363 0.932868 0.228630 -vn -0.312038 0.906994 0.282832 -vn -0.312038 0.906994 0.282832 -vn -0.278363 0.932868 0.228630 -vn -0.266781 0.940996 0.208218 -vn -0.976892 0.210142 0.039026 -vn -0.931751 0.308242 -0.191901 -vn -0.977049 0.209732 0.037243 -vn -0.977049 0.209732 0.037243 -vn -0.931751 0.308242 -0.191901 -vn -0.925744 0.314520 -0.209940 -vn -0.739447 -0.632675 -0.230087 -vn -0.740368 -0.630416 -0.233303 -vn -0.682404 -0.614001 -0.396646 -vn -0.682404 -0.614001 -0.396646 -vn -0.740368 -0.630416 -0.233303 -vn -0.665230 -0.605254 -0.437192 -vn 0.312372 -0.905730 -0.286490 -vn 0.312955 -0.906184 -0.284411 -vn 0.279566 -0.932034 -0.230553 -vn 0.279566 -0.932034 -0.230553 -vn 0.312955 -0.906184 -0.284411 -vn 0.268192 -0.940088 -0.210496 -vn 0.975975 -0.216438 -0.025065 -vn 0.976107 -0.216022 -0.023446 -vn 0.930418 -0.309743 0.195913 -vn 0.930418 -0.309743 0.195913 -vn 0.976107 -0.216022 -0.023446 -vn 0.924760 -0.315558 0.212701 -vn 0.924760 -0.315558 0.212701 -vn 0.820657 -0.389489 0.418114 -vn 0.930418 -0.309743 0.195913 -vn 0.930418 -0.309743 0.195913 -vn 0.820657 -0.389489 0.418114 -vn 0.820373 -0.389920 0.418272 -vn 0.268192 -0.940088 -0.210496 -vn 0.234742 -0.959072 -0.158355 -vn 0.279566 -0.932034 -0.230553 -vn 0.279566 -0.932034 -0.230553 -vn 0.234742 -0.959072 -0.158355 -vn 0.234311 -0.959193 -0.158266 -vn -0.665230 -0.605254 -0.437192 -vn -0.583961 -0.567471 -0.580488 -vn -0.682404 -0.614001 -0.396646 -vn -0.682404 -0.614001 -0.396646 -vn -0.583961 -0.567471 -0.580488 -vn -0.583078 -0.567833 -0.581021 -vn -0.925744 0.314520 -0.209940 -vn -0.931751 0.308242 -0.191901 -vn -0.816619 0.391452 -0.424144 -vn -0.816619 0.391452 -0.424144 -vn -0.931751 0.308242 -0.191901 -vn -0.816318 0.391895 -0.424316 -vn -0.266781 0.940996 0.208218 -vn -0.278363 0.932868 0.228630 -vn -0.233075 0.959900 0.155782 -vn -0.233075 0.959900 0.155782 -vn -0.278363 0.932868 0.228630 -vn -0.232585 0.960036 0.155678 -vn 0.665560 0.605372 0.436525 -vn 0.681840 0.613669 0.398125 -vn 0.586860 0.568918 0.576132 -vn 0.586860 0.568918 0.576132 -vn 0.681840 0.613669 0.398125 -vn 0.586054 0.569260 0.576614 -vn 0.730109 0.631128 0.261950 -vn 0.674042 0.612076 0.413559 -vn 0.730870 0.629198 0.264459 -vn 0.730870 0.629198 0.264459 -vn 0.674042 0.612076 0.413559 -vn 0.658902 0.604471 0.447731 -vn -0.309867 0.910080 0.275204 -vn -0.277606 0.934791 0.221588 -vn -0.310374 0.910441 0.273431 -vn -0.310374 0.910441 0.273431 -vn -0.277606 0.934791 0.221588 -vn -0.267058 0.941974 0.203383 -vn -0.975179 0.221311 0.006884 -vn -0.925862 0.312979 -0.211715 -vn -0.975276 0.220926 0.005394 -vn -0.975276 0.220926 0.005394 -vn -0.925862 0.312979 -0.211715 -vn -0.920190 0.318481 -0.227641 -vn -0.731779 -0.631473 -0.256403 -vn -0.732555 -0.629471 -0.259094 -vn -0.674460 -0.612301 -0.412543 -vn -0.674460 -0.612301 -0.412543 -vn -0.732555 -0.629471 -0.259094 -vn -0.658586 -0.604310 -0.448412 -vn 0.310648 -0.909417 -0.276512 -vn 0.311165 -0.909772 -0.274755 -vn 0.278716 -0.934049 -0.223315 -vn 0.278716 -0.934049 -0.223315 -vn 0.311165 -0.909772 -0.274755 -vn 0.268348 -0.941166 -0.205417 -vn 0.973944 -0.226729 0.005129 -vn 0.974028 -0.226334 0.006528 -vn 0.924735 -0.314179 0.214839 -vn 0.924735 -0.314179 0.214839 -vn 0.974028 -0.226334 0.006528 -vn 0.919377 -0.319305 0.229760 -vn 0.919377 -0.319305 0.229760 -vn 0.817616 -0.389044 0.424440 -vn 0.924735 -0.314179 0.214839 -vn 0.924735 -0.314179 0.214839 -vn 0.817616 -0.389044 0.424440 -vn 0.817361 -0.389419 0.424586 -vn 0.268348 -0.941166 -0.205417 -vn 0.235758 -0.959292 -0.155492 -vn 0.278716 -0.934049 -0.223315 -vn 0.278716 -0.934049 -0.223315 -vn 0.235758 -0.959292 -0.155492 -vn 0.235318 -0.959416 -0.155393 -vn -0.658586 -0.604310 -0.448412 -vn -0.579992 -0.568280 -0.583667 -vn -0.674460 -0.612301 -0.412543 -vn -0.674460 -0.612301 -0.412543 -vn -0.579992 -0.568280 -0.583667 -vn -0.579111 -0.568623 -0.584208 -vn -0.920190 0.318481 -0.227641 -vn -0.925862 0.312979 -0.211715 -vn -0.813745 0.390880 -0.430154 -vn -0.813745 0.390880 -0.430154 -vn -0.925862 0.312979 -0.211715 -vn -0.813468 0.391275 -0.430318 -vn -0.267058 0.941974 0.203383 -vn -0.277606 0.934791 0.221588 -vn -0.234166 0.960067 0.153092 -vn -0.234166 0.960067 0.153092 -vn -0.277606 0.934791 0.221588 -vn -0.233661 0.960209 0.152976 -vn 0.658902 0.604471 0.447731 -vn 0.674042 0.612076 0.413559 -vn 0.582696 0.569623 0.579651 -vn 0.582696 0.569623 0.579651 -vn 0.674042 0.612076 0.413559 -vn 0.581938 0.569929 0.580111 -vn 0.999999 -0.000024 -0.001367 -vn 0.999999 0.000110 -0.001589 -vn 0.999999 0.000312 -0.001607 -vn 0.999999 0.000312 -0.001607 -vn 0.999999 0.000110 -0.001589 -vn 0.999999 0.000042 -0.001067 -vn -0.000428 -0.310851 0.950458 -vn -0.013543 -0.308905 0.950997 -vn -0.000211 -0.310413 0.950602 -vn -0.000211 -0.310413 0.950602 -vn -0.013543 -0.308905 0.950997 -vn -0.001386 -0.309078 0.951036 -vn -0.001386 -0.309078 0.951036 -vn -0.013543 -0.308905 0.950997 -vn -0.022512 -0.308285 0.951028 -vn -0.999999 0.001490 -0.000526 -vn -0.999996 0.000606 0.002709 -vn -0.999999 0.001133 0.000814 -vn 0.979622 0.191624 0.060169 -vn 0.973898 0.217328 0.065502 -vn 0.979285 0.193237 0.060504 -vn 0.979285 0.193237 0.060504 -vn 0.973898 0.217328 0.065502 -vn 0.973553 0.218779 0.065802 -vn 1.000000 -0.000004 -0.000861 -vn 1.000000 0.000071 -0.001001 -vn 0.999999 0.000042 -0.001067 -vn 0.999999 0.000042 -0.001067 -vn 1.000000 0.000071 -0.001001 -vn 0.999999 0.000312 -0.001607 -vn -0.013543 -0.308905 0.950997 -vn -0.022202 -0.232051 0.972450 -vn -0.022512 -0.308285 0.951028 -vn -0.022512 -0.308285 0.951028 -vn -0.022202 -0.232051 0.972450 -vn -0.041394 -0.269769 0.962035 -vn -1.000000 0.000415 0.000131 -vn -0.999997 0.001624 -0.001522 -vn -1.000000 0.000666 -0.000237 -vn -1.000000 0.000666 -0.000237 -vn -0.999997 0.001624 -0.001522 -vn -0.999997 0.001815 -0.001774 -vn 0.016620 0.948094 0.317555 -vn -0.007601 0.955684 0.294297 -vn 0.005416 0.940885 0.338683 -vn 0.005416 0.940885 0.338683 -vn -0.007601 0.955684 0.294297 -vn -0.016858 0.956666 0.290698 -vn -0.041394 -0.269769 0.962035 -vn -0.022202 -0.232051 0.972450 -vn 0.000025 -0.048301 0.998833 -vn 0.000025 -0.048301 0.998833 -vn -0.022202 -0.232051 0.972450 -vn -0.000058 -0.045863 0.998948 -vn 0.000023 0.953980 0.299870 -vn 0.000003 0.953963 0.299924 -vn 0.000018 0.953975 0.299885 -vn 0.000018 0.953975 0.299885 -vn 0.000003 0.953963 0.299924 -vn -0.000002 0.953958 0.299940 -vn 1.000000 0.000071 -0.001001 -vn 0.999996 0.000825 -0.002665 -vn 0.999999 0.000312 -0.001607 -vn -0.998986 -0.013491 0.042948 -vn -0.998667 -0.016054 0.049061 -vn -0.998969 -0.013636 0.043294 -vn -0.998969 -0.013636 0.043294 -vn -0.998667 -0.016054 0.049061 -vn -0.998646 -0.016207 0.049426 -vn 0.000000 -0.965024 -0.262163 -vn -0.000187 -0.964080 -0.265612 -vn -0.000006 -0.964991 -0.262283 -vn -0.000006 -0.964991 -0.262283 -vn -0.000187 -0.964080 -0.265612 -vn -0.000193 -0.964048 -0.265727 -vn 0.000000 -0.299947 0.953956 -vn 0.000000 -0.299947 0.953956 -vn 0.000000 -0.299947 0.953956 -vn 0.000000 -0.299947 0.953956 -vn 0.000000 -0.299947 0.953956 -vn 0.000000 -0.299947 0.953956 -vn 0.016620 0.948094 0.317555 -vn 0.005416 0.940885 0.338683 -vn -0.000131 0.932658 0.360761 -vn -0.000131 0.932658 0.360761 -vn 0.005416 0.940885 0.338683 -vn -0.000135 0.932688 0.360683 -vn 0.000000 0.810325 0.585980 -vn 0.000015 0.810283 0.586039 -vn 0.000101 0.810034 0.586382 -vn 0.000101 0.810034 0.586382 -vn 0.000015 0.810283 0.586039 -vn 0.000116 0.809992 0.586441 -vn 0.000000 -0.299936 0.953959 -vn 0.000000 -0.299936 0.953959 -vn 0.000000 -0.299936 0.953959 -vn 0.000000 -0.299936 0.953959 -vn 0.000000 -0.299936 0.953959 -vn 0.000000 -0.299936 0.953959 -vn 0.000267 -0.997944 0.064095 -vn 0.000039 -0.998007 0.063111 -vn 0.000229 -0.997954 0.063928 -vn 0.000229 -0.997954 0.063928 -vn 0.000039 -0.998007 0.063111 -vn 0.000000 -0.998017 0.062945 -vn -0.999996 0.000034 0.002962 -vn -0.999999 0.001133 0.000814 -vn -0.999995 0.000190 0.003234 -vn -0.999995 0.000190 0.003234 -vn -0.999999 0.001133 0.000814 -vn -0.999996 0.000606 0.002709 -vn 1.000000 -0.000285 -0.000940 -vn 0.999999 -0.000024 -0.001367 -vn 1.000000 -0.000308 -0.000684 -vn 1.000000 -0.000308 -0.000684 -vn 0.999999 -0.000024 -0.001367 -vn 1.000000 -0.000243 -0.000572 -vn 0.000053 -0.954216 -0.299120 -vn -0.000468 -0.953831 -0.300343 -vn -0.000135 -0.954094 -0.299507 -vn -0.000135 -0.954094 -0.299507 -vn -0.000468 -0.953831 -0.300343 -vn -0.000646 -0.953846 -0.300294 -vn -0.003087 0.953735 0.300634 -vn 0.000450 0.954940 0.296798 -vn -0.002318 0.954233 0.299054 -vn -0.002318 0.954233 0.299054 -vn 0.000450 0.954940 0.296798 -vn 0.000629 0.955233 0.295854 -vn 0.003057 0.954558 0.298009 -vn 0.002713 0.954781 0.297297 -vn 0.000450 0.954940 0.296798 -vn 0.000450 0.954940 0.296798 -vn 0.002713 0.954781 0.297297 -vn 0.000629 0.955233 0.295854 -vn 0.923843 -0.114166 0.365350 -vn 0.923710 -0.114285 0.365647 -vn 0.921004 -0.116698 0.371662 -vn 0.921004 -0.116698 0.371662 -vn 0.923710 -0.114285 0.365647 -vn 0.920870 -0.116816 0.371957 -vn 0.000091 -0.300271 0.953854 -vn 0.318065 -0.284513 0.904371 -vn 0.000798 -0.300107 0.953905 -vn 0.000798 -0.300107 0.953905 -vn 0.318065 -0.284513 0.904371 -vn 0.319183 -0.284229 0.904066 -vn -0.318216 -0.284823 0.904220 -vn 0.000091 -0.300271 0.953854 -vn -0.317308 -0.284775 0.904555 -vn -0.317308 -0.284775 0.904555 -vn 0.000091 -0.300271 0.953854 -vn 0.000798 -0.300107 0.953905 -vn -0.924369 -0.114759 0.363831 -vn -0.921680 -0.117164 0.369835 -vn -0.924243 -0.114872 0.364114 -vn -0.924243 -0.114872 0.364114 -vn -0.921680 -0.117164 0.369835 -vn -0.921553 -0.117277 0.370116 -vn -0.000033 -0.953359 -0.301839 -vn -0.000278 -0.953520 -0.301330 -vn -0.000468 -0.953831 -0.300343 -vn -0.000468 -0.953831 -0.300343 -vn -0.000278 -0.953520 -0.301330 -vn -0.000646 -0.953846 -0.300294 -vn -0.001640 -0.954772 -0.297335 -vn -0.000298 -0.954188 -0.299209 -vn 0.000335 -0.953740 -0.300633 -vn 0.000335 -0.953740 -0.300633 -vn -0.000298 -0.954188 -0.299209 -vn 0.000000 -0.953686 -0.300805 -vn -0.000000 0.954554 0.298037 -vn -0.000460 0.954487 0.298254 -vn 0.000313 0.953920 0.300062 -vn 0.000313 0.953920 0.300062 -vn -0.000460 0.954487 0.298254 -vn 0.002027 0.953163 0.302449 -vn -0.000460 0.954487 0.298254 -vn -0.000000 0.954554 0.298037 -vn 0.000638 0.954564 0.298005 -vn -0.000528 -0.953655 -0.300901 -vn 0.000335 -0.953740 -0.300633 -vn 0.000000 -0.953686 -0.300805 -vn -0.000000 0.954554 0.298037 -vn 0.001170 0.954567 0.297993 -vn 0.000638 0.954564 0.298005 -vn 0.000638 0.954564 0.298005 -vn 0.001170 0.954567 0.297993 -vn 0.001423 0.954677 0.297640 -vn 0.691212 -0.216569 0.689437 -vn 0.874794 -0.144989 0.462292 -vn 0.690147 -0.217044 0.690354 -vn 0.690147 -0.217044 0.690354 -vn 0.874794 -0.144989 0.462292 -vn 0.873242 -0.146055 0.464884 -vn 0.691212 -0.216569 0.689437 -vn 0.690147 -0.217044 0.690354 -vn 0.228632 -0.292125 0.928650 -vn 0.228632 -0.292125 0.928650 -vn 0.690147 -0.217044 0.690354 -vn 0.228653 -0.292173 0.928630 -vn -0.228291 -0.292369 0.928657 -vn 0.228632 -0.292125 0.928650 -vn -0.228138 -0.292322 0.928709 -vn -0.228138 -0.292322 0.928709 -vn 0.228632 -0.292125 0.928650 -vn 0.228653 -0.292173 0.928630 -vn -0.690365 -0.217540 0.689980 -vn -0.228291 -0.292369 0.928657 -vn -0.691255 -0.217104 0.689226 -vn -0.691255 -0.217104 0.689226 -vn -0.228291 -0.292369 0.928657 -vn -0.228138 -0.292322 0.928709 -vn -0.875485 -0.145283 0.460889 -vn -0.873890 -0.146380 0.463561 -vn -0.691255 -0.217104 0.689226 -vn -0.691255 -0.217104 0.689226 -vn -0.873890 -0.146380 0.463561 -vn -0.690365 -0.217540 0.689980 -vn 0.000000 -0.953686 -0.300805 -vn -0.001312 -0.953480 -0.301453 -vn -0.000528 -0.953655 -0.300901 -vn -0.000528 -0.953655 -0.300901 -vn -0.001312 -0.953480 -0.301453 -vn -0.002079 -0.953140 -0.302522 -vn 0.000960 -0.954369 -0.298627 -vn -0.000226 -0.953559 -0.301207 -vn 0.000812 -0.954153 -0.299318 -vn 0.000812 -0.954153 -0.299318 -vn -0.000226 -0.953559 -0.301207 -vn 0.000234 -0.953479 -0.301460 -vn -0.000921 0.953534 0.301283 -vn 0.000237 0.954506 0.298191 -vn -0.000732 0.953805 0.300426 -vn 0.000237 0.954506 0.298191 -vn -0.000110 0.954609 0.297862 -vn -0.000732 0.953805 0.300426 -vn -0.000110 0.954609 0.297862 -vn 0.000237 0.954506 0.298191 -vn 0.000712 0.954491 0.298238 -vn -0.000808 -0.953593 -0.301096 -vn 0.000234 -0.953479 -0.301460 -vn -0.000226 -0.953559 -0.301207 -vn 0.000879 0.954765 0.297360 -vn 0.000943 0.954675 0.297649 -vn 0.000237 0.954506 0.298191 -vn 0.000237 0.954506 0.298191 -vn 0.000943 0.954675 0.297649 -vn 0.000712 0.954491 0.298238 -vn 0.650392 -0.227638 0.724686 -vn 0.812562 -0.174506 0.556139 -vn 0.649233 -0.228149 0.725565 -vn 0.649233 -0.228149 0.725565 -vn 0.812562 -0.174506 0.556139 -vn 0.810489 -0.175641 0.558800 -vn 0.650392 -0.227638 0.724686 -vn 0.649233 -0.228149 0.725565 -vn 0.231733 -0.291900 0.927952 -vn 0.231733 -0.291900 0.927952 -vn 0.649233 -0.228149 0.725565 -vn 0.231837 -0.291965 0.927905 -vn -0.231379 -0.292175 0.927953 -vn 0.231733 -0.291900 0.927952 -vn -0.231222 -0.292123 0.928009 -vn -0.231222 -0.292123 0.928009 -vn 0.231733 -0.291900 0.927952 -vn 0.231837 -0.291965 0.927905 -vn -0.649442 -0.228653 0.725219 -vn -0.231379 -0.292175 0.927953 -vn -0.650458 -0.228194 0.724453 -vn -0.650458 -0.228194 0.724453 -vn -0.231379 -0.292175 0.927953 -vn -0.231222 -0.292123 0.928009 -vn -0.813432 -0.174813 0.554769 -vn -0.811420 -0.175917 0.557360 -vn -0.650458 -0.228194 0.724453 -vn -0.650458 -0.228194 0.724453 -vn -0.811420 -0.175917 0.557360 -vn -0.649442 -0.228653 0.725219 -vn -0.000942 -0.953189 -0.302373 -vn -0.001026 -0.953315 -0.301977 -vn -0.000226 -0.953559 -0.301207 -vn -0.000226 -0.953559 -0.301207 -vn -0.001026 -0.953315 -0.301977 -vn -0.000808 -0.953593 -0.301096 -vn 0.999999 -0.000024 -0.001367 -vn 1.000000 -0.000285 -0.000940 -vn 0.999999 0.000110 -0.001589 -vn -0.999997 0.001624 -0.001522 -vn -0.999999 0.001490 -0.000526 -vn -0.999997 0.001815 -0.001774 -vn -0.999997 0.001815 -0.001774 -vn -0.999999 0.001490 -0.000526 -vn -0.999999 0.001133 0.000814 -vn -0.000004 -0.953959 -0.299938 -vn -0.000007 -0.953977 -0.299879 -vn -0.000009 -0.953960 -0.299935 -vn -0.000009 -0.953960 -0.299935 -vn -0.000007 -0.953977 -0.299879 -vn 0.000000 -0.953952 -0.299959 -vn 0.851215 -0.157429 0.500649 -vn 0.962086 -0.081807 0.260189 -vn 0.851217 -0.157420 0.500648 -vn 0.851217 -0.157420 0.500648 -vn 0.962086 -0.081807 0.260189 -vn 0.962090 -0.081799 0.260177 -vn -0.358834 -0.279992 0.890417 -vn 0.000000 -0.299969 0.953949 -vn -0.358832 -0.279992 0.890418 -vn -0.358832 -0.279992 0.890418 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn -0.669870 -0.222721 0.708286 -vn -0.358834 -0.279992 0.890417 -vn -0.669870 -0.222721 0.708286 -vn -0.669870 -0.222721 0.708286 -vn -0.358834 -0.279992 0.890417 -vn -0.358832 -0.279992 0.890418 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.000001 0.953943 0.299987 -vn -0.000002 0.953945 0.299983 -vn -0.000003 0.953942 0.299990 -vn -0.000003 0.953942 0.299990 -vn -0.000002 0.953945 0.299983 -vn 0.000000 0.953952 0.299959 -vn 0.962086 -0.081807 0.260189 -vn 1.000000 0.000000 -0.000000 -vn 0.962090 -0.081799 0.260177 -vn 0.962090 -0.081799 0.260177 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000002 -0.953958 -0.299941 -vn 0.000003 -0.953936 -0.300012 -vn 0.000007 -0.953955 -0.299951 -vn 0.000007 -0.953955 -0.299951 -vn 0.000003 -0.953936 -0.300012 -vn 0.000000 -0.953946 -0.299979 -vn 0.832911 -0.166011 0.527920 -vn 0.957315 -0.086673 0.275747 -vn 0.832923 -0.165972 0.527914 -vn 0.832923 -0.165972 0.527914 -vn 0.957315 -0.086673 0.275747 -vn 0.957336 -0.086634 0.275685 -vn -0.359045 -0.279975 0.890337 -vn 0.000000 -0.299980 0.953945 -vn -0.359046 -0.279977 0.890336 -vn -0.359046 -0.279977 0.890336 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn -0.670204 -0.222630 0.707999 -vn -0.359045 -0.279975 0.890337 -vn -0.670207 -0.222633 0.707995 -vn -0.670207 -0.222633 0.707995 -vn -0.359045 -0.279975 0.890337 -vn -0.359046 -0.279977 0.890336 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 0.953940 0.299998 -vn 0.000001 0.953941 0.299994 -vn 0.000000 0.953943 0.299989 -vn 0.000000 0.953943 0.299989 -vn 0.000001 0.953941 0.299994 -vn 0.000001 0.953944 0.299986 -vn 0.957315 -0.086673 0.275747 -vn 1.000000 0.000000 -0.000000 -vn 0.957336 -0.086634 0.275685 -vn 0.957336 -0.086634 0.275685 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000000 -0.953959 -0.299938 -vn 0.000000 -0.953977 -0.299879 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953977 -0.299879 -vn 0.000000 -0.953977 -0.299879 -vn 0.811445 -0.175317 0.557513 -vn 0.951696 -0.092093 0.292905 -vn 0.811450 -0.175301 0.557510 -vn 0.811450 -0.175301 0.557510 -vn 0.951696 -0.092093 0.292905 -vn 0.951701 -0.092081 0.292892 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn -0.963467 -0.080325 0.255498 -vn -0.856549 -0.154797 0.492303 -vn -0.963471 -0.080327 0.255481 -vn -0.963471 -0.080327 0.255481 -vn -0.856549 -0.154797 0.492303 -vn -0.856553 -0.154807 0.492292 -vn -0.963467 -0.080325 0.255498 -vn -0.963471 -0.080327 0.255481 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.963471 -0.080327 0.255481 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 0.953966 0.299914 -vn 0.000000 0.953966 0.299914 -vn 0.000000 0.953954 0.299952 -vn 0.000000 0.953954 0.299952 -vn 0.000000 0.953966 0.299914 -vn 0.000000 0.953954 0.299954 -vn 0.951696 -0.092093 0.292905 -vn 1.000000 0.000000 -0.000000 -vn 0.951701 -0.092081 0.292892 -vn 0.951701 -0.092081 0.292892 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000000 -0.953944 -0.299985 -vn 0.000000 -0.953948 -0.299971 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953948 -0.299971 -vn 0.000000 -0.953948 -0.299971 -vn 0.822280 -0.170707 0.542876 -vn 0.954535 -0.089412 0.284374 -vn 0.822284 -0.170696 0.542874 -vn 0.822284 -0.170696 0.542874 -vn 0.954535 -0.089412 0.284374 -vn 0.954544 -0.089398 0.284347 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn -0.964692 -0.078994 0.251256 -vn -0.861276 -0.152417 0.484740 -vn -0.964699 -0.078990 0.251228 -vn -0.964699 -0.078990 0.251228 -vn -0.861276 -0.152417 0.484740 -vn -0.861279 -0.152424 0.484733 -vn -0.964692 -0.078994 0.251256 -vn -0.964699 -0.078990 0.251228 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.964699 -0.078990 0.251228 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 0.953961 0.299932 -vn 0.000000 0.953961 0.299932 -vn 0.000000 0.953939 0.300001 -vn 0.000000 0.953939 0.300001 -vn 0.000000 0.953961 0.299932 -vn 0.000000 0.953938 0.300004 -vn 0.954535 -0.089412 0.284374 -vn 1.000000 0.000000 -0.000000 -vn 0.954544 -0.089398 0.284347 -vn 0.954544 -0.089398 0.284347 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000008 -0.953947 -0.299974 -vn 0.000003 -0.953949 -0.299968 -vn 0.000015 -0.953945 -0.299982 -vn 0.825428 -0.169341 0.538509 -vn 0.955361 -0.088624 0.281835 -vn 0.825429 -0.169338 0.538508 -vn 0.825429 -0.169338 0.538508 -vn 0.955361 -0.088624 0.281835 -vn 0.955361 -0.088623 0.281834 -vn -0.108662 -0.298199 0.948298 -vn 0.000000 -0.299980 0.953945 -vn -0.108663 -0.298204 0.948297 -vn -0.108663 -0.298204 0.948297 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn -0.216023 -0.292831 0.931442 -vn -0.108662 -0.298199 0.948298 -vn -0.216025 -0.292839 0.931439 -vn -0.216025 -0.292839 0.931439 -vn -0.108662 -0.298199 0.948298 -vn -0.108663 -0.298204 0.948297 -vn -0.997122 -0.022736 0.072318 -vn -0.997122 -0.022737 0.072318 -vn -0.997122 -0.022740 0.072318 -vn -0.997122 -0.022740 0.072318 -vn -0.997122 -0.022737 0.072318 -vn -0.997122 -0.022741 0.072318 -vn 0.000007 0.953952 0.299958 -vn 0.000020 0.953957 0.299944 -vn 0.000039 0.953963 0.299924 -vn 0.955361 -0.088624 0.281835 -vn 1.000000 0.000000 -0.000000 -vn 0.955361 -0.088623 0.281834 -vn 0.955361 -0.088623 0.281834 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000000 -0.953951 -0.299963 -vn 0.000000 -0.953950 -0.299965 -vn 0.000000 -0.953961 -0.299932 -vn 0.000000 -0.953961 -0.299932 -vn 0.000000 -0.953950 -0.299965 -vn 0.000000 -0.953961 -0.299932 -vn 0.828793 -0.167823 0.533795 -vn 0.956239 -0.087764 0.279112 -vn 0.828789 -0.167837 0.533797 -vn 0.828789 -0.167837 0.533797 -vn 0.956239 -0.087764 0.279112 -vn 0.956236 -0.087774 0.279123 -vn 0.000000 -0.299923 0.953963 -vn 0.000000 -0.299923 0.953963 -vn 0.000000 -0.299923 0.953963 -vn 0.000000 -0.299923 0.953963 -vn 0.000000 -0.299923 0.953963 -vn 0.000000 -0.299923 0.953963 -vn -0.968521 -0.074674 0.237466 -vn -0.876060 -0.144634 0.460000 -vn -0.968518 -0.074672 0.237479 -vn -0.968518 -0.074672 0.237479 -vn -0.876060 -0.144634 0.460000 -vn -0.876056 -0.144625 0.460009 -vn -0.968521 -0.074674 0.237466 -vn -0.968518 -0.074672 0.237479 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.968518 -0.074672 0.237479 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 0.953942 0.299993 -vn 0.000000 0.953942 0.299993 -vn 0.000000 0.953956 0.299947 -vn 0.000000 0.953956 0.299947 -vn 0.000000 0.953942 0.299993 -vn 0.000000 0.953956 0.299945 -vn 0.956239 -0.087764 0.279112 -vn 1.000000 0.000000 -0.000000 -vn 0.956236 -0.087774 0.279123 -vn 0.956236 -0.087774 0.279123 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000003 0.953953 0.299956 -vn -0.000002 0.953956 0.299946 -vn -0.000016 0.953949 0.299968 -vn -0.000016 0.953949 0.299968 -vn -0.000002 0.953956 0.299946 -vn -0.000026 0.953958 0.299941 -vn 0.000007 -0.953955 -0.299951 -vn 0.000009 -0.953948 -0.299972 -vn 0.000001 -0.953955 -0.299950 -vn 0.000001 -0.953955 -0.299950 -vn 0.000009 -0.953948 -0.299972 -vn 0.000000 -0.953968 -0.299908 -vn -0.868644 -0.148587 0.472631 -vn -0.868651 -0.148604 0.472612 -vn -0.868648 -0.148598 0.472619 -vn -0.868648 -0.148598 0.472619 -vn -0.868651 -0.148604 0.472612 -vn -0.868656 -0.148615 0.472600 -vn -0.941437 -0.101150 0.321661 -vn -0.941437 -0.101150 0.321661 -vn -0.941437 -0.101150 0.321661 -vn -0.941437 -0.101150 0.321661 -vn -0.941437 -0.101150 0.321661 -vn -0.941437 -0.101150 0.321661 -vn 0.939018 -0.103135 0.328037 -vn 1.000000 0.000000 -0.000000 -vn 0.939026 -0.103124 0.328018 -vn 0.939026 -0.103124 0.328018 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.763509 -0.193726 0.616055 -vn 0.939018 -0.103135 0.328037 -vn 0.763512 -0.193715 0.616055 -vn 0.763512 -0.193715 0.616055 -vn 0.939018 -0.103135 0.328037 -vn 0.939026 -0.103124 0.328018 -vn -0.334186 -0.282733 0.899101 -vn 0.000000 -0.299980 0.953945 -vn -0.334187 -0.282733 0.899100 -vn -0.334187 -0.282733 0.899100 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn -0.334187 -0.282733 0.899100 -vn -0.334186 -0.282733 0.899101 -vn -0.334186 -0.282733 0.899101 -vn -0.334186 -0.282733 0.899101 -vn -0.334186 -0.282733 0.899101 -vn -0.334187 -0.282733 0.899100 -vn 0.323100 -0.283891 0.902780 -vn -0.334187 -0.282733 0.899100 -vn 0.323099 -0.283891 0.902781 -vn 0.323099 -0.283891 0.902781 -vn -0.334187 -0.282733 0.899100 -vn -0.334186 -0.282733 0.899101 -vn 0.323100 -0.283891 0.902780 -vn 0.323099 -0.283891 0.902781 -vn 0.323099 -0.283891 0.902781 -vn 0.323099 -0.283891 0.902781 -vn 0.323099 -0.283891 0.902781 -vn 0.323100 -0.283891 0.902780 -vn 0.000000 -0.299980 0.953945 -vn 0.323099 -0.283891 0.902781 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn 0.323099 -0.283891 0.902781 -vn 0.323100 -0.283891 0.902780 -vn -0.000001 -0.953951 -0.299962 -vn 0.000001 -0.953955 -0.299950 -vn -0.000014 -0.953954 -0.299951 -vn -0.105776 -0.298229 0.948615 -vn -0.105767 -0.298248 0.948610 -vn -0.105752 -0.298279 0.948602 -vn -0.105752 -0.298279 0.948602 -vn -0.105767 -0.298248 0.948610 -vn -0.105744 -0.298298 0.948597 -vn -0.000016 0.953949 0.299968 -vn -0.000026 0.953958 0.299941 -vn -0.000076 0.953945 0.299982 -vn 0.000003 0.953953 0.299956 -vn -0.000016 0.953949 0.299968 -vn 0.000007 0.953939 0.300000 -vn 0.000007 0.953939 0.300000 -vn -0.000016 0.953949 0.299968 -vn 0.000000 0.953924 0.300049 -vn -0.000002 0.953956 0.299946 -vn -0.000002 0.953953 0.299957 -vn 0.000001 0.953947 0.299976 -vn 0.000001 0.953947 0.299976 -vn -0.000002 0.953953 0.299957 -vn 0.000002 0.953946 0.299979 -vn -0.000002 0.953956 0.299946 -vn 0.000003 0.953953 0.299956 -vn -0.000002 0.953953 0.299957 -vn -0.000002 0.953953 0.299957 -vn 0.000002 0.953944 0.299984 -vn 0.000002 0.953946 0.299979 -vn 0.000002 0.953946 0.299979 -vn 0.000002 0.953944 0.299984 -vn 0.000000 0.953947 0.299974 -vn 0.000001 -0.953956 -0.299948 -vn -0.000007 -0.953954 -0.299953 -vn 0.000007 -0.953955 -0.299951 -vn 0.000007 -0.953955 -0.299951 -vn 0.000001 -0.953955 -0.299950 -vn 0.000001 -0.953956 -0.299948 -vn 0.000001 -0.953956 -0.299948 -vn 0.000001 -0.953955 -0.299950 -vn -0.000001 -0.953951 -0.299962 -vn 0.000000 -0.953975 -0.299885 -vn -0.000015 -0.953951 -0.299962 -vn -0.000012 -0.953954 -0.299954 -vn -0.000012 -0.953954 -0.299954 -vn -0.000015 -0.953951 -0.299962 -vn -0.000007 -0.953954 -0.299953 -vn -0.000012 -0.953954 -0.299954 -vn -0.000007 -0.953954 -0.299953 -vn -0.000015 -0.953947 -0.299976 -vn -0.000015 -0.953947 -0.299976 -vn -0.000007 -0.953954 -0.299953 -vn 0.000001 -0.953956 -0.299948 -vn 0.000003 0.953953 0.299955 -vn -0.000000 0.953955 0.299950 -vn 0.000008 0.953944 0.299986 -vn 0.000008 0.953944 0.299986 -vn -0.000000 0.953955 0.299950 -vn 0.000011 0.953950 0.299967 -vn -0.000003 -0.953953 -0.299956 -vn -0.000007 -0.953939 -0.300001 -vn 0.000014 -0.953947 -0.299976 -vn 0.000014 -0.953947 -0.299976 -vn -0.000007 -0.953939 -0.300001 -vn 0.000000 -0.953923 -0.300052 -vn -0.868654 -0.148611 0.472605 -vn -0.868655 -0.148613 0.472602 -vn -0.868654 -0.148612 0.472603 -vn -0.868654 -0.148612 0.472603 -vn -0.868655 -0.148613 0.472602 -vn -0.868656 -0.148615 0.472600 -vn -0.941431 -0.101132 0.321682 -vn -0.941432 -0.101135 0.321680 -vn -0.941432 -0.101132 0.321681 -vn -0.941432 -0.101132 0.321681 -vn -0.941432 -0.101135 0.321680 -vn -0.941432 -0.101135 0.321680 -vn 0.939020 -0.103149 0.328027 -vn 1.000000 0.000000 -0.000000 -vn 0.939022 -0.103147 0.328023 -vn 0.939022 -0.103147 0.328023 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.763519 -0.193723 0.616044 -vn 0.939020 -0.103149 0.328027 -vn 0.763519 -0.193721 0.616044 -vn 0.763519 -0.193721 0.616044 -vn 0.939020 -0.103149 0.328027 -vn 0.939022 -0.103147 0.328023 -vn -0.334186 -0.282733 0.899101 -vn 0.000000 -0.299980 0.953945 -vn -0.334187 -0.282733 0.899100 -vn -0.334187 -0.282733 0.899100 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn -0.334187 -0.282733 0.899100 -vn -0.334186 -0.282733 0.899101 -vn -0.334186 -0.282733 0.899101 -vn -0.334186 -0.282733 0.899101 -vn -0.334186 -0.282733 0.899101 -vn -0.334187 -0.282733 0.899100 -vn 0.323100 -0.283891 0.902780 -vn -0.334187 -0.282733 0.899100 -vn 0.323099 -0.283891 0.902781 -vn 0.323099 -0.283891 0.902781 -vn -0.334187 -0.282733 0.899100 -vn -0.334186 -0.282733 0.899101 -vn 0.323100 -0.283891 0.902780 -vn 0.323099 -0.283891 0.902781 -vn 0.323099 -0.283891 0.902781 -vn 0.323099 -0.283891 0.902781 -vn 0.323099 -0.283891 0.902781 -vn 0.323100 -0.283891 0.902780 -vn 0.000000 -0.299980 0.953945 -vn 0.323099 -0.283891 0.902781 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn 0.323099 -0.283891 0.902781 -vn 0.323100 -0.283891 0.902780 -vn 0.000025 -0.953954 -0.299953 -vn 0.000014 -0.953947 -0.299976 -vn 0.000079 -0.953940 -0.299998 -vn -0.105749 -0.298287 0.948600 -vn -0.105755 -0.298275 0.948603 -vn -0.105765 -0.298253 0.948609 -vn -0.105765 -0.298253 0.948609 -vn -0.105755 -0.298275 0.948603 -vn -0.105770 -0.298241 0.948612 -vn 0.000008 0.953944 0.299986 -vn 0.000011 0.953950 0.299967 -vn 0.000012 0.953950 0.299966 -vn 0.000003 0.953953 0.299955 -vn 0.000008 0.953944 0.299986 -vn 0.000007 0.953939 0.300001 -vn 0.000007 0.953939 0.300001 -vn 0.000008 0.953944 0.299986 -vn 0.000000 0.953924 0.300049 -vn -0.000000 0.953955 0.299950 -vn -0.000002 0.953953 0.299957 -vn 0.000001 0.953947 0.299977 -vn 0.000001 0.953947 0.299977 -vn -0.000002 0.953953 0.299957 -vn 0.000002 0.953946 0.299980 -vn -0.000000 0.953955 0.299950 -vn 0.000003 0.953953 0.299955 -vn -0.000002 0.953953 0.299957 -vn -0.000002 0.953953 0.299957 -vn 0.000002 0.953944 0.299985 -vn 0.000002 0.953946 0.299980 -vn 0.000002 0.953946 0.299980 -vn 0.000002 0.953944 0.299985 -vn 0.000000 0.953947 0.299974 -vn 0.000001 -0.953956 -0.299946 -vn 0.000002 -0.953953 -0.299957 -vn -0.000003 -0.953953 -0.299956 -vn -0.000003 -0.953953 -0.299956 -vn 0.000014 -0.953947 -0.299976 -vn 0.000001 -0.953956 -0.299946 -vn 0.000001 -0.953956 -0.299946 -vn 0.000014 -0.953947 -0.299976 -vn 0.000025 -0.953954 -0.299953 -vn 0.000000 -0.953947 -0.299975 -vn -0.000002 -0.953944 -0.299986 -vn -0.000002 -0.953946 -0.299980 -vn -0.000002 -0.953946 -0.299980 -vn -0.000002 -0.953944 -0.299986 -vn 0.000002 -0.953953 -0.299957 -vn -0.000002 -0.953946 -0.299980 -vn 0.000002 -0.953953 -0.299957 -vn -0.000001 -0.953947 -0.299976 -vn -0.000001 -0.953947 -0.299976 -vn 0.000002 -0.953953 -0.299957 -vn 0.000001 -0.953956 -0.299946 -vn -0.979755 -0.060043 0.190986 -vn -0.919844 -0.117665 0.374223 -vn -0.979757 -0.060044 0.190973 -vn -0.979757 -0.060044 0.190973 -vn -0.919844 -0.117665 0.374223 -vn -0.919846 -0.117672 0.374215 -vn 0.806339 -0.177418 0.564217 -vn 0.950353 -0.093331 0.296846 -vn 0.806343 -0.177404 0.564215 -vn 0.806343 -0.177404 0.564215 -vn 0.950353 -0.093331 0.296846 -vn 0.950359 -0.093319 0.296831 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn -0.962647 -0.081204 0.258296 -vn -0.853388 -0.156356 0.497274 -vn -0.962652 -0.081205 0.258278 -vn -0.962652 -0.081205 0.258278 -vn -0.853388 -0.156356 0.497274 -vn -0.853392 -0.156365 0.497264 -vn 0.823811 -0.170042 0.540759 -vn 0.954939 -0.089021 0.283139 -vn 0.823816 -0.170028 0.540757 -vn 0.823816 -0.170028 0.540757 -vn 0.954939 -0.089021 0.283139 -vn 0.954944 -0.089010 0.283124 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn 0.000000 -0.299969 0.953949 -vn -0.979755 -0.060043 0.190986 -vn -0.979757 -0.060044 0.190973 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.979757 -0.060044 0.190973 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 0.953949 0.299969 -vn 0.000000 0.953948 0.299971 -vn 0.000000 0.953939 0.300001 -vn 0.000000 0.953939 0.300001 -vn 0.000000 0.953948 0.299971 -vn 0.000000 0.953939 0.300001 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953961 -0.299932 -vn 0.000000 -0.953961 -0.299932 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953959 -0.299938 -vn 0.954939 -0.089021 0.283139 -vn 1.000000 0.000000 -0.000000 -vn 0.954944 -0.089010 0.283124 -vn 0.954944 -0.089010 0.283124 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn -0.962647 -0.081204 0.258296 -vn -0.962652 -0.081205 0.258278 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.962652 -0.081205 0.258278 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 0.953955 0.299949 -vn 0.000000 0.953955 0.299949 -vn 0.000000 0.953949 0.299968 -vn 0.000000 0.953949 0.299968 -vn 0.000000 0.953955 0.299949 -vn 0.000000 0.953949 0.299969 -vn 0.000000 -0.953959 -0.299939 -vn 0.000000 -0.953983 -0.299862 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953983 -0.299862 -vn 0.000000 -0.953983 -0.299862 -vn 0.950353 -0.093331 0.296846 -vn 1.000000 0.000000 -0.000000 -vn 0.950359 -0.093319 0.296831 -vn 0.950359 -0.093319 0.296831 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000007 0.953949 0.299967 -vn 0.000002 0.953951 0.299962 -vn 0.000002 0.953954 0.299953 -vn 0.000002 0.953954 0.299953 -vn 0.000002 0.953951 0.299962 -vn 0.000002 0.953965 0.299917 -vn 0.000010 -0.953955 -0.299950 -vn 0.000014 -0.953951 -0.299963 -vn -0.000003 -0.953957 -0.299945 -vn -0.000003 -0.953957 -0.299945 -vn 0.000014 -0.953951 -0.299963 -vn 0.000000 -0.953982 -0.299863 -vn -0.868676 -0.148667 0.472547 -vn -0.868662 -0.148636 0.472582 -vn -0.868667 -0.148648 0.472568 -vn -0.868667 -0.148648 0.472568 -vn -0.868662 -0.148636 0.472582 -vn -0.868654 -0.148616 0.472604 -vn -0.941437 -0.101150 0.321660 -vn -0.941435 -0.101135 0.321669 -vn -0.941437 -0.101148 0.321662 -vn -0.941437 -0.101148 0.321662 -vn -0.941435 -0.101135 0.321669 -vn -0.941435 -0.101132 0.321671 -vn 0.939023 -0.103149 0.328017 -vn 1.000000 0.000000 -0.000000 -vn 0.939020 -0.103152 0.328027 -vn 0.939020 -0.103152 0.328027 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.763519 -0.193723 0.616044 -vn 0.939023 -0.103149 0.328017 -vn 0.763519 -0.193723 0.616044 -vn 0.763519 -0.193723 0.616044 -vn 0.939023 -0.103149 0.328017 -vn 0.939020 -0.103152 0.328027 -vn -0.334203 -0.282718 0.899099 -vn 0.000000 -0.299980 0.953945 -vn -0.334206 -0.282731 0.899094 -vn -0.334206 -0.282731 0.899094 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn -0.334200 -0.282559 0.899150 -vn -0.334203 -0.282718 0.899099 -vn -0.334179 -0.282576 0.899153 -vn -0.334179 -0.282576 0.899153 -vn -0.334203 -0.282718 0.899099 -vn -0.334206 -0.282731 0.899094 -vn 0.323112 -0.283716 0.902831 -vn -0.334200 -0.282559 0.899150 -vn 0.323092 -0.283732 0.902833 -vn 0.323092 -0.283732 0.902833 -vn -0.334200 -0.282559 0.899150 -vn -0.334179 -0.282576 0.899153 -vn 0.323112 -0.283716 0.902831 -vn 0.323092 -0.283732 0.902833 -vn 0.323116 -0.283875 0.902780 -vn 0.323116 -0.283875 0.902780 -vn 0.323092 -0.283732 0.902833 -vn 0.323119 -0.283889 0.902774 -vn 0.000000 -0.299980 0.953945 -vn 0.323116 -0.283875 0.902780 -vn 0.000000 -0.299980 0.953945 -vn 0.000000 -0.299980 0.953945 -vn 0.323116 -0.283875 0.902780 -vn 0.323119 -0.283889 0.902774 -vn -0.000009 -0.953949 -0.299969 -vn -0.000003 -0.953957 -0.299945 -vn -0.000041 -0.953957 -0.299943 -vn -0.105689 -0.298426 0.948563 -vn -0.105713 -0.298376 0.948576 -vn -0.105752 -0.298291 0.948599 -vn -0.105752 -0.298291 0.948599 -vn -0.105713 -0.298376 0.948576 -vn -0.105775 -0.298241 0.948612 -vn 0.000002 0.953954 0.299953 -vn 0.000002 0.953965 0.299917 -vn 0.000018 0.953969 0.299904 -vn 0.000007 0.953949 0.299967 -vn 0.000002 0.953954 0.299953 -vn 0.000010 0.953946 0.299977 -vn 0.000010 0.953946 0.299977 -vn 0.000002 0.953954 0.299953 -vn 0.000000 0.953924 0.300050 -vn 0.000002 0.953951 0.299962 -vn -0.000001 0.953950 0.299965 -vn -0.000002 0.953950 0.299964 -vn -0.000002 0.953950 0.299964 -vn -0.000001 0.953950 0.299965 -vn -0.000002 0.953950 0.299967 -vn 0.000002 0.953951 0.299962 -vn 0.000007 0.953949 0.299967 -vn -0.000001 0.953950 0.299965 -vn -0.000001 0.953950 0.299965 -vn -0.000002 0.953951 0.299963 -vn -0.000002 0.953950 0.299967 -vn -0.000002 0.953950 0.299967 -vn -0.000002 0.953951 0.299963 -vn 0.000000 0.953947 0.299974 -vn 0.000001 -0.953955 -0.299950 -vn -0.000005 -0.953954 -0.299952 -vn 0.000010 -0.953955 -0.299950 -vn 0.000010 -0.953955 -0.299950 -vn -0.000003 -0.953957 -0.299945 -vn 0.000001 -0.953955 -0.299950 -vn 0.000001 -0.953955 -0.299950 -vn -0.000003 -0.953957 -0.299945 -vn -0.000009 -0.953949 -0.299969 -vn 0.000000 -0.953947 -0.299974 -vn -0.000002 -0.953944 -0.299984 -vn -0.000002 -0.953960 -0.299934 -vn -0.000002 -0.953960 -0.299934 -vn -0.000002 -0.953944 -0.299984 -vn -0.000005 -0.953954 -0.299952 -vn -0.000002 -0.953960 -0.299934 -vn -0.000005 -0.953954 -0.299952 -vn -0.000004 -0.953966 -0.299916 -vn -0.000004 -0.953966 -0.299916 -vn -0.000005 -0.953954 -0.299952 -vn 0.000001 -0.953955 -0.299950 -vn -0.979755 -0.060045 0.190983 -vn -0.919844 -0.117669 0.374221 -vn -0.979757 -0.060047 0.190974 -vn -0.979757 -0.060047 0.190974 -vn -0.919844 -0.117669 0.374221 -vn -0.919846 -0.117676 0.374213 -vn 0.806339 -0.177425 0.564215 -vn 0.950354 -0.093334 0.296843 -vn 0.806343 -0.177411 0.564212 -vn 0.806343 -0.177411 0.564212 -vn 0.950354 -0.093334 0.296843 -vn 0.950358 -0.093323 0.296833 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn -0.962648 -0.081206 0.258293 -vn -0.853388 -0.156362 0.497272 -vn -0.962651 -0.081209 0.258280 -vn -0.962651 -0.081209 0.258280 -vn -0.853388 -0.156362 0.497272 -vn -0.853392 -0.156371 0.497262 -vn 0.823811 -0.170048 0.540757 -vn 0.954939 -0.089024 0.283136 -vn 0.823816 -0.170035 0.540755 -vn 0.823816 -0.170035 0.540755 -vn 0.954939 -0.089024 0.283136 -vn 0.954943 -0.089014 0.283126 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn 0.000000 -0.299981 0.953945 -vn -0.979755 -0.060045 0.190983 -vn -0.979757 -0.060047 0.190974 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.979757 -0.060047 0.190974 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 0.953951 0.299962 -vn 0.000000 0.953950 0.299965 -vn 0.000000 0.953938 0.300003 -vn 0.000000 0.953938 0.300003 -vn 0.000000 0.953950 0.299965 -vn 0.000000 0.953938 0.300003 -vn 0.000007 -0.953948 -0.299973 -vn 0.000002 -0.953945 -0.299981 -vn 0.000003 -0.953962 -0.299928 -vn 0.000003 -0.953962 -0.299928 -vn 0.000002 -0.953945 -0.299981 -vn 0.000000 -0.953959 -0.299938 -vn 0.954939 -0.089024 0.283136 -vn 1.000000 0.000000 -0.000000 -vn 0.954943 -0.089014 0.283126 -vn 0.954943 -0.089014 0.283126 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn -0.962648 -0.081206 0.258293 -vn -0.962651 -0.081209 0.258280 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.962651 -0.081209 0.258280 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 0.953951 0.299962 -vn 0.000000 0.953951 0.299963 -vn 0.000000 0.953938 0.300003 -vn 0.000000 0.953938 0.300003 -vn 0.000000 0.953951 0.299963 -vn 0.000000 0.953938 0.300003 -vn 0.000000 -0.953958 -0.299939 -vn 0.000000 -0.953983 -0.299862 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953983 -0.299862 -vn 0.000000 -0.953983 -0.299862 -vn 0.950354 -0.093334 0.296843 -vn 1.000000 0.000000 -0.000000 -vn 0.950358 -0.093323 0.296833 -vn 0.950358 -0.093323 0.296833 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000003 0.953955 0.299951 -vn -0.000001 0.953956 0.299947 -vn 0.000008 0.953957 0.299945 -vn 0.000008 0.953957 0.299945 -vn -0.000001 0.953956 0.299947 -vn 0.000013 0.953964 0.299921 -vn 0.000007 -0.953952 -0.299961 -vn 0.000011 -0.953957 -0.299942 -vn -0.000004 -0.953957 -0.299945 -vn -0.000004 -0.953957 -0.299945 -vn 0.000011 -0.953957 -0.299942 -vn 0.000000 -0.953982 -0.299862 -vn -0.868678 -0.148575 0.472572 -vn -0.868683 -0.148586 0.472559 -vn -0.868681 -0.148582 0.472564 -vn -0.868681 -0.148582 0.472564 -vn -0.868683 -0.148586 0.472559 -vn -0.868686 -0.148593 0.472552 -vn -0.941437 -0.101147 0.321662 -vn -0.941435 -0.101131 0.321670 -vn -0.941437 -0.101144 0.321663 -vn -0.941437 -0.101144 0.321663 -vn -0.941435 -0.101131 0.321670 -vn -0.941435 -0.101129 0.321672 -vn 0.939021 -0.103150 0.328023 -vn 1.000000 0.000000 -0.000000 -vn 0.939019 -0.103153 0.328027 -vn 0.939019 -0.103153 0.328027 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.763521 -0.193715 0.616045 -vn 0.939021 -0.103150 0.328023 -vn 0.763520 -0.193717 0.616044 -vn 0.763520 -0.193717 0.616044 -vn 0.939021 -0.103150 0.328023 -vn 0.939019 -0.103153 0.328027 -vn -0.334207 -0.282721 0.899097 -vn 0.000000 -0.299968 0.953949 -vn -0.334205 -0.282720 0.899097 -vn -0.334205 -0.282720 0.899097 -vn 0.000000 -0.299968 0.953949 -vn 0.000000 -0.299968 0.953949 -vn -0.334206 -0.282732 0.899093 -vn -0.334207 -0.282721 0.899097 -vn -0.334208 -0.282731 0.899093 -vn -0.334208 -0.282731 0.899093 -vn -0.334207 -0.282721 0.899097 -vn -0.334205 -0.282720 0.899097 -vn 0.323119 -0.283889 0.902774 -vn -0.334206 -0.282732 0.899093 -vn 0.323122 -0.283888 0.902773 -vn 0.323122 -0.283888 0.902773 -vn -0.334206 -0.282732 0.899093 -vn -0.334208 -0.282731 0.899093 -vn 0.323119 -0.283889 0.902774 -vn 0.323122 -0.283888 0.902773 -vn 0.323120 -0.283878 0.902777 -vn 0.323120 -0.283878 0.902777 -vn 0.323122 -0.283888 0.902773 -vn 0.323118 -0.283878 0.902778 -vn 0.000000 -0.299968 0.953949 -vn 0.323120 -0.283878 0.902777 -vn 0.000000 -0.299968 0.953949 -vn 0.000000 -0.299968 0.953949 -vn 0.323120 -0.283878 0.902777 -vn 0.323118 -0.283878 0.902778 -vn -0.000010 -0.953949 -0.299969 -vn -0.000004 -0.953957 -0.299945 -vn -0.000043 -0.953957 -0.299942 -vn -0.105684 -0.298243 0.948621 -vn -0.105686 -0.298241 0.948622 -vn -0.105688 -0.298236 0.948623 -vn -0.105688 -0.298236 0.948623 -vn -0.105686 -0.298241 0.948622 -vn -0.105689 -0.298233 0.948624 -vn 0.000008 0.953957 0.299945 -vn 0.000013 0.953964 0.299921 -vn 0.000046 0.953973 0.299894 -vn 0.000003 0.953955 0.299951 -vn 0.000008 0.953957 0.299945 -vn 0.000005 0.953949 0.299969 -vn 0.000005 0.953949 0.299969 -vn 0.000008 0.953957 0.299945 -vn 0.000000 0.953938 0.300005 -vn -0.000001 0.953956 0.299947 -vn -0.000003 0.953954 0.299952 -vn -0.000003 0.953951 0.299962 -vn -0.000003 0.953951 0.299962 -vn -0.000003 0.953954 0.299952 -vn -0.000002 0.953950 0.299967 -vn -0.000001 0.953956 0.299947 -vn 0.000003 0.953955 0.299951 -vn -0.000003 0.953954 0.299952 -vn -0.000003 0.953954 0.299952 -vn -0.000002 0.953951 0.299964 -vn -0.000002 0.953950 0.299967 -vn -0.000002 0.953950 0.299967 -vn -0.000002 0.953951 0.299964 -vn 0.000000 0.953947 0.299974 -vn 0.000005 -0.953950 -0.299965 -vn 0.000001 -0.953950 -0.299964 -vn 0.000007 -0.953952 -0.299961 -vn 0.000007 -0.953952 -0.299961 -vn -0.000004 -0.953957 -0.299945 -vn 0.000005 -0.953950 -0.299965 -vn 0.000005 -0.953950 -0.299965 -vn -0.000004 -0.953957 -0.299945 -vn -0.000010 -0.953949 -0.299969 -vn 0.000000 -0.953947 -0.299975 -vn 0.000002 -0.953950 -0.299965 -vn 0.000002 -0.953950 -0.299967 -vn 0.000002 -0.953950 -0.299967 -vn 0.000002 -0.953950 -0.299965 -vn 0.000001 -0.953950 -0.299964 -vn 0.000002 -0.953950 -0.299967 -vn 0.000001 -0.953950 -0.299964 -vn 0.000002 -0.953951 -0.299964 -vn 0.000002 -0.953951 -0.299964 -vn 0.000001 -0.953950 -0.299964 -vn 0.000005 -0.953950 -0.299965 -vn -0.000004 0.953959 0.299936 -vn -0.000007 0.953958 0.299939 -vn 0.000000 0.953957 0.299943 -vn -0.000004 -0.953936 -0.300010 -vn -0.000003 -0.953968 -0.299907 -vn -0.000000 -0.953948 -0.299972 -vn -0.000000 -0.953948 -0.299972 -vn -0.000003 -0.953968 -0.299907 -vn 0.000000 -0.953963 -0.299924 -vn -0.751588 -0.197870 0.629256 -vn -0.308892 -0.285309 0.907295 -vn -0.751587 -0.197871 0.629257 -vn -0.751587 -0.197871 0.629257 -vn -0.308892 -0.285309 0.907295 -vn -0.308885 -0.285310 0.907297 -vn -0.878582 -0.143262 0.455598 -vn -0.751588 -0.197870 0.629256 -vn -0.878582 -0.143263 0.455598 -vn -0.878582 -0.143263 0.455598 -vn -0.751588 -0.197870 0.629256 -vn -0.751587 -0.197871 0.629257 -vn 0.939020 -0.103136 0.328030 -vn 1.000000 0.000000 -0.000000 -vn 0.939024 -0.103129 0.328023 -vn 0.939024 -0.103129 0.328023 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.763511 -0.193725 0.616053 -vn 0.939020 -0.103136 0.328030 -vn 0.763513 -0.193716 0.616053 -vn 0.763513 -0.193716 0.616053 -vn 0.939020 -0.103136 0.328030 -vn 0.939024 -0.103129 0.328023 -vn -0.334190 -0.282728 0.899101 -vn 0.000000 -0.299979 0.953946 -vn -0.334187 -0.282732 0.899100 -vn -0.334187 -0.282732 0.899100 -vn 0.000000 -0.299979 0.953946 -vn 0.000000 -0.299979 0.953946 -vn -0.334178 -0.282680 0.899120 -vn -0.334190 -0.282728 0.899101 -vn -0.334176 -0.282685 0.899119 -vn -0.334176 -0.282685 0.899119 -vn -0.334190 -0.282728 0.899101 -vn -0.334187 -0.282732 0.899100 -vn 0.323092 -0.283838 0.902800 -vn -0.334178 -0.282680 0.899120 -vn 0.323090 -0.283842 0.902799 -vn 0.323090 -0.283842 0.902799 -vn -0.334178 -0.282680 0.899120 -vn -0.334176 -0.282685 0.899119 -vn 0.323092 -0.283838 0.902800 -vn 0.323090 -0.283842 0.902799 -vn 0.323103 -0.283885 0.902781 -vn 0.323103 -0.283885 0.902781 -vn 0.323090 -0.283842 0.902799 -vn 0.323100 -0.283890 0.902781 -vn -0.308892 -0.285309 0.907295 -vn 0.323103 -0.283885 0.902781 -vn -0.308885 -0.285310 0.907297 -vn -0.308885 -0.285310 0.907297 -vn 0.323103 -0.283885 0.902781 -vn 0.323100 -0.283890 0.902781 -vn -0.000007 0.953958 0.299939 -vn -0.000002 0.953948 0.299972 -vn -0.000009 0.953948 0.299971 -vn -0.000009 0.953948 0.299971 -vn -0.000002 0.953948 0.299972 -vn 0.000000 0.953965 0.299918 -vn 0.000000 0.953957 0.299943 -vn 0.000002 0.953945 0.299983 -vn 0.000002 0.953952 0.299960 -vn 0.000002 0.953952 0.299960 -vn 0.000002 0.953945 0.299983 -vn 0.000000 0.953948 0.299973 -vn -0.000004 0.953959 0.299936 -vn 0.000000 0.953957 0.299943 -vn 0.000002 0.953955 0.299950 -vn 0.000002 0.953955 0.299950 -vn 0.000000 0.953957 0.299943 -vn 0.000002 0.953952 0.299960 -vn -0.000007 0.953958 0.299939 -vn -0.000004 0.953959 0.299936 -vn -0.000002 0.953948 0.299972 -vn -0.000002 0.953948 0.299972 -vn -0.000004 0.953959 0.299936 -vn -0.000000 0.953943 0.299988 -vn -0.000008 -0.953931 -0.300026 -vn -0.000006 -0.953939 -0.300002 -vn -0.000004 -0.953936 -0.300010 -vn -0.000004 -0.953936 -0.300010 -vn -0.000000 -0.953948 -0.299972 -vn -0.000008 -0.953931 -0.300026 -vn -0.000008 -0.953931 -0.300026 -vn -0.000000 -0.953948 -0.299972 -vn 0.000001 -0.953943 -0.299986 -vn 0.000000 -0.953975 -0.299885 -vn -0.000003 -0.953971 -0.299898 -vn -0.000002 -0.953961 -0.299930 -vn -0.000002 -0.953961 -0.299930 -vn -0.000003 -0.953971 -0.299898 -vn -0.000006 -0.953939 -0.300002 -vn -0.000002 -0.953961 -0.299930 -vn -0.000006 -0.953939 -0.300002 -vn -0.000003 -0.953952 -0.299960 -vn -0.000003 -0.953952 -0.299960 -vn -0.000006 -0.953939 -0.300002 -vn -0.000008 -0.953931 -0.300026 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn -0.999998 0.001910 0.000600 -vn -0.999998 0.001910 0.000600 -vn -0.999998 0.001910 0.000601 -vn -0.999998 0.001910 0.000601 -vn -0.999998 0.001910 0.000600 -vn -0.999998 0.001910 0.000601 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.999998 -0.001910 -0.000600 -vn 0.999998 -0.001910 -0.000600 -vn 0.999998 -0.001910 -0.000601 -vn 0.999998 -0.001910 -0.000601 -vn 0.999998 -0.001910 -0.000600 -vn 0.999998 -0.001910 -0.000601 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn 0.000000 0.299956 -0.953953 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 0.000000 -0.299951 0.953955 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.000000 0.953959 0.299938 -vn 0.000000 0.953959 0.299938 -vn 0.000000 0.953951 0.299962 -vn 0.000000 0.953951 0.299962 -vn 0.000000 0.953959 0.299938 -vn 0.000000 0.953951 0.299963 -vn 0.000000 0.953959 0.299938 -vn 0.000000 0.953959 0.299938 -vn 0.000000 0.953951 0.299962 -vn 0.000000 0.953951 0.299962 -vn 0.000000 0.953959 0.299938 -vn 0.000000 0.953950 0.299965 -vn 0.000000 -0.953959 -0.299938 -vn 0.000000 -0.953983 -0.299862 -vn 0.000003 -0.953962 -0.299928 -vn 0.000003 -0.953962 -0.299928 -vn 0.000000 -0.953983 -0.299862 -vn 0.000000 -0.953983 -0.299862 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953958 -0.299939 -vn 0.000000 0.953955 0.299949 -vn 0.000000 0.953955 0.299949 -vn 0.000000 0.953949 0.299969 -vn 0.000000 0.953949 0.299969 -vn 0.000000 0.953955 0.299949 -vn 0.000000 0.953948 0.299971 -vn 0.000000 0.953949 0.299968 -vn 0.000000 0.953949 0.299969 -vn 0.000000 0.953939 0.300001 -vn 0.000000 0.953939 0.300001 -vn 0.000000 0.953949 0.299969 -vn 0.000000 0.953939 0.300001 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953959 -0.299939 -vn 0.000000 -0.953959 -0.299938 -vn 0.000000 -0.953983 -0.299862 -vn 0.000000 -0.953961 -0.299932 -vn 0.000000 -0.953961 -0.299932 -vn 0.000000 -0.953983 -0.299862 -vn 0.000000 -0.953983 -0.299862 -vn 0.000000 -0.953951 -0.299963 -vn 0.000000 -0.953935 -0.300013 -vn 0.000000 -0.953950 -0.299965 -vn 0.000000 -0.953950 -0.299965 -vn 0.000000 -0.953935 -0.300013 -vn 0.000000 -0.953935 -0.300013 -vn -0.000009 -0.953960 -0.299935 -vn -0.000011 -0.953958 -0.299940 -vn -0.000004 -0.953959 -0.299938 -vn -0.000004 -0.953959 -0.299938 -vn -0.000011 -0.953958 -0.299940 -vn 0.000000 -0.953944 -0.299983 -vn 0.000000 0.953945 0.299982 -vn -0.000002 0.953942 0.299991 -vn -0.000001 0.953943 0.299987 -vn -0.000001 0.953943 0.299987 -vn -0.000002 0.953942 0.299991 -vn -0.000002 0.953945 0.299983 -vn 0.000000 0.953956 0.299947 -vn 0.000000 0.953956 0.299945 -vn 0.000000 0.953979 0.299875 -vn 0.000000 0.953979 0.299875 -vn 0.000000 0.953956 0.299945 -vn 0.000000 0.953979 0.299875 -vn -0.000006 0.953950 0.299964 -vn -0.000008 0.953951 0.299964 -vn -0.000042 0.953953 0.299957 -vn -0.000006 0.953950 0.299964 -vn 0.000020 0.953957 0.299944 -vn 0.000007 0.953952 0.299958 -vn -0.000006 0.953950 0.299964 -vn 0.000007 0.953952 0.299958 -vn -0.000008 0.953951 0.299964 -vn 0.000006 -0.953951 -0.299964 -vn 0.000009 -0.953951 -0.299964 -vn 0.000003 -0.953949 -0.299968 -vn 0.000006 -0.953951 -0.299964 -vn 0.000003 -0.953949 -0.299968 -vn 0.000008 -0.953947 -0.299974 -vn 0.000048 -0.953953 -0.299956 -vn 0.000009 -0.953951 -0.299964 -vn 0.000006 -0.953951 -0.299964 -vn 0.000000 0.953939 0.300001 -vn 0.000000 0.953938 0.300004 -vn 0.000000 0.953904 0.300113 -vn 0.000000 0.953904 0.300113 -vn 0.000000 0.953938 0.300004 -vn 0.000000 0.953904 0.300113 -vn 0.000000 0.953954 0.299952 -vn 0.000000 0.953954 0.299954 -vn 0.000000 0.953934 0.300016 -vn 0.000000 0.953934 0.300016 -vn 0.000000 0.953954 0.299954 -vn 0.000000 0.953934 0.300016 -vn 0.000000 0.953943 0.299989 -vn 0.000001 0.953944 0.299986 -vn -0.000000 0.953947 0.299975 -vn -0.000000 0.953947 0.299975 -vn 0.000001 0.953944 0.299986 -vn 0.000000 0.953947 0.299974 -vn 0.000007 -0.953955 -0.299951 -vn 0.000009 -0.953962 -0.299926 -vn 0.000002 -0.953958 -0.299941 -vn 0.000002 -0.953958 -0.299941 -vn 0.000009 -0.953962 -0.299926 -vn 0.000000 -0.953973 -0.299893 -vn 0.000000 -0.953959 -0.299938 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953948 -0.299973 -vn 0.000000 -0.953948 -0.299973 -vn 0.000000 -0.953959 -0.299936 -vn 0.000000 -0.953948 -0.299973 -vn 0.000000 -0.953944 -0.299985 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953942 -0.299993 -vn 0.000000 -0.953942 -0.299993 -vn 0.000000 -0.953944 -0.299984 -vn 0.000000 -0.953942 -0.299993 -vn 0.000011 0.953941 0.299994 -vn 0.000006 0.953944 0.299986 -vn 0.000002 0.953947 0.299974 -vn -0.000009 0.953949 0.299969 -vn -0.000032 0.953926 0.300043 -vn -0.000040 0.953927 0.300039 -vn 0.000023 -0.953955 -0.299950 -vn 0.000000 -0.953973 -0.299894 -vn 0.000006 -0.953949 -0.299970 -vn -0.945064 -0.098052 0.311833 -vn -0.945064 -0.098052 0.311833 -vn -0.945064 -0.098052 0.311833 -vn -0.945064 -0.098052 0.311833 -vn -0.945064 -0.098052 0.311833 -vn -0.945064 -0.098052 0.311833 -vn -0.043579 -0.299675 0.953046 -vn -0.043579 -0.299674 0.953046 -vn -0.043579 -0.299675 0.953046 -vn -0.043579 -0.299675 0.953046 -vn -0.043579 -0.299674 0.953046 -vn -0.043579 -0.299674 0.953046 -vn -0.960922 -0.083057 0.264066 -vn -0.846727 -0.159595 0.507526 -vn -0.960918 -0.083057 0.264080 -vn -0.960918 -0.083057 0.264080 -vn -0.846727 -0.159595 0.507526 -vn -0.846726 -0.159588 0.507531 -vn -1.000000 0.000000 -0.000000 -vn -0.960922 -0.083057 0.264066 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -0.960922 -0.083057 0.264066 -vn -0.960918 -0.083057 0.264080 -vn 0.962669 -0.081214 0.258209 -vn 1.000000 0.000000 -0.000000 -vn 0.962660 -0.081228 0.258239 -vn 0.962660 -0.081228 0.258239 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 0.853455 -0.156328 0.497167 -vn 0.962669 -0.081214 0.258209 -vn 0.853454 -0.156338 0.497167 -vn 0.853454 -0.156338 0.497167 -vn 0.962669 -0.081214 0.258209 -vn 0.962660 -0.081228 0.258239 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn -0.922398 -0.115888 0.368446 -vn -0.922394 -0.115866 0.368461 -vn -0.922397 -0.115882 0.368450 -vn -0.922397 -0.115882 0.368450 -vn -0.922394 -0.115866 0.368461 -vn -0.922393 -0.115860 0.368466 -vn 0.000000 -0.300040 0.953927 -vn 0.000000 -0.300040 0.953927 -vn 0.000000 -0.300040 0.953927 -vn 0.000000 -0.300040 0.953927 -vn 0.000000 -0.300040 0.953927 -vn 0.000000 -0.300040 0.953927 -vn -0.754741 -0.196780 0.625814 -vn -0.754754 -0.196813 0.625788 -vn -0.754747 -0.196793 0.625803 -vn -0.754747 -0.196793 0.625803 -vn -0.754754 -0.196813 0.625788 -vn -0.754759 -0.196827 0.625777 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.887761 -0.138072 0.439109 -vn 0.887761 -0.138072 0.439109 -vn 0.887761 -0.138072 0.439109 -vn 0.887761 -0.138072 0.439109 -vn 0.887761 -0.138072 0.439109 -vn 0.887761 -0.138072 0.439109 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299941 0.953958 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299941 0.953958 -vn 0.000000 -0.299959 0.953952 -vn 0.000001 -0.953950 -0.299965 -vn 0.000004 -0.953954 -0.299953 -vn 0.000000 -0.953968 -0.299907 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299941 0.953958 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299941 0.953958 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299959 0.953952 -vn 0.000000 -0.299941 0.953958 -vn 0.000000 -0.299941 0.953958 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 -0.299941 0.953958 -vn 0.000000 -0.299941 0.953958 -vn 0.000000 -0.551002 0.834504 -vn 0.000000 -0.551002 0.834504 -vn 0.000000 -0.299941 0.953958 -vn 0.000000 -0.551002 0.834504 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn 1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn -1.000000 0.000000 -0.000000 -vn 0.000000 -0.551002 0.834504 -vn 0.000000 -0.551002 0.834504 -vn 0.000000 -0.759493 0.650516 -vn 0.000000 -0.759493 0.650516 -vn 0.000000 -0.551002 0.834504 -vn 0.000000 -0.759493 0.650516 -vn 0.000000 0.809898 0.586570 -vn 0.000000 0.809898 0.586570 -vn 0.000000 0.809898 0.586570 -vn 0.000000 0.809898 0.586570 -vn 0.000000 0.809898 0.586570 -vn 0.000000 0.809898 0.586570 -vn 0.000000 -0.586564 0.809903 -vn 0.000000 -0.586564 0.809903 -vn 0.000000 -0.586564 0.809903 -vn 0.000000 -0.586564 0.809903 -vn 0.000000 -0.586564 0.809903 -vn 0.000000 -0.586564 0.809903 -vn 0.992400 0.099663 0.072181 -vn 0.992400 0.099661 0.072179 -vn 0.992403 0.099643 0.072161 -vn 0.992403 0.099643 0.072161 -vn 0.992400 0.099661 0.072179 -vn 0.992404 0.099641 0.072159 -vn -0.992404 0.099641 0.072159 -vn -0.992400 0.099661 0.072179 -vn -0.992403 0.099643 0.072161 -vn -0.992403 0.099643 0.072161 -vn -0.992400 0.099661 0.072179 -vn -0.992400 0.099663 0.072181 -vn 0.000000 0.809901 0.586566 -vn 0.000000 0.809901 0.586566 -vn 0.000000 0.809901 0.586566 -vn 0.000000 0.809901 0.586566 -vn 0.000000 0.809901 0.586566 -vn 0.000000 0.809901 0.586566 -vn 0.000000 -0.586733 0.809781 -vn 0.000000 -0.586733 0.809781 -vn 0.000000 -0.586733 0.809781 -vn 0.000000 -0.586733 0.809781 -vn 0.000000 -0.586733 0.809781 -vn 0.000000 -0.586733 0.809781 -vn 0.965697 0.210307 0.152314 -vn 0.965698 0.210306 0.152313 -vn 0.965702 0.210294 0.152302 -vn 0.965702 0.210294 0.152302 -vn 0.965698 0.210306 0.152313 -vn 0.965702 0.210293 0.152301 -vn -0.965702 0.210293 0.152301 -vn -0.965698 0.210306 0.152313 -vn -0.965702 0.210294 0.152302 -vn -0.965702 0.210294 0.152302 -vn -0.965698 0.210306 0.152313 -vn -0.965697 0.210307 0.152314 -vn -0.000008 0.953953 0.299957 -vn -0.000009 0.953949 0.299969 -vn 0.000000 0.953973 0.299894 -vn 0.000002 0.953947 0.299974 -vn -0.000008 0.953953 0.299957 -vn 0.000000 0.953954 0.299955 -vn -0.000008 0.953953 0.299957 -vn -0.000005 0.953947 0.299976 -vn -0.000009 0.953949 0.299969 -vn -0.000009 0.953949 0.299969 -vn -0.000005 0.953947 0.299976 -vn -0.000032 0.953926 0.300043 -vn -0.000009 0.953949 0.299969 -vn -0.000040 0.953927 0.300039 -vn 0.000002 0.953958 0.299942 -vn 0.000002 0.953947 0.299975 -vn 0.000011 0.953941 0.299994 -vn 0.000000 0.953915 0.300077 -vn 0.000001 0.953950 0.299964 -vn 0.000002 0.953947 0.299975 -vn -0.000001 0.953975 0.299885 -vn -0.000001 0.953975 0.299885 -vn 0.000002 0.953947 0.299975 -vn 0.000000 0.953976 0.299882 -vn 0.000001 0.953950 0.299964 -vn 0.000002 0.953935 0.300013 -vn 0.000002 0.953947 0.299975 -vn 0.000002 0.953935 0.300013 -vn 0.000006 0.953944 0.299986 -vn 0.000002 0.953947 0.299975 -vn 0.000002 0.953947 0.299975 -vn 0.000006 0.953944 0.299986 -vn 0.000011 0.953941 0.299994 -vn 0.000006 0.953944 0.299986 -vn -0.000005 0.953947 0.299976 -vn 0.000002 0.953947 0.299974 -vn 0.000002 0.953947 0.299974 -vn -0.000005 0.953947 0.299976 -vn -0.000008 0.953953 0.299957 -vn 0.000000 -0.953945 -0.299981 -vn -0.000002 -0.953947 -0.299974 -vn -0.000005 -0.953948 -0.299972 -vn -0.000005 -0.953948 -0.299972 -vn -0.000002 -0.953947 -0.299974 -vn -0.000005 -0.953951 -0.299963 -vn -0.000002 -0.953947 -0.299974 -vn 0.000000 -0.953945 -0.299981 -vn 0.000001 -0.953950 -0.299965 -vn -0.000002 -0.953949 -0.299968 -vn -0.000002 -0.953947 -0.299975 -vn 0.000004 -0.953954 -0.299953 -vn 0.000004 -0.953954 -0.299953 -vn -0.000002 -0.953947 -0.299975 -vn 0.000000 -0.953945 -0.299983 -vn 0.000000 -0.953945 -0.299981 -vn -0.000000 -0.953951 -0.299963 -vn 0.000001 -0.953950 -0.299965 -vn 0.000001 -0.953950 -0.299965 -vn -0.000000 -0.953951 -0.299963 -vn 0.000004 -0.953954 -0.299953 -vn -0.000000 -0.953951 -0.299963 -vn -0.000002 -0.953949 -0.299968 -vn 0.000004 -0.953954 -0.299953 -vn -0.000005 -0.953951 -0.299963 -vn -0.000002 -0.953947 -0.299974 -vn 0.000000 -0.953954 -0.299955 -vn 0.000023 -0.953955 -0.299950 -vn 0.000006 -0.953949 -0.299970 -vn 0.000016 -0.953945 -0.299982 -vn -0.000022 -0.953947 -0.299976 -vn 0.000006 -0.953949 -0.299970 -vn 0.000001 -0.953930 -0.300031 -vn -0.000018 -0.953947 -0.299975 -vn 0.000006 -0.953949 -0.299970 -vn -0.000022 -0.953947 -0.299976 -vn 0.000016 -0.953945 -0.299982 -vn 0.000006 -0.953949 -0.299970 -vn -0.000018 -0.953947 -0.299975 -vn -0.528790 -0.207909 0.822894 -vn -0.529347 -0.206827 0.822809 -vn -0.496517 -0.108663 0.861199 -vn -0.496517 -0.108663 0.861199 -vn -0.529347 -0.206827 0.822809 -vn -0.493995 -0.107474 0.862797 -vn 0.542548 0.261481 -0.798291 -vn 0.538860 0.263168 -0.800233 -vn 0.542729 0.261315 -0.798223 -vn 0.542729 0.261315 -0.798223 -vn 0.538860 0.263168 -0.800233 -vn 0.543179 0.260620 -0.798144 -vn 0.538860 0.263168 -0.800233 -vn 0.555186 0.305408 -0.773624 -vn 0.543179 0.260620 -0.798144 -vn 0.555186 0.305408 -0.773624 -vn 0.559618 0.312824 -0.767443 -vn 0.543179 0.260620 -0.798144 -vn 0.543179 0.260620 -0.798144 -vn 0.559618 0.312824 -0.767443 -vn 0.529346 0.206824 -0.822810 -vn 0.529346 0.206824 -0.822810 -vn 0.559618 0.312824 -0.767443 -vn 0.528811 0.207898 -0.822884 -vn 0.528811 0.207898 -0.822884 -vn 0.559618 0.312824 -0.767443 -vn 0.539256 0.262475 -0.800194 -vn 0.559618 0.312824 -0.767443 -vn 0.542412 0.261566 -0.798356 -vn 0.539256 0.262475 -0.800194 -vn 0.542412 0.261566 -0.798356 -vn 0.543115 0.261150 -0.798014 -vn 0.539256 0.262475 -0.800194 -vn 0.543115 0.261150 -0.798014 -vn 0.543135 0.261128 -0.798008 -vn 0.539256 0.262475 -0.800194 -vn 0.528811 0.207898 -0.822884 -vn 0.496521 0.108631 -0.861201 -vn 0.529346 0.206824 -0.822810 -vn 0.529346 0.206824 -0.822810 -vn 0.496521 0.108631 -0.861201 -vn 0.493980 0.107433 -0.862810 -vn 0.699477 0.385150 0.601990 -vn 0.699448 0.385236 0.601968 -vn 0.605421 0.536895 0.587545 -vn 0.605421 0.536895 0.587545 -vn 0.699448 0.385236 0.601968 -vn 0.605431 0.536918 0.587514 -vn 0.699477 0.385150 0.601990 -vn 0.835805 -0.076421 0.543682 -vn 0.699448 0.385236 0.601968 -vn 0.699448 0.385236 0.601968 -vn 0.835805 -0.076421 0.543682 -vn 0.835823 -0.076528 0.543640 -vn 0.835805 -0.076421 0.543682 -vn 0.711226 -0.648338 0.271691 -vn 0.835823 -0.076528 0.543640 -vn 0.835823 -0.076528 0.543640 -vn 0.711226 -0.648338 0.271691 -vn 0.711256 -0.648301 0.271698 -vn 0.711226 -0.648338 0.271691 -vn 0.362955 -0.930027 -0.057562 -vn 0.711256 -0.648301 0.271698 -vn 0.711256 -0.648301 0.271698 -vn 0.362955 -0.930027 -0.057562 -vn 0.363615 -0.929800 -0.057064 -vn 0.409154 -0.912241 -0.020229 -vn 0.431409 -0.902155 -0.001797 -vn 0.362955 -0.930027 -0.057562 -vn 0.362955 -0.930027 -0.057562 -vn 0.431409 -0.902155 -0.001797 -vn 0.363615 -0.929800 -0.057064 -vn 0.409154 -0.912241 -0.020229 -vn 0.613449 -0.772403 0.164544 -vn 0.431409 -0.902155 -0.001797 -vn 0.431409 -0.902155 -0.001797 -vn 0.613449 -0.772403 0.164544 -vn 0.613449 -0.772403 0.164543 -vn -0.256998 -0.853081 -0.454097 -vn -0.257005 -0.853113 -0.454034 -vn -0.257002 -0.853096 -0.454068 -vn -0.257002 -0.853096 -0.454068 -vn -0.257005 -0.853113 -0.454034 -vn -0.257009 -0.853127 -0.454005 -vn -0.756024 -0.261580 -0.600004 -vn -0.771414 -0.220366 -0.596959 -vn -0.837203 0.094028 -0.538749 -vn -0.837203 0.094028 -0.538749 -vn -0.771414 -0.220366 -0.596959 -vn -0.837224 0.094034 -0.538715 -vn -0.711641 -0.361377 -0.602473 -vn -0.711600 -0.361485 -0.602457 -vn -0.756024 -0.261580 -0.600004 -vn -0.756024 -0.261580 -0.600004 -vn -0.711600 -0.361485 -0.602457 -vn -0.771414 -0.220366 -0.596959 -vn -0.711641 -0.361377 -0.602473 -vn -0.839819 0.171460 -0.515077 -vn -0.711600 -0.361485 -0.602457 -vn -0.711600 -0.361485 -0.602457 -vn -0.839819 0.171460 -0.515077 -vn -0.839814 0.171498 -0.515073 -vn -0.839819 0.171460 -0.515077 -vn -0.658607 0.722077 -0.211760 -vn -0.839814 0.171498 -0.515073 -vn -0.839814 0.171498 -0.515073 -vn -0.658607 0.722077 -0.211760 -vn -0.658573 0.722107 -0.211763 -vn -0.658607 0.722077 -0.211760 -vn -0.339481 0.937545 0.075911 -vn -0.658573 0.722107 -0.211763 -vn -0.658573 0.722107 -0.211763 -vn -0.339481 0.937545 0.075911 -vn -0.338967 0.937701 0.076278 -vn -0.339481 0.937545 0.075911 -vn -0.207632 0.962668 0.173664 -vn -0.338967 0.937701 0.076278 -vn -0.338967 0.937701 0.076278 -vn -0.207632 0.962668 0.173664 -vn -0.207584 0.962684 0.173636 -vn -0.758009 0.561350 -0.332127 -vn -0.758064 0.561309 -0.332071 -vn -0.758028 0.561336 -0.332108 -vn -0.758028 0.561336 -0.332108 -vn -0.758064 0.561309 -0.332071 -vn -0.758083 0.561294 -0.332052 -vn 0.235387 0.864929 0.443272 -vn 0.235389 0.864929 0.443271 -vn 0.235388 0.864929 0.443271 -vn 0.235388 0.864929 0.443271 -vn 0.235389 0.864929 0.443271 -vn 0.235390 0.864929 0.443270 -vn 0.830639 -0.306628 0.464778 -vn 0.830664 -0.306605 0.464748 -vn 0.830712 -0.306562 0.464691 -vn 0.830712 -0.306562 0.464691 -vn 0.830664 -0.306605 0.464748 -vn 0.830737 -0.306540 0.464661 -vn -0.555156 -0.305430 0.773637 -vn -0.559601 -0.312809 0.767461 -vn -0.581574 -0.417870 0.697966 -vn -0.581574 -0.417870 0.697966 -vn -0.559601 -0.312809 0.767461 -vn -0.593004 -0.427010 0.682648 -vn -0.542697 -0.261391 0.798219 -vn -0.542768 -0.261326 0.798193 -vn -0.538790 -0.263231 0.800259 -vn -0.542768 -0.261326 0.798193 -vn -0.543188 -0.260613 0.798140 -vn -0.538790 -0.263231 0.800259 -vn -0.538790 -0.263231 0.800259 -vn -0.543188 -0.260613 0.798140 -vn -0.555156 -0.305430 0.773637 -vn -0.555156 -0.305430 0.773637 -vn -0.543188 -0.260613 0.798140 -vn -0.559601 -0.312809 0.767461 -vn -0.543188 -0.260613 0.798140 -vn -0.529347 -0.206827 0.822809 -vn -0.559601 -0.312809 0.767461 -vn -0.529347 -0.206827 0.822809 -vn -0.528790 -0.207909 0.822894 -vn -0.559601 -0.312809 0.767461 -vn -0.528790 -0.207909 0.822894 -vn -0.539261 -0.262469 0.800192 -vn -0.559601 -0.312809 0.767461 -vn -0.559601 -0.312809 0.767461 -vn -0.539261 -0.262469 0.800192 -vn -0.542425 -0.261554 0.798351 -vn -0.539261 -0.262469 0.800192 -vn -0.543193 -0.261101 0.797977 -vn -0.542425 -0.261554 0.798351 -vn -0.543193 -0.261101 0.797977 -vn -0.543123 -0.261115 0.798020 -vn -0.542425 -0.261554 0.798351 -vn 0.555186 0.305408 -0.773624 -vn 0.581597 0.417889 -0.697936 -vn 0.559618 0.312824 -0.767443 -vn 0.559618 0.312824 -0.767443 -vn 0.581597 0.417889 -0.697936 -vn 0.593078 0.427070 -0.682547 -vn -0.527445 -0.204722 0.824555 -vn -0.521047 -0.210346 0.827203 -vn -0.499157 -0.120512 0.858091 -vn -0.499157 -0.120512 0.858091 -vn -0.521047 -0.210346 0.827203 -vn -0.505285 -0.123061 0.854133 -vn 0.559592 0.223151 -0.798161 -vn 0.546538 0.239366 -0.802496 -vn 0.539218 0.242967 -0.806357 -vn 0.539218 0.242967 -0.806357 -vn 0.546538 0.239366 -0.802496 -vn 0.529571 0.257265 -0.808313 -vn 0.546538 0.239366 -0.802496 -vn 0.546101 0.286070 -0.787361 -vn 0.529571 0.257265 -0.808313 -vn 0.546101 0.286070 -0.787361 -vn 0.565282 0.295103 -0.770306 -vn 0.529571 0.257265 -0.808313 -vn 0.529571 0.257265 -0.808313 -vn 0.565282 0.295103 -0.770306 -vn 0.521058 0.210340 -0.827197 -vn 0.521058 0.210340 -0.827197 -vn 0.565282 0.295103 -0.770306 -vn 0.527421 0.204722 -0.824570 -vn 0.527421 0.204722 -0.824570 -vn 0.565282 0.295103 -0.770306 -vn 0.553008 0.246282 -0.795944 -vn 0.565282 0.295103 -0.770306 -vn 0.576294 0.237654 -0.781924 -vn 0.553008 0.246282 -0.795944 -vn 0.576294 0.237654 -0.781924 -vn 0.559688 0.249093 -0.790381 -vn 0.553008 0.246282 -0.795944 -vn 0.559688 0.249093 -0.790381 -vn 0.549439 0.260927 -0.793747 -vn 0.553008 0.246282 -0.795944 -vn 0.527421 0.204722 -0.824570 -vn 0.499193 0.120559 -0.858063 -vn 0.521058 0.210340 -0.827197 -vn 0.521058 0.210340 -0.827197 -vn 0.499193 0.120559 -0.858063 -vn 0.505407 0.123144 -0.854049 -vn 0.602572 0.544224 0.583718 -vn 0.702840 0.379990 0.601351 -vn 0.602547 0.544227 0.583741 -vn 0.602547 0.544227 0.583741 -vn 0.702840 0.379990 0.601351 -vn 0.704472 0.376771 0.601467 -vn 0.702840 0.379990 0.601351 -vn 0.834696 -0.101593 0.541259 -vn 0.704472 0.376771 0.601467 -vn 0.704472 0.376771 0.601467 -vn 0.834696 -0.101593 0.541259 -vn 0.834470 -0.097428 0.542372 -vn 0.693999 -0.668399 0.267597 -vn 0.696653 -0.664399 0.270644 -vn 0.834696 -0.101593 0.541259 -vn 0.834696 -0.101593 0.541259 -vn 0.696653 -0.664399 0.270644 -vn 0.834470 -0.097428 0.542372 -vn 0.344476 -0.937107 -0.056276 -vn 0.345273 -0.936851 -0.055638 -vn 0.693999 -0.668399 0.267597 -vn 0.693999 -0.668399 0.267597 -vn 0.345273 -0.936851 -0.055638 -vn 0.696653 -0.664399 0.270644 -vn 0.411670 -0.911330 -0.002210 -vn 0.428167 -0.903626 0.011550 -vn 0.344476 -0.937107 -0.056276 -vn 0.344476 -0.937107 -0.056276 -vn 0.428167 -0.903626 0.011550 -vn 0.345273 -0.936851 -0.055638 -vn 0.411670 -0.911330 -0.002210 -vn 0.621304 -0.760466 0.188873 -vn 0.428167 -0.903626 0.011550 -vn 0.428167 -0.903626 0.011550 -vn 0.621304 -0.760466 0.188873 -vn 0.621300 -0.760466 0.188885 -vn -0.278012 -0.845821 -0.455297 -vn -0.278023 -0.845854 -0.455230 -vn -0.278017 -0.845836 -0.455268 -vn -0.278017 -0.845836 -0.455268 -vn -0.278023 -0.845854 -0.455230 -vn -0.278028 -0.845868 -0.455201 -vn -0.769322 -0.224426 -0.598144 -vn -0.781261 -0.188402 -0.595093 -vn -0.836255 0.142640 -0.529463 -vn -0.836255 0.142640 -0.529463 -vn -0.781261 -0.188402 -0.595093 -vn -0.836249 0.142639 -0.529473 -vn -0.769322 -0.224426 -0.598144 -vn -0.720273 -0.344710 -0.601982 -vn -0.781261 -0.188402 -0.595093 -vn -0.781261 -0.188402 -0.595093 -vn -0.720273 -0.344710 -0.601982 -vn -0.722511 -0.339911 -0.602028 -vn -0.720273 -0.344710 -0.601982 -vn -0.836094 0.192098 -0.513853 -vn -0.722511 -0.339911 -0.602028 -vn -0.722511 -0.339911 -0.602028 -vn -0.836094 0.192098 -0.513853 -vn -0.836130 0.190417 -0.514419 -vn -0.640987 0.738505 -0.209156 -vn -0.643222 0.735885 -0.211514 -vn -0.836094 0.192098 -0.513853 -vn -0.836094 0.192098 -0.513853 -vn -0.643222 0.735885 -0.211514 -vn -0.836130 0.190417 -0.514419 -vn -0.307180 0.947810 0.085418 -vn -0.307865 0.947635 0.084892 -vn -0.640987 0.738505 -0.209156 -vn -0.640987 0.738505 -0.209156 -vn -0.307865 0.947635 0.084892 -vn -0.643222 0.735885 -0.211514 -vn -0.307865 0.947635 0.084892 -vn -0.307180 0.947810 0.085418 -vn -0.164233 0.967987 0.189814 -vn -0.164233 0.967987 0.189814 -vn -0.307180 0.947810 0.085418 -vn -0.164233 0.967987 0.189814 -vn -0.729536 0.609604 -0.310097 -vn -0.729537 0.609603 -0.310095 -vn -0.729536 0.609604 -0.310097 -vn -0.729536 0.609604 -0.310097 -vn -0.729537 0.609603 -0.310095 -vn -0.729538 0.609603 -0.310095 -vn 0.254629 0.859443 0.443309 -vn 0.254562 0.859441 0.443350 -vn 0.254601 0.859442 0.443326 -vn 0.254601 0.859442 0.443326 -vn 0.254562 0.859441 0.443350 -vn 0.254534 0.859440 0.443368 -vn 0.822825 -0.332602 0.460798 -vn 0.822814 -0.332613 0.460811 -vn 0.822792 -0.332632 0.460835 -vn 0.822792 -0.332632 0.460835 -vn 0.822814 -0.332613 0.460811 -vn 0.822781 -0.332642 0.460848 -vn -0.546135 -0.286051 0.787344 -vn -0.565278 -0.295064 0.770323 -vn -0.577940 -0.382619 0.720824 -vn -0.577940 -0.382619 0.720824 -vn -0.565278 -0.295064 0.770323 -vn -0.614751 -0.410393 0.673543 -vn -0.559617 -0.223203 0.798128 -vn -0.539321 -0.242945 0.806294 -vn -0.546452 -0.239440 0.802533 -vn -0.539321 -0.242945 0.806294 -vn -0.529578 -0.257294 0.808299 -vn -0.546452 -0.239440 0.802533 -vn -0.546452 -0.239440 0.802533 -vn -0.529578 -0.257294 0.808299 -vn -0.546135 -0.286051 0.787344 -vn -0.546135 -0.286051 0.787344 -vn -0.529578 -0.257294 0.808299 -vn -0.565278 -0.295064 0.770323 -vn -0.529578 -0.257294 0.808299 -vn -0.521047 -0.210346 0.827203 -vn -0.565278 -0.295064 0.770323 -vn -0.521047 -0.210346 0.827203 -vn -0.527445 -0.204722 0.824555 -vn -0.565278 -0.295064 0.770323 -vn -0.527445 -0.204722 0.824555 -vn -0.552639 -0.245811 0.796346 -vn -0.565278 -0.295064 0.770323 -vn -0.565278 -0.295064 0.770323 -vn -0.552639 -0.245811 0.796346 -vn -0.576275 -0.238396 0.781713 -vn -0.552639 -0.245811 0.796346 -vn -0.556088 -0.251338 0.792209 -vn -0.576275 -0.238396 0.781713 -vn -0.556088 -0.251338 0.792209 -vn -0.568421 -0.248483 0.784317 -vn -0.576275 -0.238396 0.781713 -vn 0.546101 0.286070 -0.787361 -vn 0.577902 0.382674 -0.720826 -vn 0.565282 0.295103 -0.770306 -vn 0.565282 0.295103 -0.770306 -vn 0.577902 0.382674 -0.720826 -vn 0.614845 0.410555 -0.673357 -vn -0.000034 -0.960657 -0.277738 -vn 0.382293 -0.886674 -0.260118 -vn 0.382276 -0.886684 -0.260108 -vn 0.382276 -0.886684 -0.260108 -vn -0.000034 -0.960657 -0.277738 -vn -0.000034 -0.960657 -0.277738 -vn 0.382293 -0.886674 -0.260118 -vn 0.706342 -0.676101 -0.209685 -vn 0.706319 -0.676125 -0.209686 -vn 0.706319 -0.676125 -0.209686 -vn 0.382276 -0.886684 -0.260108 -vn 0.382293 -0.886674 -0.260118 -vn 0.706342 -0.676101 -0.209685 -vn 0.922902 -0.360890 -0.134202 -vn 0.922895 -0.360906 -0.134207 -vn 0.922895 -0.360906 -0.134207 -vn 0.706319 -0.676125 -0.209686 -vn 0.706342 -0.676101 -0.209685 -vn 0.922902 -0.360890 -0.134202 -vn 0.998923 0.010792 -0.045122 -vn 0.998923 0.010755 -0.045127 -vn 0.998923 0.010755 -0.045127 -vn 0.922895 -0.360906 -0.134207 -vn 0.922902 -0.360890 -0.134202 -vn 0.998923 0.010792 -0.045122 -vn 0.922877 0.382589 0.043869 -vn 0.922885 0.382568 0.043870 -vn 0.922885 0.382568 0.043870 -vn 0.998923 0.010755 -0.045127 -vn 0.998923 0.010792 -0.045122 -vn 0.922877 0.382589 0.043869 -vn 0.706352 0.697725 0.119361 -vn 0.706352 0.697725 0.119357 -vn 0.706352 0.697725 0.119357 -vn 0.922885 0.382568 0.043870 -vn 0.922877 0.382589 0.043869 -vn 0.706352 0.697725 0.119361 -vn 0.382242 0.908327 0.169800 -vn 0.382239 0.908328 0.169804 -vn 0.382239 0.908328 0.169804 -vn 0.706352 0.697725 0.119357 -vn 0.706352 0.697725 0.119361 -vn 0.382242 0.908327 0.169800 -vn 0.000015 0.982272 0.187459 -vn 0.000014 0.982273 0.187459 -vn 0.000014 0.982273 0.187459 -vn 0.382239 0.908328 0.169804 -vn 0.382242 0.908327 0.169800 -vn 0.000015 0.982272 0.187459 -vn -0.382273 0.908314 0.169801 -vn -0.382269 0.908317 0.169798 -vn -0.382269 0.908317 0.169798 -vn 0.000014 0.982273 0.187459 -vn 0.000015 0.982272 0.187459 -vn -0.382273 0.908314 0.169801 -vn -0.706321 0.697755 0.119364 -vn -0.706322 0.697753 0.119368 -vn -0.706322 0.697753 0.119368 -vn -0.382269 0.908317 0.169798 -vn -0.382273 0.908314 0.169801 -vn -0.706321 0.697755 0.119364 -vn -0.922898 0.382537 0.043862 -vn -0.922906 0.382520 0.043853 -vn -0.922906 0.382520 0.043853 -vn -0.706322 0.697753 0.119368 -vn -0.706321 0.697755 0.119364 -vn -0.922898 0.382537 0.043862 -vn -0.998923 0.010848 -0.045105 -vn -0.998923 0.010811 -0.045117 -vn -0.998923 0.010811 -0.045117 -vn -0.922906 0.382520 0.043853 -vn -0.922898 0.382537 0.043862 -vn -0.998923 0.010848 -0.045105 -vn -0.922882 -0.360937 -0.134214 -vn -0.922875 -0.360953 -0.134217 -vn -0.922875 -0.360953 -0.134217 -vn -0.998923 0.010811 -0.045117 -vn -0.998923 0.010848 -0.045105 -vn -0.922882 -0.360937 -0.134214 -vn -0.706374 -0.676072 -0.209673 -vn -0.706350 -0.676094 -0.209683 -vn -0.706350 -0.676094 -0.209683 -vn -0.922875 -0.360953 -0.134217 -vn -0.922882 -0.360937 -0.134214 -vn -0.706374 -0.676072 -0.209673 -vn -0.382243 -0.886697 -0.260111 -vn -0.382228 -0.886701 -0.260124 -vn -0.382228 -0.886701 -0.260124 -vn -0.706350 -0.676094 -0.209683 -vn -0.706374 -0.676072 -0.209673 -vn -0.382243 -0.886697 -0.260111 -vn -0.000034 -0.960657 -0.277738 -vn -0.000034 -0.960657 -0.277738 -vn -0.000034 -0.960657 -0.277738 -vn -0.382228 -0.886701 -0.260124 -vn -0.382243 -0.886697 -0.260111 -# 10365 vertex normals - -vt 0.871414 0.798087 0.000000 -vt 0.852228 0.809224 0.000000 -vt 0.861148 0.786935 0.000000 -vt 0.841327 0.795030 0.000000 -vt 0.828293 0.758206 0.000000 -vt 0.816020 0.756311 0.000000 -vt 0.828099 0.744737 0.000000 -vt 0.813639 0.744737 0.000000 -vt 0.845828 0.744737 0.000000 -vt 0.846646 0.759257 0.000000 -vt 0.891059 0.903942 0.000000 -vt 0.935823 0.931981 0.000000 -vt 0.872802 0.939067 0.000000 -vt 0.918410 0.965970 0.000000 -vt 0.861200 0.819309 0.000000 -vt 0.853690 0.824558 0.000000 -vt 0.878421 0.856169 0.000000 -vt 0.865865 0.866034 0.000000 -vt 0.868269 0.851807 0.000000 -vt 0.860035 0.859357 0.000000 -vt 0.888632 0.812956 0.000000 -vt 0.911588 0.875588 0.000000 -vt 0.954616 0.901820 0.000000 -vt 0.818244 0.881121 0.000000 -vt 0.796012 0.884690 0.000000 -vt 0.815839 0.874584 0.000000 -vt 0.794596 0.876787 0.000000 -vt 0.765906 0.885028 0.000000 -vt 0.765811 0.876702 0.000000 -vt 0.742155 0.870843 0.000000 -vt 0.739925 0.878656 0.000000 -vt 0.726420 0.862641 0.000000 -vt 0.720029 0.868469 0.000000 -vt 0.711174 0.858174 0.000000 -vt 0.718540 0.853732 0.000000 -vt 0.694060 0.814896 0.000000 -vt 0.703556 0.812889 0.000000 -vt 0.703614 0.843515 0.000000 -vt 0.713591 0.842403 0.000000 -vt 0.685832 0.779015 0.000000 -vt 0.694305 0.779028 0.000000 -vt 0.681876 0.744763 0.000000 -vt 0.689209 0.744760 0.000000 -vt 0.810489 0.915025 0.000000 -vt 0.789643 0.904915 0.000000 -vt 0.763502 0.897211 0.000000 -vt 0.736882 0.891458 0.000000 -vt 0.833882 0.877925 0.000000 -vt 0.830196 0.870154 0.000000 -vt 0.665446 0.821078 0.000000 -vt 0.675263 0.855962 0.000000 -vt 0.657850 0.783230 0.000000 -vt 0.654816 0.744778 0.000000 -vt 0.715693 0.882966 0.000000 -vt 0.689929 0.874198 0.000000 -vt 0.632023 0.869789 0.000000 -vt 0.648187 0.889954 0.000000 -vt 0.624729 0.831600 0.000000 -vt 0.617650 0.787994 0.000000 -vt 0.614571 0.744755 0.000000 -vt 0.995992 0.846520 0.000000 -vt 0.996536 0.855982 0.000000 -vt 0.991501 0.845898 0.000000 -vt 0.988333 0.853618 0.000000 -vt 0.961924 0.906842 0.000000 -vt 0.944564 0.937158 0.000000 -vt 0.928403 0.970303 0.000000 -vt 0.972178 0.874978 0.000000 -vt 0.981805 0.879609 0.000000 -vt 0.882666 0.843967 0.000000 -vt 0.869907 0.843064 0.000000 -vt 0.922122 0.842760 0.000000 -vt 0.802869 0.744741 0.000000 -vt 0.807042 0.758253 0.000000 -vt 0.814339 0.770298 0.000000 -vt 0.822772 0.766557 0.000000 -vt 0.824571 0.779950 0.000000 -vt 0.832115 0.776998 0.000000 -vt 0.839157 0.813215 0.000000 -vt 0.832958 0.799411 0.000000 -vt 0.844871 0.823460 0.000000 -vt 0.847351 0.838936 0.000000 -vt 0.841673 0.846389 0.000000 -vt 0.810947 0.863486 0.000000 -vt 0.792244 0.868903 0.000000 -vt 0.765926 0.870387 0.000000 -vt 0.743682 0.866644 0.000000 -vt 0.725129 0.849660 0.000000 -vt 0.732520 0.855317 0.000000 -vt 0.709422 0.811892 0.000000 -vt 0.719360 0.841105 0.000000 -vt 0.700735 0.778593 0.000000 -vt 0.696979 0.744761 0.000000 -vt 0.823595 0.857982 0.000000 -vt 0.844697 0.865754 0.000000 -vt 0.832563 0.852946 0.000000 -vt 0.744624 0.859953 0.000000 -vt 0.765077 0.863689 0.000000 -vt 0.790880 0.864773 0.000000 -vt 0.808861 0.860170 0.000000 -vt 0.820940 0.854831 0.000000 -vt 0.829727 0.850030 0.000000 -vt 0.837776 0.843606 0.000000 -vt 0.842833 0.837312 0.000000 -vt 0.840713 0.823410 0.000000 -vt 0.836029 0.814689 0.000000 -vt 0.827901 0.802468 0.000000 -vt 0.814958 0.787188 0.000000 -vt 0.805131 0.775627 0.000000 -vt 0.798631 0.761364 0.000000 -vt 0.794711 0.744744 0.000000 -vt 0.823022 0.805445 0.000000 -vt 0.810293 0.790673 0.000000 -vt 0.800652 0.778128 0.000000 -vt 0.792317 0.762532 0.000000 -vt 0.787037 0.744747 0.000000 -vt 0.733809 0.904559 0.000000 -vt 0.760316 0.911703 0.000000 -vt 0.991287 0.184616 0.000000 -vt 0.966726 0.142552 0.000000 -vt 0.997388 0.179701 0.000000 -vt 0.972845 0.139150 0.000000 -vt 0.961503 0.229079 0.000000 -vt 0.947051 0.254809 0.000000 -vt 0.918936 0.214844 0.000000 -vt 0.978510 0.203906 0.000000 -vt 0.940721 0.176716 0.000000 -vt 0.933799 0.280513 0.000000 -vt 0.905448 0.246653 0.000000 -vt 0.957712 0.149728 0.000000 -vt 0.987296 0.837510 0.000000 -vt 0.984188 0.841948 0.000000 -vt 0.930988 0.811492 0.000000 -vt 0.927908 0.815945 0.000000 -vt 0.874624 0.782600 0.000000 -vt 0.879310 0.778941 0.000000 -vt 0.883390 0.790657 0.000000 -vt 0.886913 0.786537 0.000000 -vt 0.867629 0.773037 0.000000 -vt 0.873149 0.770324 0.000000 -vt 0.863507 0.760529 0.000000 -vt 0.869542 0.759895 0.000000 -vt 0.863822 0.744725 0.000000 -vt 0.869999 0.748511 0.000000 -vt 0.849470 0.873433 0.000000 -vt 0.850926 0.922938 0.000000 -vt 0.832410 0.914605 0.000000 -vt 0.850628 0.946645 0.000000 -vt 0.824017 0.932271 0.000000 -vt 0.782108 0.922937 0.000000 -vt 0.852220 0.774364 0.000000 -vt 0.789699 0.861815 0.000000 -vt 0.806457 0.856563 0.000000 -vt 0.817326 0.851491 0.000000 -vt 0.831713 0.840069 0.000000 -vt 0.825793 0.846134 0.000000 -vt 0.834948 0.832574 0.000000 -vt 0.834331 0.824327 0.000000 -vt 0.831614 0.817057 0.000000 -vt 0.790882 0.763238 0.000000 -vt 0.785571 0.744748 0.000000 -vt 0.799636 0.779181 0.000000 -vt 0.727417 0.897469 0.000000 -vt 0.666699 0.895450 0.000000 -vt 0.687412 0.895364 0.000000 -vt 0.971997 0.103679 0.000000 -vt 0.982230 0.132221 0.000000 -vt 0.848733 0.990427 0.000000 -vt 0.906049 0.994898 0.000000 -vt 0.915518 0.995736 0.000000 -vt 0.994235 0.842300 0.000000 -vt 0.167314 0.941096 0.000000 -vt 0.157005 0.944138 0.000000 -vt 0.159509 0.928502 0.000000 -vt 0.151449 0.935019 0.000000 -vt 0.170045 0.955096 0.000000 -vt 0.159271 0.955096 0.000000 -vt 0.007461 0.900027 0.000000 -vt 0.147352 0.920573 0.000000 -vt 0.143002 0.929894 0.000000 -vt 0.134407 0.917116 0.000000 -vt 0.133248 0.927578 0.000000 -vt 0.092027 0.900998 0.000000 -vt 0.093769 0.900027 0.000000 -vt 0.079956 0.926907 0.000000 -vt 0.080295 0.916335 0.000000 -vt 0.092054 0.858902 0.000000 -vt 0.870027 0.293539 0.000000 -vt 0.898639 0.291452 0.000000 -vt 0.852039 0.313758 0.000000 -vt 0.887557 0.314149 0.000000 -vt 0.887490 0.319958 0.000000 -vt 0.863674 0.832905 0.000000 -vt 0.873407 0.831316 0.000000 -vt 0.848101 0.831633 0.000000 -vt 0.843067 0.831313 0.000000 -vt 0.960419 0.109997 0.000000 -vt 0.951667 0.076577 0.000000 -vt 0.962974 0.070631 0.000000 -vt 0.940444 0.034450 0.000000 -vt 0.952633 0.031365 0.000000 -vt 0.958689 0.139487 0.000000 -vt 0.950838 0.112785 0.000000 -vt 0.942291 0.079891 0.000000 -vt 0.931355 0.036950 0.000000 -vt 0.826583 0.965707 0.000000 -vt 0.835082 0.988600 0.000000 -vt 0.837427 0.951632 0.000000 -vt 0.713565 0.894176 0.000000 -vt 0.719793 0.778743 0.000000 -vt 0.719398 0.745624 0.000000 -vt 0.762929 0.761192 0.000000 -vt 0.759000 0.745624 0.000000 -vt 0.784902 0.783045 0.000000 -vt 0.722839 0.810315 0.000000 -vt 0.773162 0.774560 0.000000 -vt 0.819474 0.811538 0.000000 -vt 0.726166 0.838217 0.000000 -vt 0.815913 0.804902 0.000000 -vt 0.811087 0.799631 0.000000 -vt 0.800198 0.792446 0.000000 -vt 0.809371 0.832209 0.000000 -vt 0.801299 0.839856 0.000000 -vt 0.787602 0.848287 0.000000 -vt 0.730113 0.846807 0.000000 -vt 0.818819 0.818720 0.000000 -vt 0.815480 0.825394 0.000000 -vt 0.766623 0.855835 0.000000 -vt 0.736832 0.852377 0.000000 -vt 0.747833 0.856606 0.000000 -vt 0.015449 0.916548 0.000000 -vt 0.006293 0.926682 0.000000 -vt 0.007110 0.917489 0.000000 -vt 0.814404 0.948279 0.000000 -vt 0.802918 0.937081 0.000000 -vt 0.893087 0.314095 0.000000 -vt 0.095824 0.933535 0.000000 -vt 0.006082 0.933454 0.000000 -vt 0.129599 0.933505 0.000000 -vt 0.138341 0.935053 0.000000 -vt 0.146346 0.939368 0.000000 -vt 0.151038 0.946615 0.000000 -vt 0.152856 0.955096 0.000000 -vt 0.144859 0.871542 0.000000 -vt 0.150949 0.869044 0.000000 -vt 0.146576 0.879589 0.000000 -vt 0.153315 0.879592 0.000000 -vt 0.132861 0.860617 0.000000 -vt 0.124573 0.858902 0.000000 -vt 0.134998 0.854515 0.000000 -vt 0.125084 0.852531 0.000000 -vt 0.140435 0.864707 0.000000 -vt 0.144883 0.859885 0.000000 -vt 0.092027 0.858272 0.000000 -vt 0.093865 0.858902 0.000000 -vt 0.092417 0.852640 0.000000 -vt 0.007461 0.858902 0.000000 -vt 0.007452 0.852187 0.000000 -vt 0.090091 0.858902 0.000000 -vt 0.871074 0.691493 0.000000 -vt 0.860839 0.702619 0.000000 -vt 0.851934 0.680394 0.000000 -vt 0.841067 0.694553 0.000000 -vt 0.828133 0.731290 0.000000 -vt 0.815877 0.733185 0.000000 -vt 0.846453 0.730237 0.000000 -vt 0.890634 0.585910 0.000000 -vt 0.872415 0.550883 0.000000 -vt 0.935172 0.558265 0.000000 -vt 0.918070 0.524370 0.000000 -vt 0.853388 0.665099 0.000000 -vt 0.860880 0.670332 0.000000 -vt 0.878044 0.633561 0.000000 -vt 0.867920 0.637917 0.000000 -vt 0.865519 0.623725 0.000000 -vt 0.859704 0.630389 0.000000 -vt 0.888242 0.676658 0.000000 -vt 0.911120 0.614185 0.000000 -vt 0.953830 0.588286 0.000000 -vt 0.818016 0.608692 0.000000 -vt 0.815620 0.615215 0.000000 -vt 0.795841 0.605140 0.000000 -vt 0.794431 0.613024 0.000000 -vt 0.765813 0.604815 0.000000 -vt 0.765722 0.613118 0.000000 -vt 0.742130 0.618970 0.000000 -vt 0.726439 0.627156 0.000000 -vt 0.739903 0.611179 0.000000 -vt 0.720063 0.621346 0.000000 -vt 0.711235 0.631618 0.000000 -vt 0.718584 0.636045 0.000000 -vt 0.694188 0.674792 0.000000 -vt 0.703702 0.646243 0.000000 -vt 0.703661 0.676789 0.000000 -vt 0.713654 0.647347 0.000000 -vt 0.685979 0.710585 0.000000 -vt 0.694443 0.710570 0.000000 -vt 0.810271 0.574882 0.000000 -vt 0.789483 0.584973 0.000000 -vt 0.763413 0.592665 0.000000 -vt 0.736865 0.598411 0.000000 -vt 0.833615 0.611875 0.000000 -vt 0.829941 0.619629 0.000000 -vt 0.665644 0.668641 0.000000 -vt 0.675421 0.633843 0.000000 -vt 0.658043 0.706395 0.000000 -vt 0.715732 0.606889 0.000000 -vt 0.690040 0.615648 0.000000 -vt 0.632288 0.620073 0.000000 -vt 0.648399 0.599953 0.000000 -vt 0.625032 0.658163 0.000000 -vt 0.617948 0.701623 0.000000 -vt 0.995069 0.643040 0.000000 -vt 0.990604 0.643696 0.000000 -vt 0.995552 0.633629 0.000000 -vt 0.987415 0.636047 0.000000 -vt 0.961069 0.583273 0.000000 -vt 0.943905 0.553197 0.000000 -vt 0.928051 0.520151 0.000000 -vt 0.971278 0.614898 0.000000 -vt 0.980827 0.610256 0.000000 -vt 0.882292 0.645704 0.000000 -vt 0.869588 0.646646 0.000000 -vt 0.921577 0.646846 0.000000 -vt 0.806850 0.731062 0.000000 -vt 0.814103 0.719122 0.000000 -vt 0.824363 0.709601 0.000000 -vt 0.822583 0.722962 0.000000 -vt 0.831893 0.712543 0.000000 -vt 0.838896 0.676420 0.000000 -vt 0.832717 0.690188 0.000000 -vt 0.844593 0.666198 0.000000 -vt 0.847063 0.650758 0.000000 -vt 0.841397 0.643325 0.000000 -vt 0.810746 0.626281 0.000000 -vt 0.792090 0.620887 0.000000 -vt 0.765839 0.619417 0.000000 -vt 0.743656 0.623159 0.000000 -vt 0.725160 0.640106 0.000000 -vt 0.732529 0.634461 0.000000 -vt 0.709517 0.677781 0.000000 -vt 0.719412 0.648642 0.000000 -vt 0.700865 0.711006 0.000000 -vt 0.823364 0.631767 0.000000 -vt 0.844405 0.624013 0.000000 -vt 0.832310 0.636788 0.000000 -vt 0.744600 0.629834 0.000000 -vt 0.764996 0.626100 0.000000 -vt 0.790730 0.625007 0.000000 -vt 0.808665 0.629592 0.000000 -vt 0.820714 0.634913 0.000000 -vt 0.829481 0.639699 0.000000 -vt 0.837510 0.646105 0.000000 -vt 0.842556 0.652380 0.000000 -vt 0.840444 0.666247 0.000000 -vt 0.835773 0.674949 0.000000 -vt 0.827668 0.687141 0.000000 -vt 0.814770 0.702390 0.000000 -vt 0.804977 0.713925 0.000000 -vt 0.798510 0.728153 0.000000 -vt 0.822798 0.684172 0.000000 -vt 0.810113 0.698916 0.000000 -vt 0.800505 0.711432 0.000000 -vt 0.792205 0.726992 0.000000 -vt 0.733795 0.585344 0.000000 -vt 0.760231 0.578210 0.000000 -vt 0.749864 0.185042 0.000000 -vt 0.743741 0.180171 0.000000 -vt 0.774356 0.142860 0.000000 -vt 0.768210 0.139507 0.000000 -vt 0.779944 0.228845 0.000000 -vt 0.822322 0.214214 0.000000 -vt 0.794326 0.254341 0.000000 -vt 0.762833 0.204067 0.000000 -vt 0.800380 0.176439 0.000000 -vt 0.807594 0.279991 0.000000 -vt 0.835667 0.245974 0.000000 -vt 0.783340 0.150069 0.000000 -vt 0.986459 0.652072 0.000000 -vt 0.930486 0.678108 0.000000 -vt 0.983343 0.647676 0.000000 -vt 0.927411 0.673666 0.000000 -vt 0.874280 0.706939 0.000000 -vt 0.883021 0.698900 0.000000 -vt 0.878958 0.710590 0.000000 -vt 0.886537 0.703009 0.000000 -vt 0.867310 0.716479 0.000000 -vt 0.872816 0.719184 0.000000 -vt 0.863241 0.728954 0.000000 -vt 0.869238 0.729573 0.000000 -vt 0.869789 0.740903 0.000000 -vt 0.849164 0.616351 0.000000 -vt 0.850601 0.566978 0.000000 -vt 0.832136 0.575294 0.000000 -vt 0.823758 0.557679 0.000000 -vt 0.850297 0.543332 0.000000 -vt 0.781963 0.567000 0.000000 -vt 0.851947 0.715162 0.000000 -vt 0.789553 0.627962 0.000000 -vt 0.806267 0.633195 0.000000 -vt 0.817109 0.638250 0.000000 -vt 0.831462 0.649635 0.000000 -vt 0.825555 0.643588 0.000000 -vt 0.834690 0.657109 0.000000 -vt 0.834076 0.665334 0.000000 -vt 0.831365 0.672586 0.000000 -vt 0.790768 0.726291 0.000000 -vt 0.552712 0.587402 0.000000 -vt 0.799489 0.710380 0.000000 -vt 0.727422 0.592418 0.000000 -vt 0.666861 0.594460 0.000000 -vt 0.687520 0.594536 0.000000 -vt 0.758743 0.132695 0.000000 -vt 0.768633 0.104037 0.000000 -vt 0.848394 0.499665 0.000000 -vt 0.905796 0.495536 0.000000 -vt 0.915243 0.494743 0.000000 -vt 0.993344 0.647252 0.000000 -vt 0.167314 0.969095 0.000000 -vt 0.159509 0.981689 0.000000 -vt 0.157005 0.966054 0.000000 -vt 0.151449 0.975172 0.000000 -vt 0.851975 0.319566 0.000000 -vt 0.090185 0.900027 0.000000 -vt 0.147352 0.989617 0.000000 -vt 0.134407 0.993075 0.000000 -vt 0.143002 0.980297 0.000000 -vt 0.133248 0.982613 0.000000 -vt 0.092034 0.900027 0.000000 -vt 0.092317 0.906636 0.000000 -vt 0.079956 0.983284 0.000000 -vt 0.080295 0.993856 0.000000 -vt 0.007373 0.906645 0.000000 -vt 0.841469 0.290835 0.000000 -vt 0.863343 0.656769 0.000000 -vt 0.873052 0.658352 0.000000 -vt 0.847813 0.658044 0.000000 -vt 0.842790 0.658363 0.000000 -vt 0.780288 0.110213 0.000000 -vt 0.788631 0.076689 0.000000 -vt 0.777252 0.070881 0.000000 -vt 0.799339 0.034428 0.000000 -vt 0.787113 0.031492 0.000000 -vt 0.782394 0.139672 0.000000 -vt 0.789903 0.112884 0.000000 -vt 0.798046 0.079888 0.000000 -vt 0.808458 0.036817 0.000000 -vt 0.826307 0.524328 0.000000 -vt 0.834775 0.501491 0.000000 -vt 0.837127 0.538362 0.000000 -vt 0.713606 0.595708 0.000000 -vt 0.719793 0.712504 0.000000 -vt 0.762929 0.730056 0.000000 -vt 0.784902 0.708202 0.000000 -vt 0.773162 0.716687 0.000000 -vt 0.722839 0.680933 0.000000 -vt 0.726166 0.653030 0.000000 -vt 0.819474 0.679709 0.000000 -vt 0.815913 0.686345 0.000000 -vt 0.811086 0.691616 0.000000 -vt 0.800198 0.698801 0.000000 -vt 0.809371 0.659038 0.000000 -vt 0.801298 0.651391 0.000000 -vt 0.787602 0.642960 0.000000 -vt 0.730113 0.644440 0.000000 -vt 0.818819 0.672527 0.000000 -vt 0.815480 0.665853 0.000000 -vt 0.766622 0.635412 0.000000 -vt 0.736832 0.638870 0.000000 -vt 0.747833 0.634641 0.000000 -vt 0.015448 0.993642 0.000000 -vt 0.007110 0.992700 0.000000 -vt 0.006293 0.983508 0.000000 -vt 0.814164 0.541714 0.000000 -vt 0.802712 0.552886 0.000000 -vt 0.846511 0.313581 0.000000 -vt 0.095824 0.976655 0.000000 -vt 0.006081 0.976737 0.000000 -vt 0.129598 0.976686 0.000000 -vt 0.138341 0.975139 0.000000 -vt 0.146345 0.970823 0.000000 -vt 0.151038 0.963576 0.000000 -vt 0.144859 0.887630 0.000000 -vt 0.150944 0.890133 0.000000 -vt 0.132861 0.898549 0.000000 -vt 0.134991 0.904652 0.000000 -vt 0.124573 0.900027 0.000000 -vt 0.125074 0.906633 0.000000 -vt 0.140435 0.894463 0.000000 -vt 0.144876 0.899288 0.000000 -vt 0.693946 0.173145 0.000000 -vt 0.722943 0.178965 0.000000 -vt 0.715167 0.213186 0.000000 -vt 0.533605 0.131198 0.000000 -vt 0.518282 0.125114 0.000000 -vt 0.531182 0.095475 0.000000 -vt 0.731544 0.246003 0.000000 -vt 0.729887 0.257924 0.000000 -vt 0.704107 0.246127 0.000000 -vt 0.703427 0.259698 0.000000 -vt 0.655921 0.250000 0.000000 -vt 0.656540 0.265552 0.000000 -vt 0.611689 0.273725 0.000000 -vt 0.602002 0.258946 0.000000 -vt 0.454887 0.271807 0.000000 -vt 0.502496 0.271672 0.000000 -vt 0.455212 0.287864 0.000000 -vt 0.501087 0.287823 0.000000 -vt 0.401482 0.272503 0.000000 -vt 0.401482 0.288670 0.000000 -vt 0.601618 0.272915 0.000000 -vt 0.588511 0.262397 0.000000 -vt 0.558853 0.265784 0.000000 -vt 0.561431 0.278612 0.000000 -vt 0.510280 0.271988 0.000000 -vt 0.518259 0.271446 0.000000 -vt 0.513069 0.287795 0.000000 -vt 0.523551 0.286047 0.000000 -vt 0.535969 0.269399 0.000000 -vt 0.539672 0.281898 0.000000 -vt 0.749649 0.257155 0.000000 -vt 0.767604 0.294187 0.000000 -vt 0.739495 0.264393 0.000000 -vt 0.755078 0.301162 0.000000 -vt 0.724864 0.312010 0.000000 -vt 0.685373 0.328566 0.000000 -vt 0.643620 0.346523 0.000000 -vt 0.460578 0.336119 0.000000 -vt 0.513579 0.340543 0.000000 -vt 0.401473 0.331545 0.000000 -vt 0.601608 0.361711 0.000000 -vt 0.633851 0.350058 0.000000 -vt 0.529671 0.342340 0.000000 -vt 0.544971 0.344404 0.000000 -vt 0.579232 0.370086 0.000000 -vt 0.606396 0.273921 0.000000 -vt 0.638362 0.348486 0.000000 -vt 0.738390 0.245944 0.000000 -vt 0.735425 0.259160 0.000000 -vt 0.642609 0.223057 0.000000 -vt 0.658537 0.166170 0.000000 -vt 0.686659 0.221168 0.000000 -vt 0.615828 0.155827 0.000000 -vt 0.599276 0.223914 0.000000 -vt 0.463763 0.157942 0.000000 -vt 0.453945 0.235101 0.000000 -vt 0.432699 0.167303 0.000000 -vt 0.402909 0.235101 0.000000 -vt 0.402869 0.170209 0.000000 -vt 0.607818 0.154278 0.000000 -vt 0.591311 0.225769 0.000000 -vt 0.553728 0.229130 0.000000 -vt 0.576439 0.144782 0.000000 -vt 0.581771 0.227055 0.000000 -vt 0.598962 0.152008 0.000000 -vt 0.533257 0.229488 0.000000 -vt 0.557174 0.138522 0.000000 -vt 0.525533 0.186538 0.000000 -vt 0.515975 0.228765 0.000000 -vt 0.578064 0.417206 0.000000 -vt 0.599719 0.514017 0.000000 -vt 0.602713 0.510686 0.000000 -vt 0.614818 0.519487 0.000000 -vt 0.615547 0.514185 0.000000 -vt 0.587761 0.504682 0.000000 -vt 0.590694 0.502497 0.000000 -vt 0.578496 0.011496 0.000000 -vt 0.591295 0.016376 0.000000 -vt 0.575955 0.074693 0.000000 -vt 0.608216 0.027586 0.000000 -vt 0.622451 0.042745 0.000000 -vt 0.636674 0.060017 0.000000 -vt 0.630119 0.053115 0.000000 -vt 0.676348 0.085196 0.000000 -vt 0.708567 0.108239 0.000000 -vt 0.733687 0.125510 0.000000 -vt 0.777022 0.359170 0.000000 -vt 0.791597 0.351363 0.000000 -vt 0.752856 0.384314 0.000000 -vt 0.722727 0.414314 0.000000 -vt 0.686003 0.448900 0.000000 -vt 0.681959 0.454059 0.000000 -vt 0.678966 0.458704 0.000000 -vt 0.645197 0.450985 0.000000 -vt 0.472145 0.378069 0.000000 -vt 0.503514 0.391071 0.000000 -vt 0.528802 0.408323 0.000000 -vt 0.554670 0.430448 0.000000 -vt 0.435389 0.371512 0.000000 -vt 0.401495 0.369589 0.000000 -vt 0.746210 0.251262 0.000000 -vt 0.709480 0.218653 0.000000 -vt 0.771206 0.292787 0.000000 -vt 0.753188 0.256063 0.000000 -vt 0.750507 0.250711 0.000000 -vt 0.510307 0.268374 0.000000 -vt 0.517949 0.267880 0.000000 -vt 0.655348 0.246392 0.000000 -vt 0.703879 0.242550 0.000000 -vt 0.601037 0.255430 0.000000 -vt 0.502698 0.268091 0.000000 -vt 0.454828 0.268222 0.000000 -vt 0.401481 0.268278 0.000000 -vt 0.558121 0.262285 0.000000 -vt 0.587602 0.258919 0.000000 -vt 0.535369 0.265851 0.000000 -vt 0.793560 0.347619 0.000000 -vt 0.731269 0.242097 0.000000 -vt 0.737028 0.241848 0.000000 -vt 0.724406 0.218127 0.000000 -vt 0.734306 0.181288 0.000000 -vt 0.721608 0.222625 0.000000 -vt 0.713560 0.216636 0.000000 -vt 0.507958 0.238879 0.000000 -vt 0.508720 0.229347 0.000000 -vt 0.515396 0.238585 0.000000 -vt 0.643299 0.234864 0.000000 -vt 0.688094 0.231329 0.000000 -vt 0.593788 0.235390 0.000000 -vt 0.454869 0.244112 0.000000 -vt 0.500659 0.240175 0.000000 -vt 0.500770 0.230895 0.000000 -vt 0.402915 0.243859 0.000000 -vt 0.553213 0.238005 0.000000 -vt 0.581215 0.234713 0.000000 -vt 0.531585 0.239088 0.000000 -vt 0.745792 0.127757 0.000000 -vt 0.713337 0.227506 0.000000 -vt 0.718175 0.225676 0.000000 -vt 0.514837 0.183038 0.000000 -vt 0.734256 0.426656 0.000000 -vt 0.764033 0.394527 0.000000 -vt 0.792874 0.363108 0.000000 -vt 0.670541 0.470179 0.000000 -vt 0.676761 0.482066 0.000000 -vt 0.655994 0.486028 0.000000 -vt 0.660688 0.497354 0.000000 -vt 0.638921 0.498168 0.000000 -vt 0.641617 0.509754 0.000000 -vt 0.691540 0.469228 0.000000 -vt 0.627036 0.503995 0.000000 -vt 0.626833 0.514062 0.000000 -vt 0.401503 0.375423 0.000000 -vt 0.434700 0.376915 0.000000 -vt 0.470320 0.383334 0.000000 -vt 0.524924 0.412296 0.000000 -vt 0.500532 0.396636 0.000000 -vt 0.544747 0.436849 0.000000 -vt 0.548949 0.434498 0.000000 -vt 0.569271 0.458371 0.000000 -vt 0.564441 0.460718 0.000000 -vt 0.490755 0.141271 0.000000 -vt 0.501690 0.183534 0.000000 -vt 0.510448 0.119966 0.000000 -vt 0.560442 0.463538 0.000000 -vt 0.572800 0.485657 0.000000 -vt 0.576378 0.482320 0.000000 -vt 0.644348 0.514569 0.000000 -vt 0.626588 0.519585 0.000000 -vt 0.664762 0.499949 0.000000 -vt 0.682758 0.483184 0.000000 -vt 0.696871 0.470881 0.000000 -vt 0.738781 0.428313 0.000000 -vt 0.767651 0.395884 0.000000 -vt 0.593580 0.008852 0.000000 -vt 0.578618 0.005160 0.000000 -vt 0.612085 0.020123 0.000000 -vt 0.627247 0.035345 0.000000 -vt 0.639441 0.045805 0.000000 -vt 0.682593 0.076621 0.000000 -vt 0.714939 0.099261 0.000000 -vt 0.744716 0.120095 0.000000 -vt 0.570488 0.010347 0.000000 -vt 0.559181 0.013750 0.000000 -vt 0.569002 0.005348 0.000000 -vt 0.557040 0.009988 0.000000 -vt 0.617299 0.506217 0.000000 -vt 0.606542 0.504426 0.000000 -vt 0.595934 0.497686 0.000000 -vt 0.552393 0.020923 0.000000 -vt 0.548159 0.019039 0.000000 -vt 0.541175 0.040180 0.000000 -vt 0.581309 0.479426 0.000000 -vt 0.550680 0.068236 0.000000 -vt 0.558203 0.045627 0.000000 -vt 0.523687 0.091131 0.000000 -vt 0.533774 0.062861 0.000000 -vt 0.794219 0.367093 0.000000 -vt 0.606654 0.476742 0.000000 -vt 0.619535 0.475150 0.000000 -vt 0.613626 0.491031 0.000000 -vt 0.596427 0.469565 0.000000 -vt 0.589574 0.474348 0.000000 -vt 0.601644 0.488238 0.000000 -vt 0.596462 0.456333 0.000000 -vt 0.580238 0.456401 0.000000 -vt 0.564474 0.423905 0.000000 -vt 0.629122 0.454336 0.000000 -vt 0.619476 0.446204 0.000000 -vt 0.628661 0.466544 0.000000 -vt 0.626669 0.455159 0.000000 -vt 0.626709 0.465909 0.000000 -vt 0.600154 0.467647 0.000000 -vt 0.607877 0.474550 0.000000 -vt 0.605921 0.447138 0.000000 -vt 0.618663 0.447919 0.000000 -vt 0.599035 0.456745 0.000000 -vt 0.539124 0.064358 0.000000 -vt 0.545401 0.041526 0.000000 -vt 0.111791 0.173540 0.000000 -vt 0.090623 0.213611 0.000000 -vt 0.082803 0.179397 0.000000 -vt 0.272074 0.131370 0.000000 -vt 0.274445 0.095645 0.000000 -vt 0.287389 0.125266 0.000000 -vt 0.072237 0.240197 0.000000 -vt 0.100093 0.240551 0.000000 -vt 0.073743 0.252125 0.000000 -vt 0.100672 0.254197 0.000000 -vt 0.149945 0.243724 0.000000 -vt 0.148516 0.260403 0.000000 -vt 0.192696 0.271216 0.000000 -vt 0.202678 0.256657 0.000000 -vt 0.348145 0.271854 0.000000 -vt 0.347812 0.287920 0.000000 -vt 0.300772 0.271629 0.000000 -vt 0.302124 0.287805 0.000000 -vt 0.215875 0.260681 0.000000 -vt 0.202692 0.270854 0.000000 -vt 0.245096 0.265004 0.000000 -vt 0.242353 0.277848 0.000000 -vt 0.293058 0.271898 0.000000 -vt 0.290208 0.287705 0.000000 -vt 0.285158 0.271285 0.000000 -vt 0.279807 0.285861 0.000000 -vt 0.267659 0.269015 0.000000 -vt 0.263862 0.281496 0.000000 -vt 0.053635 0.251116 0.000000 -vt 0.063805 0.258444 0.000000 -vt 0.034438 0.287782 0.000000 -vt 0.046915 0.294948 0.000000 -vt 0.077447 0.306727 0.000000 -vt 0.117338 0.324766 0.000000 -vt 0.159191 0.344854 0.000000 -vt 0.342353 0.336220 0.000000 -vt 0.289299 0.340680 0.000000 -vt 0.201098 0.361667 0.000000 -vt 0.168986 0.348811 0.000000 -vt 0.273166 0.342554 0.000000 -vt 0.257850 0.344685 0.000000 -vt 0.223430 0.370626 0.000000 -vt 0.197934 0.271664 0.000000 -vt 0.164473 0.347056 0.000000 -vt 0.065374 0.240067 0.000000 -vt 0.068078 0.253266 0.000000 -vt 0.163196 0.223380 0.000000 -vt 0.119146 0.221551 0.000000 -vt 0.147190 0.166514 0.000000 -vt 0.189886 0.156113 0.000000 -vt 0.206530 0.224177 0.000000 -vt 0.341957 0.158019 0.000000 -vt 0.373034 0.167341 0.000000 -vt 0.351874 0.235164 0.000000 -vt 0.197894 0.154553 0.000000 -vt 0.214499 0.226020 0.000000 -vt 0.252086 0.229332 0.000000 -vt 0.224041 0.227293 0.000000 -vt 0.229260 0.145017 0.000000 -vt 0.206746 0.152272 0.000000 -vt 0.272558 0.229664 0.000000 -vt 0.248515 0.138730 0.000000 -vt 0.280223 0.186700 0.000000 -vt 0.289840 0.228914 0.000000 -vt 0.224183 0.418689 0.000000 -vt 0.198386 0.517693 0.000000 -vt 0.182576 0.522783 0.000000 -vt 0.195417 0.514164 0.000000 -vt 0.182046 0.517301 0.000000 -vt 0.211939 0.507362 0.000000 -vt 0.208810 0.505280 0.000000 -vt 0.227018 0.011731 0.000000 -vt 0.229646 0.074925 0.000000 -vt 0.214225 0.016629 0.000000 -vt 0.197320 0.027860 0.000000 -vt 0.183105 0.043039 0.000000 -vt 0.168907 0.060337 0.000000 -vt 0.175452 0.053419 0.000000 -vt 0.129267 0.085565 0.000000 -vt 0.097081 0.108655 0.000000 -vt 0.071984 0.125960 0.000000 -vt 0.021267 0.351703 0.000000 -vt 0.006537 0.343143 0.000000 -vt 0.045268 0.378490 0.000000 -vt 0.075606 0.410662 0.000000 -vt 0.112661 0.447514 0.000000 -vt 0.116676 0.452988 0.000000 -vt 0.119526 0.457894 0.000000 -vt 0.154527 0.452184 0.000000 -vt 0.330720 0.378225 0.000000 -vt 0.299179 0.391414 0.000000 -vt 0.273621 0.408968 0.000000 -vt 0.247402 0.431586 0.000000 -vt 0.367575 0.371577 0.000000 -vt 0.057152 0.245252 0.000000 -vt 0.096319 0.219066 0.000000 -vt 0.030850 0.286314 0.000000 -vt 0.050074 0.249996 0.000000 -vt 0.052831 0.244671 0.000000 -vt 0.293045 0.268282 0.000000 -vt 0.285494 0.267719 0.000000 -vt 0.150722 0.239937 0.000000 -vt 0.100334 0.236957 0.000000 -vt 0.203748 0.253166 0.000000 -vt 0.300577 0.268047 0.000000 -vt 0.348204 0.268269 0.000000 -vt 0.245873 0.261516 0.000000 -vt 0.216849 0.257222 0.000000 -vt 0.268291 0.265471 0.000000 -vt 0.004761 0.339404 0.000000 -vt 0.072545 0.236292 0.000000 -vt 0.066778 0.235993 0.000000 -vt 0.081395 0.218565 0.000000 -vt 0.071442 0.181735 0.000000 -vt 0.084196 0.223057 0.000000 -vt 0.092236 0.217056 0.000000 -vt 0.297872 0.239016 0.000000 -vt 0.290432 0.238737 0.000000 -vt 0.297096 0.229486 0.000000 -vt 0.162522 0.235187 0.000000 -vt 0.117723 0.231713 0.000000 -vt 0.212035 0.235645 0.000000 -vt 0.350965 0.244177 0.000000 -vt 0.305170 0.240301 0.000000 -vt 0.305047 0.231022 0.000000 -vt 0.252613 0.238208 0.000000 -vt 0.224605 0.234952 0.000000 -vt 0.274245 0.239260 0.000000 -vt 0.059882 0.128223 0.000000 -vt 0.092473 0.227926 0.000000 -vt 0.087633 0.226102 0.000000 -vt 0.290913 0.183183 0.000000 -vt 0.062992 0.422821 0.000000 -vt 0.033371 0.388577 0.000000 -vt 0.004787 0.355169 0.000000 -vt 0.127012 0.469953 0.000000 -vt 0.141408 0.486812 0.000000 -vt 0.120140 0.481961 0.000000 -vt 0.136095 0.498246 0.000000 -vt 0.158539 0.499928 0.000000 -vt 0.154140 0.511211 0.000000 -vt 0.105596 0.468174 0.000000 -vt 0.170639 0.506311 0.000000 -vt 0.169501 0.516436 0.000000 -vt 0.368282 0.376978 0.000000 -vt 0.332565 0.383486 0.000000 -vt 0.277537 0.412901 0.000000 -vt 0.302193 0.396965 0.000000 -vt 0.257454 0.437684 0.000000 -vt 0.253170 0.435458 0.000000 -vt 0.231778 0.460510 0.000000 -vt 0.236732 0.462620 0.000000 -vt 0.304061 0.183661 0.000000 -vt 0.314941 0.141380 0.000000 -vt 0.295214 0.120104 0.000000 -vt 0.240837 0.465265 0.000000 -vt 0.227655 0.488107 0.000000 -vt 0.223823 0.485141 0.000000 -vt 0.150332 0.515520 0.000000 -vt 0.169290 0.522106 0.000000 -vt 0.131069 0.499883 0.000000 -vt 0.113942 0.482898 0.000000 -vt 0.099861 0.469714 0.000000 -vt 0.058201 0.424334 0.000000 -vt 0.029594 0.389718 0.000000 -vt 0.211931 0.009108 0.000000 -vt 0.226886 0.005396 0.000000 -vt 0.193440 0.020406 0.000000 -vt 0.178297 0.035647 0.000000 -vt 0.166119 0.046125 0.000000 -vt 0.123009 0.076999 0.000000 -vt 0.090697 0.099685 0.000000 -vt 0.060948 0.120559 0.000000 -vt 0.235025 0.010571 0.000000 -vt 0.236503 0.005569 0.000000 -vt 0.246336 0.013959 0.000000 -vt 0.248472 0.010195 0.000000 -vt 0.180545 0.509024 0.000000 -vt 0.191699 0.507574 0.000000 -vt 0.202897 0.500989 0.000000 -vt 0.253135 0.021122 0.000000 -vt 0.257366 0.019230 0.000000 -vt 0.264380 0.040366 0.000000 -vt 0.218624 0.482684 0.000000 -vt 0.254909 0.068434 0.000000 -vt 0.247358 0.045835 0.000000 -vt 0.281935 0.091292 0.000000 -vt 0.271810 0.063036 0.000000 -vt 0.003278 0.359082 0.000000 -vt 0.192604 0.479055 0.000000 -vt 0.184887 0.493505 0.000000 -vt 0.179390 0.476946 0.000000 -vt 0.203351 0.472074 0.000000 -vt 0.210277 0.477187 0.000000 -vt 0.197336 0.491065 0.000000 -vt 0.203837 0.458398 0.000000 -vt 0.220554 0.458999 0.000000 -vt 0.237641 0.425200 0.000000 -vt 0.170829 0.456184 0.000000 -vt 0.180902 0.447969 0.000000 -vt 0.170608 0.468301 0.000000 -vt 0.173278 0.457092 0.000000 -vt 0.172615 0.467684 0.000000 -vt 0.199614 0.469991 0.000000 -vt 0.191472 0.476881 0.000000 -vt 0.194696 0.449079 0.000000 -vt 0.181670 0.449709 0.000000 -vt 0.201214 0.458873 0.000000 -vt 0.266462 0.064539 0.000000 -vt 0.260154 0.041717 0.000000 -vt 0.482915 0.511831 0.000000 -vt 0.482610 0.488350 0.000000 -vt 0.490098 0.511783 0.000000 -vt 0.490752 0.486237 0.000000 -vt 0.480782 0.575114 0.000000 -vt 0.482154 0.545693 0.000000 -vt 0.487471 0.574910 0.000000 -vt 0.489282 0.544717 0.000000 -vt 0.479787 0.604766 0.000000 -vt 0.486236 0.604792 0.000000 -vt 0.479125 0.629922 0.000000 -vt 0.485964 0.629904 0.000000 -vt 0.479061 0.681800 0.000000 -vt 0.479247 0.656026 0.000000 -vt 0.485423 0.681073 0.000000 -vt 0.485814 0.655306 0.000000 -vt 0.479246 0.707916 0.000000 -vt 0.485364 0.707913 0.000000 -vt 0.475201 0.546442 0.000000 -vt 0.472464 0.576105 0.000000 -vt 0.471307 0.605406 0.000000 -vt 0.471458 0.630164 0.000000 -vt 0.471499 0.655773 0.000000 -vt 0.471913 0.681355 0.000000 -vt 0.471690 0.707919 0.000000 -vt 0.449729 0.518008 0.000000 -vt 0.451946 0.553017 0.000000 -vt 0.433817 0.529127 0.000000 -vt 0.431346 0.556872 0.000000 -vt 0.449892 0.579969 0.000000 -vt 0.429941 0.580608 0.000000 -vt 0.449255 0.605463 0.000000 -vt 0.429112 0.604658 0.000000 -vt 0.448974 0.629552 0.000000 -vt 0.428810 0.628782 0.000000 -vt 0.449326 0.656276 0.000000 -vt 0.449454 0.682068 0.000000 -vt 0.429745 0.656150 0.000000 -vt 0.429377 0.682280 0.000000 -vt 0.450119 0.707927 0.000000 -vt 0.431044 0.707932 0.000000 -vt 0.409940 0.531912 0.000000 -vt 0.407190 0.554682 0.000000 -vt 0.406182 0.578987 0.000000 -vt 0.406388 0.602829 0.000000 -vt 0.406787 0.627217 0.000000 -vt 0.408421 0.654939 0.000000 -vt 0.408026 0.682236 0.000000 -vt 0.409702 0.707936 0.000000 -vt 0.355853 0.512436 0.000000 -vt 0.369251 0.524398 0.000000 -vt 0.345538 0.546253 0.000000 -vt 0.363452 0.549839 0.000000 -vt 0.364225 0.576145 0.000000 -vt 0.347854 0.574374 0.000000 -vt 0.365389 0.599963 0.000000 -vt 0.351123 0.599282 0.000000 -vt 0.370565 0.681832 0.000000 -vt 0.370848 0.707939 0.000000 -vt 0.357319 0.681832 0.000000 -vt 0.358099 0.707938 0.000000 -vt 0.330312 0.542903 0.000000 -vt 0.334132 0.573059 0.000000 -vt 0.339320 0.598579 0.000000 -vt 0.342638 0.620129 0.000000 -vt 0.352827 0.621273 0.000000 -vt 0.347483 0.651191 0.000000 -vt 0.357000 0.651802 0.000000 -vt 0.348834 0.682175 0.000000 -vt 0.350115 0.707938 0.000000 -vt 0.305823 0.547449 0.000000 -vt 0.301797 0.519485 0.000000 -vt 0.333524 0.518145 0.000000 -vt 0.338936 0.500273 0.000000 -vt 0.311563 0.575768 0.000000 -vt 0.317777 0.600481 0.000000 -vt 0.341023 0.624266 0.000000 -vt 0.344054 0.651215 0.000000 -vt 0.323803 0.627792 0.000000 -vt 0.327079 0.651190 0.000000 -vt 0.346214 0.677847 0.000000 -vt 0.329012 0.674650 0.000000 -vt 0.330966 0.707939 0.000000 -vt 0.328754 0.678846 0.000000 -vt 0.273878 0.529732 0.000000 -vt 0.278426 0.550496 0.000000 -vt 0.244103 0.546457 0.000000 -vt 0.256721 0.564160 0.000000 -vt 0.288572 0.580695 0.000000 -vt 0.269655 0.589431 0.000000 -vt 0.297132 0.605744 0.000000 -vt 0.279997 0.613270 0.000000 -vt 0.218771 0.558590 0.000000 -vt 0.241448 0.573633 0.000000 -vt 0.255567 0.595358 0.000000 -vt 0.266771 0.618375 0.000000 -vt 0.286115 0.635085 0.000000 -vt 0.274545 0.639546 0.000000 -vt 0.290074 0.656650 0.000000 -vt 0.278043 0.660112 0.000000 -vt 0.293519 0.679034 0.000000 -vt 0.294683 0.707936 0.000000 -vt 0.281495 0.682427 0.000000 -vt 0.282565 0.707934 0.000000 -vt 0.197466 0.568998 0.000000 -vt 0.228265 0.581211 0.000000 -vt 0.246206 0.600962 0.000000 -vt 0.258120 0.621869 0.000000 -vt 0.266270 0.642009 0.000000 -vt 0.271178 0.662999 0.000000 -vt 0.274847 0.684195 0.000000 -vt 0.276242 0.707934 0.000000 -vt 0.338103 0.488842 0.000000 -vt 0.298557 0.509756 0.000000 -vt 0.269754 0.515859 0.000000 -vt 0.238490 0.540172 0.000000 -vt 0.195889 0.563777 0.000000 -vt 0.247009 0.486454 0.000000 -vt 0.479035 0.481969 0.000000 -vt 0.472333 0.492290 0.000000 -vt 0.372675 0.471561 0.000000 -vt 0.363380 0.490034 0.000000 -vt 0.394516 0.488115 0.000000 -vt 0.399217 0.472286 0.000000 -vt 0.350804 0.497150 0.000000 -vt 0.388639 0.681115 0.000000 -vt 0.389596 0.707938 0.000000 -vt 0.386097 0.624788 0.000000 -vt 0.388500 0.653691 0.000000 -vt 0.366524 0.623096 0.000000 -vt 0.370395 0.653619 0.000000 -vt 0.385178 0.577071 0.000000 -vt 0.385549 0.601740 0.000000 -vt 0.385564 0.551720 0.000000 -vt 0.388514 0.529997 0.000000 -vt 0.463785 0.503472 0.000000 -vt 0.460114 0.491472 0.000000 -vt 0.455275 0.500656 0.000000 -vt 0.428881 0.523387 0.000000 -vt 0.442370 0.513141 0.000000 -vt 0.409522 0.526631 0.000000 -vt 0.362968 0.507688 0.000000 -vt 0.372486 0.518590 0.000000 -vt 0.388440 0.524230 0.000000 -vt 0.628464 0.959968 0.000000 -vt 0.667299 0.976136 0.000000 -vt 0.629123 0.991329 0.000000 -vt 0.667774 0.987916 0.000000 -vt 0.689824 0.906209 0.000000 -vt 0.699322 0.915706 0.000000 -vt 0.694924 0.917012 0.000000 -vt 0.705958 0.952044 0.000000 -vt 0.711347 0.953871 0.000000 -vt 0.715867 0.931975 0.000000 -vt 0.730120 0.946134 0.000000 -vt 0.718174 0.956626 0.000000 -vt 0.729013 0.962078 0.000000 -vt 0.748405 0.956986 0.000000 -vt 0.745142 0.969781 0.000000 -vt 0.801180 0.970564 0.000000 -vt 0.779917 0.986372 0.000000 -vt 0.784998 0.971072 0.000000 -vt 0.774850 0.983603 0.000000 -vt 0.819465 0.971518 0.000000 -vt 0.785125 0.989405 0.000000 -vt 0.768474 0.966156 0.000000 -vt 0.764585 0.979136 0.000000 -vt 0.431365 0.486021 0.000000 -vt 0.438406 0.474564 0.000000 -vt 0.669224 0.934353 0.000000 -vt 0.629277 0.922974 0.000000 -vt 0.217657 0.607018 0.000000 -vt 0.240582 0.632635 0.000000 -vt 0.250462 0.649633 0.000000 -vt 0.255702 0.668837 0.000000 -vt 0.258206 0.686452 0.000000 -vt 0.258729 0.707933 0.000000 -vt 0.230238 0.646244 0.000000 -vt 0.208135 0.630735 0.000000 -vt 0.196996 0.683217 0.000000 -vt 0.221139 0.685315 0.000000 -vt 0.196883 0.707932 0.000000 -vt 0.221353 0.707932 0.000000 -vt 0.240550 0.686341 0.000000 -vt 0.240923 0.707933 0.000000 -vt 0.238938 0.663913 0.000000 -vt 0.222156 0.666598 0.000000 -vt 0.200453 0.657886 0.000000 -vt 0.144918 0.596816 0.000000 -vt 0.145204 0.620342 0.000000 -vt 0.107470 0.605446 0.000000 -vt 0.111566 0.626940 0.000000 -vt 0.142863 0.681242 0.000000 -vt 0.141661 0.707934 0.000000 -vt 0.113415 0.682656 0.000000 -vt 0.112473 0.707936 0.000000 -vt 0.143943 0.650990 0.000000 -vt 0.113487 0.655378 0.000000 -vt 0.058396 0.637178 0.000000 -vt 0.078958 0.618625 0.000000 -vt 0.070774 0.646156 0.000000 -vt 0.086594 0.636979 0.000000 -vt 0.067998 0.662096 0.000000 -vt 0.048782 0.658921 0.000000 -vt 0.042104 0.707939 0.000000 -vt 0.043633 0.684310 0.000000 -vt 0.063861 0.707938 0.000000 -vt 0.065358 0.684252 0.000000 -vt 0.088722 0.684106 0.000000 -vt 0.087552 0.707936 0.000000 -vt 0.088869 0.660187 0.000000 -vt 0.292279 0.470181 0.000000 -vt 0.264842 0.446841 0.000000 -vt 0.332321 0.472762 0.000000 -vt 0.092806 0.584468 0.000000 -vt 0.304041 0.427535 0.000000 -vt 0.099272 0.591632 0.000000 -vt 0.143620 0.579027 0.000000 -vt 0.042357 0.624292 0.000000 -vt 0.064943 0.603139 0.000000 -vt 0.048778 0.628470 0.000000 -vt 0.070534 0.608373 0.000000 -vt 0.025638 0.650617 0.000000 -vt 0.033877 0.654026 0.000000 -vt 0.023639 0.707940 0.000000 -vt 0.012744 0.707941 0.000000 -vt 0.026187 0.681527 0.000000 -vt 0.015898 0.680189 0.000000 -vt 0.171531 0.680159 0.000000 -vt 0.170526 0.707933 0.000000 -vt 0.173540 0.649678 0.000000 -vt 0.177517 0.618979 0.000000 -vt 0.184034 0.593011 0.000000 -vt 0.452802 0.448268 0.000000 -vt 0.488856 0.450285 0.000000 -vt 0.629874 0.895273 0.000000 -vt 0.639039 0.902919 0.000000 -vt 0.670272 0.922120 0.000000 -vt 0.311425 0.707939 0.000000 -vt 0.310176 0.674868 0.000000 -vt 0.309822 0.651748 0.000000 -vt 0.312773 0.671381 0.000000 -vt 0.307535 0.632952 0.000000 -vt 0.535128 0.477085 0.000000 -vt 0.526310 0.459993 0.000000 -vt 0.541837 0.457686 0.000000 -vt 0.534518 0.481019 0.000000 -vt 0.530576 0.512506 0.000000 -vt 0.527092 0.545951 0.000000 -vt 0.522544 0.577332 0.000000 -vt 0.518386 0.604826 0.000000 -vt 0.514778 0.628781 0.000000 -vt 0.509785 0.681252 0.000000 -vt 0.511940 0.654815 0.000000 -vt 0.508560 0.707899 0.000000 -vt 0.420344 0.441968 0.000000 -vt 0.304061 0.629959 0.000000 -vt 0.322646 0.623275 0.000000 -vt 0.306474 0.651689 0.000000 -vt 0.523938 0.446384 0.000000 -vt 0.329696 0.435529 0.000000 -vt 0.403783 0.431796 0.000000 -vt 0.370055 0.433250 0.000000 -vt 0.358127 0.426878 0.000000 -vt 0.535228 0.447553 0.000000 -vt 0.547018 0.454368 0.000000 -vt 0.542978 0.481702 0.000000 -vt 0.454873 0.443496 0.000000 -vt 0.490968 0.444779 0.000000 -vt 0.526394 0.440261 0.000000 -vt 0.424038 0.437860 0.000000 -vt 0.538592 0.442415 0.000000 -vt 0.408324 0.428918 0.000000 -vt 0.371607 0.427446 0.000000 -vt 0.362862 0.418824 0.000000 -vt 0.540562 0.451998 0.000000 -vt 0.544607 0.447268 0.000000 -vt 0.525965 0.604851 0.000000 -vt 0.530366 0.577302 0.000000 -vt 0.522416 0.629304 0.000000 -vt 0.516381 0.707897 0.000000 -vt 0.517485 0.681565 0.000000 -vt 0.534783 0.546455 0.000000 -vt 0.538415 0.512651 0.000000 -vt 0.519613 0.655015 0.000000 -vt 0.059134 0.595488 0.000000 -vt 0.088193 0.580851 0.000000 -vt 0.031040 0.618387 0.000000 -vt 0.011698 0.646450 0.000000 -vt 0.003887 0.677496 0.000000 -vt 0.000875 0.707941 0.000000 -vt 0.331248 0.430808 0.000000 -vt 0.307204 0.423902 0.000000 -vt 0.638791 0.591661 0.000000 -vt 0.635998 0.579790 0.000000 -vt 0.647217 0.593248 0.000000 -vt 0.732192 0.550887 0.000000 -vt 0.713599 0.519664 0.000000 -vt 0.753006 0.537760 0.000000 -vt 0.732612 0.507331 0.000000 -vt 0.769900 0.525029 0.000000 -vt 0.748313 0.496575 0.000000 -vt 0.782214 0.468103 0.000000 -vt 0.801054 0.453833 0.000000 -vt 0.805407 0.496905 0.000000 -vt 0.823062 0.482264 0.000000 -vt 0.689798 0.533164 0.000000 -vt 0.706693 0.564704 0.000000 -vt 0.675778 0.579067 0.000000 -vt 0.645461 0.554901 0.000000 -vt 0.604630 0.548419 0.000000 -vt 0.787477 0.511308 0.000000 -vt 0.764812 0.482881 0.000000 -vt 0.632039 0.536327 0.000000 -vt 0.314384 0.032524 0.000000 -vt 0.322689 0.003520 0.000000 -vt 0.320572 0.037033 0.000000 -vt 0.687420 0.955784 0.000000 -vt 0.687407 0.937818 0.000000 -vt 0.683227 0.977054 0.000000 -vt 0.682377 0.926682 0.000000 -vt 0.675969 0.922939 0.000000 -vt 0.677930 0.987012 0.000000 -vt 0.673249 0.990463 0.000000 -vt 0.355777 0.422588 0.000000 -vt 0.613567 0.598127 0.000000 -vt 0.620434 0.606398 0.000000 -vt 0.613050 0.605615 0.000000 -vt 0.607914 0.599196 0.000000 -vt 0.605944 0.586046 0.000000 -vt 0.610373 0.585928 0.000000 -vt 0.685816 0.524372 0.000000 -vt 0.677273 0.508610 0.000000 -vt 0.707485 0.510754 0.000000 -vt 0.698145 0.495105 0.000000 -vt 0.647636 0.545059 0.000000 -vt 0.637729 0.530161 0.000000 -vt 0.776732 0.460553 0.000000 -vt 0.766336 0.445814 0.000000 -vt 0.794961 0.445940 0.000000 -vt 0.784125 0.431889 0.000000 -vt 0.758684 0.474273 0.000000 -vt 0.748709 0.459214 0.000000 -vt 0.741759 0.486821 0.000000 -vt 0.731964 0.471566 0.000000 -vt 0.725281 0.498946 0.000000 -vt 0.715662 0.483898 0.000000 -vt 0.612713 0.587337 0.000000 -vt 0.634987 0.581679 0.000000 -vt 0.614560 0.596182 0.000000 -vt 0.636567 0.590340 0.000000 -vt 0.482979 0.904091 0.000000 -vt 0.490218 0.904105 0.000000 -vt 0.483048 0.927651 0.000000 -vt 0.491184 0.929739 0.000000 -vt 0.480834 0.840726 0.000000 -vt 0.487525 0.840907 0.000000 -vt 0.482359 0.870104 0.000000 -vt 0.489452 0.871097 0.000000 -vt 0.479797 0.811091 0.000000 -vt 0.486243 0.811041 0.000000 -vt 0.479128 0.785926 0.000000 -vt 0.485962 0.785928 0.000000 -vt 0.479061 0.734032 0.000000 -vt 0.485420 0.734754 0.000000 -vt 0.479246 0.759813 0.000000 -vt 0.485808 0.760522 0.000000 -vt 0.475459 0.869323 0.000000 -vt 0.472488 0.839795 0.000000 -vt 0.471323 0.810475 0.000000 -vt 0.471468 0.785698 0.000000 -vt 0.471503 0.760076 0.000000 -vt 0.471915 0.734485 0.000000 -vt 0.450241 0.896940 0.000000 -vt 0.433732 0.887437 0.000000 -vt 0.451860 0.862932 0.000000 -vt 0.431406 0.859250 0.000000 -vt 0.449931 0.835984 0.000000 -vt 0.430020 0.835382 0.000000 -vt 0.449296 0.810452 0.000000 -vt 0.429179 0.811265 0.000000 -vt 0.449004 0.786334 0.000000 -vt 0.428857 0.787113 0.000000 -vt 0.449344 0.759591 0.000000 -vt 0.429773 0.759726 0.000000 -vt 0.449463 0.733790 0.000000 -vt 0.429390 0.733589 0.000000 -vt 0.409989 0.884294 0.000000 -vt 0.407303 0.861344 0.000000 -vt 0.406296 0.836942 0.000000 -vt 0.406471 0.813072 0.000000 -vt 0.406843 0.788671 0.000000 -vt 0.408453 0.760939 0.000000 -vt 0.408040 0.733637 0.000000 -vt 0.356047 0.903846 0.000000 -vt 0.345608 0.869667 0.000000 -vt 0.369294 0.891113 0.000000 -vt 0.363532 0.865925 0.000000 -vt 0.364308 0.839701 0.000000 -vt 0.347915 0.841498 0.000000 -vt 0.365456 0.815908 0.000000 -vt 0.351184 0.816589 0.000000 -vt 0.370582 0.734044 0.000000 -vt 0.357336 0.734043 0.000000 -vt 0.330378 0.872980 0.000000 -vt 0.334202 0.842813 0.000000 -vt 0.339380 0.817291 0.000000 -vt 0.342688 0.795743 0.000000 -vt 0.347515 0.764686 0.000000 -vt 0.352878 0.794602 0.000000 -vt 0.357034 0.764075 0.000000 -vt 0.348849 0.733698 0.000000 -vt 0.305894 0.868388 0.000000 -vt 0.301866 0.896315 0.000000 -vt 0.333608 0.897683 0.000000 -vt 0.338957 0.915462 0.000000 -vt 0.311628 0.840090 0.000000 -vt 0.317832 0.815386 0.000000 -vt 0.341070 0.791606 0.000000 -vt 0.323845 0.788081 0.000000 -vt 0.344085 0.764660 0.000000 -vt 0.327110 0.764684 0.000000 -vt 0.346233 0.738030 0.000000 -vt 0.329032 0.741226 0.000000 -vt 0.328770 0.737029 0.000000 -vt 0.273951 0.886069 0.000000 -vt 0.244158 0.869371 0.000000 -vt 0.278490 0.865333 0.000000 -vt 0.256773 0.851677 0.000000 -vt 0.288628 0.835155 0.000000 -vt 0.269702 0.826422 0.000000 -vt 0.297178 0.810117 0.000000 -vt 0.280037 0.802591 0.000000 -vt 0.218817 0.857254 0.000000 -vt 0.241493 0.842209 0.000000 -vt 0.255608 0.820492 0.000000 -vt 0.266806 0.797485 0.000000 -vt 0.286149 0.780780 0.000000 -vt 0.274574 0.776318 0.000000 -vt 0.290099 0.759218 0.000000 -vt 0.278064 0.755754 0.000000 -vt 0.293533 0.736838 0.000000 -vt 0.281506 0.733442 0.000000 -vt 0.197505 0.846856 0.000000 -vt 0.228305 0.834638 0.000000 -vt 0.246243 0.814892 0.000000 -vt 0.258152 0.793989 0.000000 -vt 0.266299 0.773853 0.000000 -vt 0.271197 0.752868 0.000000 -vt 0.274856 0.731672 0.000000 -vt 0.338179 0.926897 0.000000 -vt 0.298631 0.906029 0.000000 -vt 0.269832 0.899920 0.000000 -vt 0.238549 0.875659 0.000000 -vt 0.213107 0.861337 0.000000 -vt 0.195928 0.852076 0.000000 -vt 0.479524 0.934132 0.000000 -vt 0.472806 0.923619 0.000000 -vt 0.363459 0.925055 0.000000 -vt 0.372848 0.944020 0.000000 -vt 0.395333 0.928534 0.000000 -vt 0.399667 0.943829 0.000000 -vt 0.350715 0.918398 0.000000 -vt 0.388656 0.734760 0.000000 -vt 0.386154 0.791092 0.000000 -vt 0.366577 0.792780 0.000000 -vt 0.388534 0.762185 0.000000 -vt 0.370429 0.762259 0.000000 -vt 0.385285 0.838803 0.000000 -vt 0.385629 0.814141 0.000000 -vt 0.385712 0.864134 0.000000 -vt 0.388567 0.885956 0.000000 -vt 0.460877 0.924580 0.000000 -vt 0.463628 0.912609 0.000000 -vt 0.454945 0.915570 0.000000 -vt 0.428549 0.893362 0.000000 -vt 0.443156 0.901478 0.000000 -vt 0.409510 0.889669 0.000000 -vt 0.372649 0.896619 0.000000 -vt 0.362845 0.909258 0.000000 -vt 0.388398 0.891757 0.000000 -vt 0.622782 0.959823 0.000000 -vt 0.621661 0.991109 0.000000 -vt 0.583762 0.975340 0.000000 -vt 0.583107 0.987103 0.000000 -vt 0.577558 0.773552 0.000000 -vt 0.583408 0.783969 0.000000 -vt 0.579796 0.786797 0.000000 -vt 0.605568 0.813259 0.000000 -vt 0.603935 0.818711 0.000000 -vt 0.583470 0.809708 0.000000 -vt 0.602225 0.825871 0.000000 -vt 0.586752 0.829528 0.000000 -vt 0.600388 0.837865 0.000000 -vt 0.585002 0.850719 0.000000 -vt 0.597321 0.855473 0.000000 -vt 0.565490 0.901600 0.000000 -vt 0.575280 0.888706 0.000000 -vt 0.590694 0.893430 0.000000 -vt 0.591373 0.887695 0.000000 -vt 0.555673 0.917056 0.000000 -vt 0.590149 0.899431 0.000000 -vt 0.580848 0.872389 0.000000 -vt 0.593680 0.876741 0.000000 -vt 0.432247 0.929890 0.000000 -vt 0.438774 0.941718 0.000000 -vt 0.582559 0.933566 0.000000 -vt 0.622669 0.922876 0.000000 -vt 0.217687 0.808839 0.000000 -vt 0.240608 0.783224 0.000000 -vt 0.250486 0.766229 0.000000 -vt 0.255718 0.747028 0.000000 -vt 0.258214 0.729413 0.000000 -vt 0.230258 0.769617 0.000000 -vt 0.208158 0.785125 0.000000 -vt 0.197004 0.732646 0.000000 -vt 0.221147 0.730549 0.000000 -vt 0.240559 0.729524 0.000000 -vt 0.238953 0.751950 0.000000 -vt 0.222170 0.749266 0.000000 -vt 0.200468 0.757976 0.000000 -vt 0.144941 0.819049 0.000000 -vt 0.107489 0.810422 0.000000 -vt 0.145222 0.795523 0.000000 -vt 0.111581 0.788931 0.000000 -vt 0.142868 0.734627 0.000000 -vt 0.113420 0.733214 0.000000 -vt 0.143955 0.764878 0.000000 -vt 0.113497 0.760493 0.000000 -vt 0.058408 0.778697 0.000000 -vt 0.070784 0.769718 0.000000 -vt 0.078973 0.797249 0.000000 -vt 0.086606 0.778894 0.000000 -vt 0.068006 0.753779 0.000000 -vt 0.048789 0.756957 0.000000 -vt 0.043636 0.731568 0.000000 -vt 0.065360 0.731624 0.000000 -vt 0.088725 0.731768 0.000000 -vt 0.088877 0.755686 0.000000 -vt 0.292377 0.945568 0.000000 -vt 0.141063 0.845974 0.000000 -vt 0.332451 0.942991 0.000000 -vt 0.281041 0.994248 0.000000 -vt 0.304121 0.988208 0.000000 -vt 0.099293 0.824241 0.000000 -vt 0.143647 0.836839 0.000000 -vt 0.042371 0.791587 0.000000 -vt 0.048791 0.787407 0.000000 -vt 0.064959 0.812736 0.000000 -vt 0.070549 0.807502 0.000000 -vt 0.025645 0.765263 0.000000 -vt 0.033884 0.761852 0.000000 -vt 0.026190 0.734350 0.000000 -vt 0.015901 0.735691 0.000000 -vt 0.171538 0.735706 0.000000 -vt 0.173554 0.766186 0.000000 -vt 0.177539 0.796883 0.000000 -vt 0.184062 0.822848 0.000000 -vt 0.453000 0.968186 0.000000 -vt 0.489318 0.965798 0.000000 -vt 0.622679 0.895236 0.000000 -vt 0.613360 0.902669 0.000000 -vt 0.581776 0.921307 0.000000 -vt 0.310194 0.741006 0.000000 -vt 0.309850 0.764125 0.000000 -vt 0.312792 0.744492 0.000000 -vt 0.307570 0.782919 0.000000 -vt 0.535620 0.938607 0.000000 -vt 0.542396 0.958048 0.000000 -vt 0.526858 0.955811 0.000000 -vt 0.534989 0.934668 0.000000 -vt 0.530795 0.903122 0.000000 -vt 0.527204 0.869708 0.000000 -vt 0.522577 0.838354 0.000000 -vt 0.518380 0.810903 0.000000 -vt 0.514760 0.786983 0.000000 -vt 0.509775 0.734545 0.000000 -vt 0.511920 0.760969 0.000000 -vt 0.420258 0.974202 0.000000 -vt 0.304097 0.785910 0.000000 -vt 0.322690 0.792596 0.000000 -vt 0.306501 0.764184 0.000000 -vt 0.524518 0.969438 0.000000 -vt 0.329809 0.980211 0.000000 -vt 0.403448 0.984133 0.000000 -vt 0.370196 0.982445 0.000000 -vt 0.358274 0.988822 0.000000 -vt 0.535809 0.968218 0.000000 -vt 0.547588 0.961358 0.000000 -vt 0.543442 0.933924 0.000000 -vt 0.455021 0.972949 0.000000 -vt 0.491473 0.971280 0.000000 -vt 0.527001 0.975548 0.000000 -vt 0.423815 0.978395 0.000000 -vt 0.539185 0.973348 0.000000 -vt 0.407937 0.987081 0.000000 -vt 0.371751 0.988250 0.000000 -vt 0.363012 0.996874 0.000000 -vt 0.541136 0.963749 0.000000 -vt 0.545189 0.968476 0.000000 -vt 0.525957 0.810847 0.000000 -vt 0.530400 0.838340 0.000000 -vt 0.522397 0.786438 0.000000 -vt 0.517475 0.734226 0.000000 -vt 0.534891 0.869143 0.000000 -vt 0.538637 0.902913 0.000000 -vt 0.519593 0.760758 0.000000 -vt 0.059151 0.820387 0.000000 -vt 0.285929 0.997088 0.000000 -vt 0.031054 0.797491 0.000000 -vt 0.011706 0.769430 0.000000 -vt 0.003892 0.738386 0.000000 -vt 0.331361 0.984930 0.000000 -vt 0.307284 0.991844 0.000000 -vt 0.975584 0.331461 0.000000 -vt 0.975408 0.339843 0.000000 -vt 0.964582 0.325672 0.000000 -vt 0.912218 0.411579 0.000000 -vt 0.894182 0.428346 0.000000 -vt 0.886820 0.385800 0.000000 -vt 0.870121 0.401079 0.000000 -vt 0.877752 0.441538 0.000000 -vt 0.855707 0.413556 0.000000 -vt 0.819617 0.439191 0.000000 -vt 0.841673 0.468871 0.000000 -vt 0.905877 0.366154 0.000000 -vt 0.932155 0.390441 0.000000 -vt 0.938018 0.328903 0.000000 -vt 0.953846 0.364152 0.000000 -vt 0.942180 0.287576 0.000000 -vt 0.860132 0.455141 0.000000 -vt 0.838290 0.426225 0.000000 -vt 0.923533 0.311040 0.000000 -vt 0.491340 0.032524 0.000000 -vt 0.485152 0.037033 0.000000 -vt 0.483035 0.003520 0.000000 -vt 0.564012 0.954671 0.000000 -vt 0.564331 0.936719 0.000000 -vt 0.567839 0.975996 0.000000 -vt 0.569546 0.925676 0.000000 -vt 0.576014 0.922046 0.000000 -vt 0.572963 0.986037 0.000000 -vt 0.577582 0.989565 0.000000 -vt 0.355931 0.993115 0.000000 -vt 0.987986 0.308815 0.000000 -vt 0.994242 0.317548 0.000000 -vt 0.995364 0.310228 0.000000 -vt 0.990473 0.303625 0.000000 -vt 0.978243 0.298377 0.000000 -vt 0.977004 0.302628 0.000000 -vt 0.898377 0.360078 0.000000 -vt 0.879759 0.377646 0.000000 -vt 0.885292 0.347826 0.000000 -vt 0.866962 0.364616 0.000000 -vt 0.928026 0.328347 0.000000 -vt 0.916125 0.314987 0.000000 -vt 0.813696 0.431980 0.000000 -vt 0.802080 0.418185 0.000000 -vt 0.831519 0.417972 0.000000 -vt 0.819486 0.404505 0.000000 -vt 0.847924 0.404753 0.000000 -vt 0.835655 0.391410 0.000000 -vt 0.863816 0.391858 0.000000 -vt 0.851701 0.378742 0.000000 -vt 0.977780 0.305227 0.000000 -vt 0.966673 0.325247 0.000000 -vt 0.985895 0.309216 0.000000 -vt 0.974838 0.328959 0.000000 -vt 0.320638 0.081060 0.000000 -vt 0.402862 0.164002 0.000000 -vt 0.324664 0.105278 0.000000 -vt 0.485086 0.081060 0.000000 -vt 0.481060 0.105278 0.000000 -vt 0.425209 0.161125 0.000000 -vt 0.380515 0.161125 0.000000 -vt 0.332120 0.124242 0.000000 -vt 0.360450 0.152261 0.000000 -vt 0.344295 0.139914 0.000000 -vt 0.473604 0.124242 0.000000 -vt 0.445274 0.152261 0.000000 -vt 0.461430 0.139914 0.000000 -vt 0.579428 0.708922 0.000000 -vt 0.579428 0.699501 0.000000 -vt 0.588756 0.708776 0.000000 -vt 0.588756 0.699427 0.000000 -vt 0.579428 0.690089 0.000000 -vt 0.579428 0.680677 0.000000 -vt 0.588756 0.690088 0.000000 -vt 0.588756 0.680748 0.000000 -vt 0.579428 0.671256 0.000000 -vt 0.579428 0.661863 0.000000 -vt 0.588756 0.671399 0.000000 -vt 0.588756 0.662087 0.000000 -vt 0.579428 0.652439 0.000000 -vt 0.579428 0.643087 0.000000 -vt 0.588756 0.652757 0.000000 -vt 0.588756 0.643523 0.000000 -vt 0.579428 0.633661 0.000000 -vt 0.579428 0.624235 0.000000 -vt 0.588756 0.634319 0.000000 -vt 0.588756 0.625362 0.000000 -vt 0.579428 0.765732 0.000000 -vt 0.579428 0.755934 0.000000 -vt 0.588756 0.763691 0.000000 -vt 0.588756 0.754804 0.000000 -vt 0.579428 0.746508 0.000000 -vt 0.579428 0.737083 0.000000 -vt 0.588756 0.745848 0.000000 -vt 0.588756 0.736645 0.000000 -vt 0.579428 0.727732 0.000000 -vt 0.579428 0.718309 0.000000 -vt 0.588756 0.727414 0.000000 -vt 0.588756 0.718086 0.000000 -vt 0.543043 0.690089 0.000000 -vt 0.543043 0.700034 0.000000 -vt 0.543043 0.670205 0.000000 -vt 0.543043 0.680144 0.000000 -vt 0.543043 0.650359 0.000000 -vt 0.543043 0.660272 0.000000 -vt 0.543043 0.630600 0.000000 -vt 0.543043 0.640468 0.000000 -vt 0.579428 0.614437 0.000000 -vt 0.543043 0.610746 0.000000 -vt 0.543043 0.620698 0.000000 -vt 0.543043 0.749586 0.000000 -vt 0.543043 0.759488 0.000000 -vt 0.543043 0.729825 0.000000 -vt 0.543043 0.739718 0.000000 -vt 0.543043 0.709979 0.000000 -vt 0.543043 0.719912 0.000000 -vt 0.588756 0.616475 0.000000 -vt 0.545255 0.581832 0.000000 -vt 0.548621 0.581473 0.000000 -vt 0.547886 0.590030 0.000000 -vt 0.550841 0.588419 0.000000 -vt 0.553348 0.596685 0.000000 -vt 0.555469 0.594058 0.000000 -vt 0.550035 0.565607 0.000000 -vt 0.552663 0.567728 0.000000 -vt 0.546099 0.573264 0.000000 -vt 0.549324 0.574215 0.000000 -vt 0.564888 0.557513 0.000000 -vt 0.565247 0.560874 0.000000 -vt 0.556690 0.560144 0.000000 -vt 0.558301 0.563100 0.000000 -vt 0.581113 0.562293 0.000000 -vt 0.578989 0.564924 0.000000 -vt 0.573456 0.558357 0.000000 -vt 0.572504 0.561588 0.000000 -vt 0.589206 0.577146 0.000000 -vt 0.585842 0.577505 0.000000 -vt 0.586575 0.568948 0.000000 -vt 0.583620 0.570558 0.000000 -vt 0.584427 0.593372 0.000000 -vt 0.581795 0.591247 0.000000 -vt 0.588363 0.585714 0.000000 -vt 0.585138 0.584765 0.000000 -vt 0.569574 0.601465 0.000000 -vt 0.569215 0.598104 0.000000 -vt 0.577771 0.598834 0.000000 -vt 0.576160 0.595877 0.000000 -vt 0.561005 0.600621 0.000000 -vt 0.561958 0.597389 0.000000 -vt 0.583108 0.543469 0.000000 -vt 0.568362 0.528654 0.000000 -vt 0.589256 0.528684 0.000000 -vt 0.583149 0.513881 0.000000 -vt 0.568364 0.507733 0.000000 -vt 0.553562 0.513840 0.000000 -vt 0.547413 0.528625 0.000000 -vt 0.553521 0.543428 0.000000 -vt 0.568305 0.549576 0.000000 -vt 0.543043 0.769441 0.000000 -vt 0.189202 0.922547 0.000000 -vt 0.194374 0.916535 0.000000 -vt 0.198773 0.926174 0.000000 -vt 0.203134 0.920371 0.000000 -vt 0.177801 0.919806 0.000000 -vt 0.183202 0.912819 0.000000 -vt 0.167758 0.914178 0.000000 -vt 0.172618 0.907346 0.000000 -vt 0.220115 0.948440 0.000000 -vt 0.212790 0.940629 0.000000 -vt 0.223630 0.941400 0.000000 -vt 0.216271 0.933559 0.000000 -vt 0.206585 0.932412 0.000000 -vt 0.210079 0.926013 0.000000 -vt 0.208160 0.912489 0.000000 -vt 0.216391 0.919213 0.000000 -vt 0.223502 0.926914 0.000000 -vt 0.230788 0.934720 0.000000 -vt 0.187652 0.902823 0.000000 -vt 0.177162 0.897793 0.000000 -vt 0.198434 0.907279 0.000000 -vt 0.196169 0.890532 0.000000 -vt 0.201570 0.884097 0.000000 -vt 0.205839 0.894268 0.000000 -vt 0.210469 0.888108 0.000000 -vt 0.184517 0.887654 0.000000 -vt 0.190284 0.880163 0.000000 -vt 0.174180 0.881720 0.000000 -vt 0.179530 0.874410 0.000000 -vt 0.227288 0.916745 0.000000 -vt 0.220082 0.908995 0.000000 -vt 0.231089 0.909587 0.000000 -vt 0.223876 0.901635 0.000000 -vt 0.213754 0.900690 0.000000 -vt 0.217559 0.893929 0.000000 -vt 0.215435 0.880468 0.000000 -vt 0.223799 0.887344 0.000000 -vt 0.230998 0.895336 0.000000 -vt 0.238143 0.903446 0.000000 -vt 0.194712 0.870528 0.000000 -vt 0.184148 0.865255 0.000000 -vt 0.205595 0.875126 0.000000 -vt 0.920507 0.064713 0.000000 -vt 0.924814 0.065630 0.000000 -vt 0.920507 0.092523 0.000000 -vt 0.929448 0.091956 0.000000 -vt 0.902188 0.077993 0.000000 -vt 0.843705 0.077993 0.000000 -vt 0.902188 0.050487 0.000000 -vt 0.840060 0.050487 0.000000 -vt 0.840060 0.077993 0.000000 -vt 0.815555 0.066728 0.000000 -vt 0.819312 0.048894 0.000000 -vt 0.820626 0.065231 0.000000 -vt 0.892909 0.133819 0.000000 -vt 0.892909 0.115039 0.000000 -vt 0.894521 0.133819 0.000000 -vt 0.894521 0.113899 0.000000 -vt 0.940268 0.125989 0.000000 -vt 0.917817 0.126119 0.000000 -vt 0.843705 0.113899 0.000000 -vt 0.840060 0.115039 0.000000 -vt 0.801232 0.128311 0.000000 -vt 0.810083 0.092706 0.000000 -vt 0.820619 0.128448 0.000000 -vt 0.820626 0.093144 0.000000 -vt 0.902188 0.111827 0.000000 -vt 0.902188 0.133819 0.000000 -vt 0.840060 0.133819 0.000000 -vt 0.917435 0.092679 0.000000 -vt 0.845226 0.080753 0.000000 -vt 0.845226 0.111827 0.000000 -vt 0.902188 0.080753 0.000000 -vt 0.902188 0.037776 0.000000 -vt 0.840060 0.037776 0.000000 -vt 0.902188 0.030619 0.000000 -vt 0.840060 0.030619 0.000000 -vt 0.840060 0.016054 0.000000 -vt 0.902188 0.016054 0.000000 -vt 0.832705 0.061296 0.000000 -vt 0.832755 0.054199 0.000000 -vt 0.921776 0.048371 0.000000 -vt 0.908309 0.053735 0.000000 -vt 0.908390 0.060832 0.000000 -vt 0.050479 0.007302 0.000000 -vt 0.056861 0.007404 0.000000 -vt 0.051463 0.009775 0.000000 -vt 0.056861 0.011657 0.000000 -vt 0.063099 0.054914 0.000000 -vt 0.056796 0.054954 0.000000 -vt 0.062091 0.052515 0.000000 -vt 0.056796 0.050719 0.000000 -vt 0.050490 0.054889 0.000000 -vt 0.051483 0.052490 0.000000 -vt 0.062530 0.012897 0.000000 -vt 0.065128 0.012911 0.000000 -vt 0.062353 0.049784 0.000000 -vt 0.064960 0.049800 0.000000 -vt 0.056891 0.012788 0.000000 -vt 0.056762 0.049768 0.000000 -vt 0.051292 0.012770 0.000000 -vt 0.051139 0.049748 0.000000 -vt 0.048532 0.049735 0.000000 -vt 0.048676 0.012757 0.000000 -vt 0.063137 0.007377 0.000000 -vt 0.062178 0.009772 0.000000 -vt 0.071380 0.007571 0.000000 -vt 0.070080 0.005252 0.000000 -vt 0.079089 0.011386 0.000000 -vt 0.083258 0.005035 0.000000 -vt 0.083397 0.057409 0.000000 -vt 0.087655 0.050841 0.000000 -vt 0.096993 0.057219 0.000000 -vt 0.095643 0.054807 0.000000 -vt 0.079096 0.050862 0.000000 -vt 0.087535 0.011384 0.000000 -vt 0.069787 0.057294 0.000000 -vt 0.071112 0.054867 0.000000 -vt 0.096483 0.012337 0.000000 -vt 0.099245 0.012331 0.000000 -vt 0.096598 0.049580 0.000000 -vt 0.099367 0.049574 0.000000 -vt 0.087535 0.012376 0.000000 -vt 0.087655 0.049619 0.000000 -vt 0.079089 0.012378 0.000000 -vt 0.079096 0.049640 0.000000 -vt 0.070143 0.012381 0.000000 -vt 0.070140 0.049650 0.000000 -vt 0.067368 0.049646 0.000000 -vt 0.067368 0.012376 0.000000 -vt 0.096678 0.005012 0.000000 -vt 0.095382 0.007402 0.000000 -vt 0.016910 0.005225 0.000000 -vt 0.030451 0.005126 0.000000 -vt 0.018613 0.007584 0.000000 -vt 0.026276 0.011479 0.000000 -vt 0.044278 0.057230 0.000000 -vt 0.030536 0.057394 0.000000 -vt 0.042545 0.054843 0.000000 -vt 0.034767 0.050919 0.000000 -vt 0.026273 0.050930 0.000000 -vt 0.034741 0.011450 0.000000 -vt 0.016782 0.057284 0.000000 -vt 0.018489 0.054884 0.000000 -vt 0.043577 0.012457 0.000000 -vt 0.046551 0.012462 0.000000 -vt 0.043573 0.049701 0.000000 -vt 0.046554 0.049705 0.000000 -vt 0.034741 0.012443 0.000000 -vt 0.034767 0.049697 0.000000 -vt 0.026276 0.012471 0.000000 -vt 0.026273 0.049708 0.000000 -vt 0.017461 0.012505 0.000000 -vt 0.017453 0.049714 0.000000 -vt 0.014475 0.049710 0.000000 -vt 0.014475 0.012501 0.000000 -vt 0.044106 0.005028 0.000000 -vt 0.042434 0.007422 0.000000 -vt 0.032434 0.074006 0.000000 -vt 0.030188 0.077648 0.000000 -vt 0.011149 0.075985 0.000000 -vt 0.012992 0.077648 0.000000 -vt 0.030188 0.079941 0.000000 -vt 0.034467 0.079941 0.000000 -vt 0.030188 0.082340 0.000000 -vt 0.034467 0.082340 0.000000 -vt 0.012992 0.079941 0.000000 -vt 0.012992 0.082340 0.000000 -vt 0.010510 0.079941 0.000000 -vt 0.010510 0.082340 0.000000 -vt 0.003332 0.079941 0.000000 -vt 0.003332 0.082341 0.000000 -vt 0.032434 0.087859 0.000000 -vt 0.011149 0.085879 0.000000 -vt 0.030188 0.084216 0.000000 -vt 0.012992 0.084216 0.000000 -vt 0.039666 0.079941 0.000000 -vt 0.039666 0.082340 0.000000 -vt 0.075539 0.074187 0.000000 -vt 0.073240 0.077648 0.000000 -vt 0.054285 0.075983 0.000000 -vt 0.056129 0.077648 0.000000 -vt 0.073240 0.079941 0.000000 -vt 0.077395 0.079941 0.000000 -vt 0.073240 0.082340 0.000000 -vt 0.077395 0.082340 0.000000 -vt 0.056129 0.079941 0.000000 -vt 0.056129 0.082340 0.000000 -vt 0.053645 0.079941 0.000000 -vt 0.053645 0.082340 0.000000 -vt 0.046466 0.079941 0.000000 -vt 0.046466 0.082340 0.000000 -vt 0.075539 0.093059 0.000000 -vt 0.054285 0.093059 0.000000 -vt 0.075539 0.087678 0.000000 -vt 0.054285 0.085881 0.000000 -vt 0.082777 0.079941 0.000000 -vt 0.082777 0.082340 0.000000 -vt 0.040086 0.111572 0.000000 -vt 0.037836 0.114696 0.000000 -vt 0.017421 0.111572 0.000000 -vt 0.019303 0.114696 0.000000 -vt 0.037836 0.116989 0.000000 -vt 0.041686 0.116989 0.000000 -vt 0.037836 0.119389 0.000000 -vt 0.041686 0.119389 0.000000 -vt 0.019303 0.116989 0.000000 -vt 0.019303 0.119389 0.000000 -vt 0.015656 0.116989 0.000000 -vt 0.015656 0.119389 0.000000 -vt 0.008477 0.116990 0.000000 -vt 0.008478 0.119389 0.000000 -vt 0.040086 0.131567 0.000000 -vt 0.017421 0.131568 0.000000 -vt 0.040086 0.124389 0.000000 -vt 0.017421 0.124389 0.000000 -vt 0.048865 0.116989 0.000000 -vt 0.048865 0.119389 0.000000 -vt 0.039949 0.179600 0.000000 -vt 0.037786 0.182725 0.000000 -vt 0.018964 0.179600 0.000000 -vt 0.020809 0.182725 0.000000 -vt 0.037786 0.185018 0.000000 -vt 0.041586 0.185018 0.000000 -vt 0.037786 0.187417 0.000000 -vt 0.041586 0.187417 0.000000 -vt 0.020809 0.185018 0.000000 -vt 0.020809 0.187417 0.000000 -vt 0.017180 0.185018 0.000000 -vt 0.017180 0.187417 0.000000 -vt 0.010002 0.185018 0.000000 -vt 0.010002 0.187417 0.000000 -vt 0.039949 0.199596 0.000000 -vt 0.018964 0.199596 0.000000 -vt 0.039949 0.192418 0.000000 -vt 0.018964 0.192418 0.000000 -vt 0.048764 0.185018 0.000000 -vt 0.048764 0.187417 0.000000 -vt 0.011955 0.206884 0.000000 -vt 0.023639 0.217218 0.000000 -vt 0.012555 0.214766 0.000000 -vt 0.049360 0.219511 0.000000 -vt 0.053288 0.219511 0.000000 -vt 0.049360 0.221910 0.000000 -vt 0.053289 0.221911 0.000000 -vt 0.023639 0.219511 0.000000 -vt 0.023639 0.221910 0.000000 -vt 0.012287 0.219511 0.000000 -vt 0.012287 0.221911 0.000000 -vt 0.004383 0.219511 0.000000 -vt 0.004383 0.221911 0.000000 -vt 0.023639 0.223787 0.000000 -vt 0.011955 0.234120 0.000000 -vt 0.012555 0.226239 0.000000 -vt 0.060380 0.219511 0.000000 -vt 0.060380 0.221911 0.000000 -vt 0.042641 0.146377 0.000000 -vt 0.017963 0.146377 0.000000 -vt 0.042642 0.139199 0.000000 -vt 0.017963 0.139199 0.000000 -vt 0.040527 0.151802 0.000000 -vt 0.044306 0.151802 0.000000 -vt 0.040527 0.154201 0.000000 -vt 0.044306 0.154202 0.000000 -vt 0.019687 0.151802 0.000000 -vt 0.019687 0.154201 0.000000 -vt 0.016112 0.151802 0.000000 -vt 0.016112 0.154202 0.000000 -vt 0.008934 0.151802 0.000000 -vt 0.008934 0.154202 0.000000 -vt 0.042641 0.166388 0.000000 -vt 0.017963 0.166388 0.000000 -vt 0.042641 0.159210 0.000000 -vt 0.017963 0.159210 0.000000 -vt 0.051484 0.151802 0.000000 -vt 0.051484 0.154202 0.000000 -vt 0.953336 0.444671 0.000000 -vt 0.954273 0.450779 0.000000 -vt 0.930785 0.443134 0.000000 -vt 0.924201 0.450924 0.000000 -vt 0.953331 0.432617 0.000000 -vt 0.948256 0.436532 0.000000 -vt 0.930744 0.434128 0.000000 -vt 0.932094 0.436532 0.000000 -vt 0.926823 0.437891 0.000000 -vt 0.929554 0.437891 0.000000 -vt 0.926793 0.439649 0.000000 -vt 0.929521 0.439649 0.000000 -vt 0.915044 0.437891 0.000000 -vt 0.922704 0.437891 0.000000 -vt 0.914934 0.439649 0.000000 -vt 0.922685 0.439649 0.000000 -vt 0.982288 0.437891 0.000000 -vt 0.950670 0.437891 0.000000 -vt 0.982225 0.439649 0.000000 -vt 0.950530 0.439649 0.000000 -vt 0.977352 0.437891 0.000000 -vt 0.977314 0.439649 0.000000 -vt 0.960063 0.437891 0.000000 -vt 0.960055 0.439649 0.000000 -vt 0.953878 0.437891 0.000000 -vt 0.953814 0.439649 0.000000 -vt 0.951968 0.437891 0.000000 -vt 0.951905 0.439649 0.000000 -vt 0.945517 0.437891 0.000000 -vt 0.945502 0.439649 0.000000 -vt 0.924228 0.426253 0.000000 -vt 0.926663 0.433590 0.000000 -vt 0.926705 0.443627 0.000000 -vt 0.948283 0.440741 0.000000 -vt 0.932138 0.440741 0.000000 -vt 0.955235 0.444674 0.000000 -vt 0.980535 0.450855 0.000000 -vt 0.980512 0.444540 0.000000 -vt 0.960055 0.440741 0.000000 -vt 0.977314 0.440741 0.000000 -vt 0.954273 0.426504 0.000000 -vt 0.955235 0.432615 0.000000 -vt 0.977352 0.436532 0.000000 -vt 0.960063 0.436532 0.000000 -vt 0.980560 0.432731 0.000000 -vt 0.980600 0.426418 0.000000 -vt 0.903459 0.479755 0.000000 -vt 0.904437 0.485835 0.000000 -vt 0.881075 0.478400 0.000000 -vt 0.874501 0.486121 0.000000 -vt 0.903413 0.467730 0.000000 -vt 0.898406 0.471678 0.000000 -vt 0.880896 0.469431 0.000000 -vt 0.882264 0.471819 0.000000 -vt 0.877016 0.473223 0.000000 -vt 0.879736 0.473199 0.000000 -vt 0.877010 0.474981 0.000000 -vt 0.879724 0.474957 0.000000 -vt 0.865282 0.473325 0.000000 -vt 0.872926 0.473259 0.000000 -vt 0.865280 0.475083 0.000000 -vt 0.872939 0.475017 0.000000 -vt 0.932254 0.472741 0.000000 -vt 0.938486 0.472687 0.000000 -vt 0.932245 0.474499 0.000000 -vt 0.938466 0.474445 0.000000 -vt 0.927336 0.472784 0.000000 -vt 0.927338 0.474542 0.000000 -vt 0.910131 0.472934 0.000000 -vt 0.910134 0.474692 0.000000 -vt 0.903963 0.472988 0.000000 -vt 0.903922 0.474746 0.000000 -vt 0.902060 0.473004 0.000000 -vt 0.902022 0.474763 0.000000 -vt 0.895641 0.473061 0.000000 -vt 0.895647 0.474818 0.000000 -vt 0.874324 0.461617 0.000000 -vt 0.876814 0.468927 0.000000 -vt 0.877017 0.478871 0.000000 -vt 0.898408 0.475887 0.000000 -vt 0.882404 0.476026 0.000000 -vt 0.905354 0.479742 0.000000 -vt 0.930634 0.485707 0.000000 -vt 0.930573 0.479398 0.000000 -vt 0.910144 0.475784 0.000000 -vt 0.927348 0.475634 0.000000 -vt 0.904297 0.461637 0.000000 -vt 0.905304 0.467712 0.000000 -vt 0.927324 0.471425 0.000000 -vt 0.910119 0.471575 0.000000 -vt 0.930483 0.467616 0.000000 -vt 0.930469 0.461329 0.000000 -vt 0.933565 0.698823 0.000000 -vt 0.936203 0.698823 0.000000 -vt 0.933565 0.700678 0.000000 -vt 0.936203 0.700678 0.000000 -vt 0.984256 0.683372 0.000000 -vt 0.987217 0.683372 0.000000 -vt 0.984208 0.685130 0.000000 -vt 0.987170 0.685130 0.000000 -vt 0.969899 0.683372 0.000000 -vt 0.969872 0.685130 0.000000 -vt 0.967097 0.683372 0.000000 -vt 0.967069 0.685130 0.000000 -vt 0.950331 0.698823 0.000000 -vt 0.953277 0.698823 0.000000 -vt 0.950331 0.700678 0.000000 -vt 0.953277 0.700678 0.000000 -vt 0.924196 0.698823 0.000000 -vt 0.924196 0.700678 0.000000 -vt 0.952001 0.704133 0.000000 -vt 0.935169 0.704133 0.000000 -vt 0.950331 0.701706 0.000000 -vt 0.936203 0.701706 0.000000 -vt 0.935169 0.685999 0.000000 -vt 0.952001 0.685999 0.000000 -vt 0.935169 0.695368 0.000000 -vt 0.952001 0.695368 0.000000 -vt 0.962646 0.698823 0.000000 -vt 0.962646 0.700678 0.000000 -vt 0.957856 0.683372 0.000000 -vt 0.957809 0.685130 0.000000 -vt 0.985992 0.697973 0.000000 -vt 0.968437 0.697993 0.000000 -vt 0.985971 0.688627 0.000000 -vt 0.968401 0.688627 0.000000 -vt 0.986036 0.679598 0.000000 -vt 0.984256 0.682013 0.000000 -vt 0.968415 0.679602 0.000000 -vt 0.969899 0.682013 0.000000 -vt 0.996459 0.683372 0.000000 -vt 0.996377 0.685130 0.000000 -vt 0.915612 0.737535 0.000000 -vt 0.916538 0.743631 0.000000 -vt 0.893258 0.735979 0.000000 -vt 0.886595 0.743620 0.000000 -vt 0.915705 0.725470 0.000000 -vt 0.910656 0.729413 0.000000 -vt 0.893164 0.727027 0.000000 -vt 0.894517 0.729413 0.000000 -vt 0.889198 0.730772 0.000000 -vt 0.891925 0.730772 0.000000 -vt 0.889182 0.732530 0.000000 -vt 0.891898 0.732530 0.000000 -vt 0.877447 0.730772 0.000000 -vt 0.885103 0.730772 0.000000 -vt 0.877402 0.732530 0.000000 -vt 0.885094 0.732530 0.000000 -vt 0.944522 0.730772 0.000000 -vt 0.950759 0.730772 0.000000 -vt 0.944500 0.732530 0.000000 -vt 0.950740 0.732530 0.000000 -vt 0.939596 0.730772 0.000000 -vt 0.939585 0.732530 0.000000 -vt 0.922366 0.730772 0.000000 -vt 0.922354 0.732530 0.000000 -vt 0.916190 0.730772 0.000000 -vt 0.916129 0.732530 0.000000 -vt 0.914286 0.730772 0.000000 -vt 0.914227 0.732530 0.000000 -vt 0.907859 0.730772 0.000000 -vt 0.907849 0.732530 0.000000 -vt 0.886535 0.719285 0.000000 -vt 0.889081 0.726564 0.000000 -vt 0.889196 0.736401 0.000000 -vt 0.910587 0.733622 0.000000 -vt 0.894607 0.733622 0.000000 -vt 0.917510 0.737539 0.000000 -vt 0.942776 0.743734 0.000000 -vt 0.942781 0.737419 0.000000 -vt 0.922354 0.733622 0.000000 -vt 0.939585 0.733622 0.000000 -vt 0.916654 0.719367 0.000000 -vt 0.917600 0.725471 0.000000 -vt 0.939596 0.729413 0.000000 -vt 0.922366 0.729413 0.000000 -vt 0.942768 0.725646 0.000000 -vt 0.942770 0.719401 0.000000 -vt 0.965227 0.726360 0.000000 -vt 0.967878 0.726360 0.000000 -vt 0.965227 0.728225 0.000000 -vt 0.967878 0.728225 0.000000 -vt 0.913166 0.769950 0.000000 -vt 0.916120 0.769950 0.000000 -vt 0.913130 0.771708 0.000000 -vt 0.916084 0.771708 0.000000 -vt 0.898867 0.769950 0.000000 -vt 0.898840 0.771708 0.000000 -vt 0.896075 0.769950 0.000000 -vt 0.896044 0.771708 0.000000 -vt 0.982077 0.726360 0.000000 -vt 0.985038 0.726360 0.000000 -vt 0.982077 0.728225 0.000000 -vt 0.985038 0.728225 0.000000 -vt 0.955811 0.726361 0.000000 -vt 0.955811 0.728225 0.000000 -vt 0.983755 0.731673 0.000000 -vt 0.966838 0.731672 0.000000 -vt 0.982077 0.729234 0.000000 -vt 0.967878 0.729234 0.000000 -vt 0.966838 0.713419 0.000000 -vt 0.983755 0.713419 0.000000 -vt 0.966838 0.722835 0.000000 -vt 0.983755 0.722835 0.000000 -vt 0.994453 0.726361 0.000000 -vt 0.994453 0.728225 0.000000 -vt 0.886859 0.769950 0.000000 -vt 0.886836 0.771708 0.000000 -vt 0.914897 0.775196 0.000000 -vt 0.897372 0.775201 0.000000 -vt 0.913130 0.772800 0.000000 -vt 0.898840 0.772800 0.000000 -vt 0.914938 0.766186 0.000000 -vt 0.913166 0.768591 0.000000 -vt 0.897389 0.766190 0.000000 -vt 0.898867 0.768591 0.000000 -vt 0.925319 0.769950 0.000000 -vt 0.925268 0.771708 0.000000 -vt 0.961534 0.767992 0.000000 -vt 0.962458 0.774076 0.000000 -vt 0.939199 0.766454 0.000000 -vt 0.932597 0.774100 0.000000 -vt 0.961630 0.755984 0.000000 -vt 0.956603 0.759885 0.000000 -vt 0.939137 0.757489 0.000000 -vt 0.940480 0.759885 0.000000 -vt 0.935223 0.761244 0.000000 -vt 0.937942 0.761244 0.000000 -vt 0.935200 0.763002 0.000000 -vt 0.937911 0.763002 0.000000 -vt 0.923490 0.761244 0.000000 -vt 0.931131 0.761244 0.000000 -vt 0.923478 0.763002 0.000000 -vt 0.931135 0.763002 0.000000 -vt 0.990375 0.761244 0.000000 -vt 0.996597 0.761244 0.000000 -vt 0.990362 0.763002 0.000000 -vt 0.996575 0.763002 0.000000 -vt 0.985453 0.761244 0.000000 -vt 0.985443 0.763002 0.000000 -vt 0.968284 0.761244 0.000000 -vt 0.968266 0.763002 0.000000 -vt 0.962118 0.761244 0.000000 -vt 0.962056 0.763002 0.000000 -vt 0.960219 0.761244 0.000000 -vt 0.960157 0.763002 0.000000 -vt 0.953798 0.761244 0.000000 -vt 0.953763 0.763002 0.000000 -vt 0.932665 0.749651 0.000000 -vt 0.935079 0.756950 0.000000 -vt 0.935155 0.766898 0.000000 -vt 0.956511 0.764094 0.000000 -vt 0.940544 0.764094 0.000000 -vt 0.963428 0.767997 0.000000 -vt 0.988624 0.774185 0.000000 -vt 0.988628 0.767881 0.000000 -vt 0.968266 0.764094 0.000000 -vt 0.985443 0.764094 0.000000 -vt 0.962560 0.749919 0.000000 -vt 0.963513 0.755983 0.000000 -vt 0.985453 0.759885 0.000000 -vt 0.968284 0.759885 0.000000 -vt 0.988636 0.756108 0.000000 -vt 0.988680 0.749832 0.000000 -vt 0.964067 0.802347 0.000000 -vt 0.963147 0.798874 0.000000 -vt 0.965000 0.798874 0.000000 -vt 0.963158 0.787013 0.000000 -vt 0.958257 0.790840 0.000000 -vt 0.940454 0.787871 0.000000 -vt 0.944550 0.790840 0.000000 -vt 0.936831 0.792199 0.000000 -vt 0.941876 0.792199 0.000000 -vt 0.936821 0.793957 0.000000 -vt 0.941874 0.793957 0.000000 -vt 0.931912 0.792199 0.000000 -vt 0.931895 0.793957 0.000000 -vt 0.991281 0.792199 0.000000 -vt 0.994895 0.792199 0.000000 -vt 0.991265 0.793957 0.000000 -vt 0.994879 0.793957 0.000000 -vt 0.986476 0.792199 0.000000 -vt 0.986469 0.793957 0.000000 -vt 0.969698 0.792199 0.000000 -vt 0.969694 0.793957 0.000000 -vt 0.963655 0.792199 0.000000 -vt 0.963628 0.793957 0.000000 -vt 0.961795 0.792199 0.000000 -vt 0.961771 0.793957 0.000000 -vt 0.955542 0.792199 0.000000 -vt 0.955533 0.793957 0.000000 -vt 0.940431 0.798021 0.000000 -vt 0.958239 0.795049 0.000000 -vt 0.944527 0.795049 0.000000 -vt 0.969694 0.795049 0.000000 -vt 0.989583 0.798736 0.000000 -vt 0.986469 0.795049 0.000000 -vt 0.989584 0.802369 0.000000 -vt 0.938070 0.802357 0.000000 -vt 0.964077 0.783540 0.000000 -vt 0.965009 0.787012 0.000000 -vt 0.938091 0.783540 0.000000 -vt 0.986476 0.790840 0.000000 -vt 0.969698 0.790840 0.000000 -vt 0.989591 0.787154 0.000000 -vt 0.989592 0.783522 0.000000 -vt 0.968521 0.409102 0.000000 -vt 0.966908 0.409102 0.000000 -vt 0.968521 0.381437 0.000000 -vt 0.966908 0.381437 0.000000 -vt 0.971179 0.409102 0.000000 -vt 0.971179 0.381437 0.000000 -vt 0.972793 0.409102 0.000000 -vt 0.972792 0.381437 0.000000 -vt 0.975452 0.409102 0.000000 -vt 0.975450 0.381437 0.000000 -vt 0.958676 0.409102 0.000000 -vt 0.957063 0.409102 0.000000 -vt 0.958676 0.381437 0.000000 -vt 0.957063 0.381437 0.000000 -vt 0.961334 0.409102 0.000000 -vt 0.961333 0.381437 0.000000 -vt 0.962948 0.409102 0.000000 -vt 0.962946 0.381437 0.000000 -vt 0.965607 0.409102 0.000000 -vt 0.965605 0.381437 0.000000 -vt 0.978370 0.409102 0.000000 -vt 0.976757 0.409102 0.000000 -vt 0.978370 0.381437 0.000000 -vt 0.976757 0.381437 0.000000 -vt 0.981028 0.409102 0.000000 -vt 0.981027 0.381437 0.000000 -vt 0.982641 0.409102 0.000000 -vt 0.982640 0.381437 0.000000 -vt 0.985300 0.409102 0.000000 -vt 0.985298 0.381437 0.000000 -vt 0.914975 0.784495 0.000000 -vt 0.897349 0.784533 0.000000 -vt 0.983755 0.741088 0.000000 -vt 0.966838 0.741088 0.000000 -vt 0.982077 0.725274 0.000000 -vt 0.967878 0.725274 0.000000 -vt 0.897275 0.756816 0.000000 -vt 0.915027 0.756790 0.000000 -vt 0.952001 0.713502 0.000000 -vt 0.935169 0.713502 0.000000 -vt 0.984208 0.686222 0.000000 -vt 0.969872 0.686222 0.000000 -vt 0.968302 0.670193 0.000000 -vt 0.986120 0.670167 0.000000 -vt 0.950331 0.697794 0.000000 -vt 0.936203 0.697794 0.000000 -vt 0.040527 0.149509 0.000000 -vt 0.019687 0.149509 0.000000 -vt 0.011149 0.068807 0.000000 -vt 0.032434 0.068807 0.000000 -vt 0.032434 0.093057 0.000000 -vt 0.011149 0.093057 0.000000 -vt 0.040527 0.156078 0.000000 -vt 0.019687 0.156078 0.000000 -vt 0.051577 0.234120 0.000000 -vt 0.049360 0.223787 0.000000 -vt 0.051577 0.227029 0.000000 -vt 0.051577 0.206884 0.000000 -vt 0.049360 0.217218 0.000000 -vt 0.051577 0.213976 0.000000 -vt 0.037786 0.189293 0.000000 -vt 0.020809 0.189293 0.000000 -vt 0.037836 0.121265 0.000000 -vt 0.019303 0.121265 0.000000 -vt 0.073240 0.084216 0.000000 -vt 0.056129 0.084216 0.000000 -vt 0.054285 0.068805 0.000000 -vt 0.075539 0.068805 0.000000 -vt 0.040086 0.104394 0.000000 -vt 0.017421 0.104394 0.000000 -vt 0.039949 0.172422 0.000000 -vt 0.018964 0.172422 0.000000 -vt 0.964590 0.522158 0.000000 -vt 0.959201 0.521125 0.000000 -vt 0.964590 0.519914 0.000000 -vt 0.967084 0.499552 0.000000 -vt 0.959201 0.488378 0.000000 -vt 0.962516 0.488378 0.000000 -vt 0.976836 0.488902 0.000000 -vt 0.976836 0.481364 0.000000 -vt 0.980227 0.480191 0.000000 -vt 0.973117 0.490470 0.000000 -vt 0.973117 0.494058 0.000000 -vt 0.971682 0.490470 0.000000 -vt 0.971682 0.494058 0.000000 -vt 0.973117 0.481924 0.000000 -vt 0.971682 0.481924 0.000000 -vt 0.973117 0.476970 0.000000 -vt 0.971682 0.476970 0.000000 -vt 0.973117 0.473655 0.000000 -vt 0.971682 0.473655 0.000000 -vt 0.973117 0.552237 0.000000 -vt 0.973117 0.559418 0.000000 -vt 0.971682 0.552237 0.000000 -vt 0.971682 0.559418 0.000000 -vt 0.973117 0.547443 0.000000 -vt 0.971682 0.547443 0.000000 -vt 0.973117 0.533935 0.000000 -vt 0.971682 0.533935 0.000000 -vt 0.973117 0.529924 0.000000 -vt 0.971682 0.529925 0.000000 -vt 0.971682 0.521965 0.000000 -vt 0.973117 0.521964 0.000000 -vt 0.973117 0.519069 0.000000 -vt 0.971682 0.519069 0.000000 -vt 0.973116 0.516825 0.000000 -vt 0.971682 0.516825 0.000000 -vt 0.973117 0.510196 0.000000 -vt 0.971682 0.510196 0.000000 -vt 0.973117 0.501596 0.000000 -vt 0.971682 0.502290 0.000000 -vt 0.984087 0.528982 0.000000 -vt 0.981902 0.538842 0.000000 -vt 0.981902 0.530882 0.000000 -vt 0.973117 0.502986 0.000000 -vt 0.989475 0.509744 0.000000 -vt 0.989475 0.516476 0.000000 -vt 0.978202 0.510935 0.000000 -vt 0.978202 0.516476 0.000000 -vt 0.976836 0.494443 0.000000 -vt 0.988109 0.495633 0.000000 -vt 0.988109 0.488902 0.000000 -vt 0.978658 0.502986 0.000000 -vt 0.978658 0.501596 0.000000 -vt 0.980941 0.506545 0.000000 -vt 0.979575 0.498832 0.000000 -vt 0.983832 0.502986 0.000000 -vt 0.983832 0.501596 0.000000 -vt 0.973359 0.257115 0.000000 -vt 0.975141 0.257115 0.000000 -vt 0.973359 0.269863 0.000000 -vt 0.975141 0.269863 0.000000 -vt 0.973130 0.255269 0.000000 -vt 0.975369 0.255269 0.000000 -vt 0.977001 0.257115 0.000000 -vt 0.977001 0.269863 0.000000 -vt 0.971498 0.269863 0.000000 -vt 0.971498 0.257115 0.000000 -vt 0.985058 0.255305 0.000000 -vt 0.987874 0.255305 0.000000 -vt 0.985058 0.270384 0.000000 -vt 0.987874 0.270384 0.000000 -vt 0.984558 0.253444 0.000000 -vt 0.988374 0.253444 0.000000 -vt 0.989801 0.255305 0.000000 -vt 0.989801 0.270384 0.000000 -vt 0.983131 0.270384 0.000000 -vt 0.983131 0.255305 0.000000 -vt 0.970475 0.508957 0.000000 -vt 0.970475 0.500724 0.000000 -vt 0.970475 0.516864 0.000000 -vt 0.959201 0.508957 0.000000 -vt 0.966712 0.491013 0.000000 -vt 0.966776 0.532018 0.000000 -vt 0.966775 0.524058 0.000000 -vt 0.966383 0.549573 0.000000 -vt 0.970475 0.547074 0.000000 -vt 0.970475 0.533567 0.000000 -vt 0.959201 0.549573 0.000000 -vt 0.989476 0.527949 0.000000 -vt 0.984087 0.526738 0.000000 -vt 0.982294 0.556397 0.000000 -vt 0.978203 0.553899 0.000000 -vt 0.978203 0.540391 0.000000 -vt 0.989476 0.556397 0.000000 -vt 0.978202 0.523688 0.000000 -vt 0.984794 0.469017 0.000000 -vt 0.980599 0.471653 0.000000 -vt 0.988109 0.469017 0.000000 -vt 0.036158 0.564907 0.000000 -vt 0.042931 0.561729 0.000000 -vt 0.039648 0.569603 0.000000 -vt 0.044450 0.567575 0.000000 -vt 0.069579 0.489637 0.000000 -vt 0.075548 0.485887 0.000000 -vt 0.067437 0.496174 0.000000 -vt 0.069496 0.502727 0.000000 -vt 0.081131 0.485167 0.000000 -vt 0.088793 0.488090 0.000000 -vt 0.072957 0.507161 0.000000 -vt 0.079458 0.509815 0.000000 -vt 0.084988 0.508995 0.000000 -vt 0.092504 0.492747 0.000000 -vt 0.094186 0.499592 0.000000 -vt 0.091181 0.505779 0.000000 -vt 0.076508 0.514686 0.000000 -vt 0.071543 0.512667 0.000000 -vt 0.045317 0.556387 0.000000 -vt 0.047907 0.556929 0.000000 -vt 0.045721 0.562095 0.000000 -vt 0.046960 0.549557 0.000000 -vt 0.049534 0.549258 0.000000 -vt 0.044699 0.543388 0.000000 -vt 0.046629 0.541757 0.000000 -vt 0.038629 0.539977 0.000000 -vt 0.039721 0.537682 0.000000 -vt 0.032719 0.538938 0.000000 -vt 0.033766 0.536382 0.000000 -vt 0.028931 0.536033 0.000000 -vt 0.030041 0.533637 0.000000 -vt 0.024622 0.537946 0.000000 -vt 0.027905 0.533605 0.000000 -vt 0.023533 0.535508 0.000000 -vt 0.024653 0.542363 0.000000 -vt 0.021992 0.541551 0.000000 -vt 0.022092 0.537296 0.000000 -vt 0.021569 0.548023 0.000000 -vt 0.018989 0.547382 0.000000 -vt 0.020453 0.555022 0.000000 -vt 0.017968 0.555623 0.000000 -vt 0.023849 0.560665 0.000000 -vt 0.022136 0.562522 0.000000 -vt 0.030293 0.563537 0.000000 -vt 0.029239 0.565854 0.000000 -vt 0.034695 0.567306 0.000000 -vt 0.038059 0.571675 0.000000 -vt 0.040647 0.572067 0.000000 -vt 0.045544 0.569989 0.000000 -vt 0.047061 0.567608 0.000000 -vt 0.084626 0.482086 0.000000 -vt 0.088924 0.483963 0.000000 -vt 0.031381 0.506898 0.000000 -vt 0.038672 0.505332 0.000000 -vt 0.033972 0.512201 0.000000 -vt 0.038858 0.511367 0.000000 -vt 0.074140 0.536886 0.000000 -vt 0.080441 0.533896 0.000000 -vt 0.071230 0.543168 0.000000 -vt 0.072489 0.549916 0.000000 -vt 0.086223 0.533755 0.000000 -vt 0.093390 0.537557 0.000000 -vt 0.075545 0.554628 0.000000 -vt 0.081657 0.557947 0.000000 -vt 0.087194 0.557912 0.000000 -vt 0.096527 0.542635 0.000000 -vt 0.097413 0.549628 0.000000 -vt 0.093716 0.555429 0.000000 -vt 0.077950 0.562333 0.000000 -vt 0.073478 0.559879 0.000000 -vt 0.042277 0.500721 0.000000 -vt 0.041301 0.506293 0.000000 -vt 0.044718 0.501840 0.000000 -vt 0.045476 0.494511 0.000000 -vt 0.047939 0.494865 0.000000 -vt 0.044706 0.487950 0.000000 -vt 0.047050 0.486927 0.000000 -vt 0.039610 0.483193 0.000000 -vt 0.041318 0.481139 0.000000 -vt 0.033907 0.480587 0.000000 -vt 0.035595 0.478360 0.000000 -vt 0.030931 0.476898 0.000000 -vt 0.032608 0.474874 0.000000 -vt 0.026101 0.477905 0.000000 -vt 0.030365 0.474299 0.000000 -vt 0.025472 0.475307 0.000000 -vt 0.025357 0.482314 0.000000 -vt 0.022877 0.481001 0.000000 -vt 0.023709 0.476805 0.000000 -vt 0.021057 0.487188 0.000000 -vt 0.018643 0.486040 0.000000 -vt 0.018321 0.493727 0.000000 -vt 0.015865 0.493695 0.000000 -vt 0.020343 0.499987 0.000000 -vt 0.018137 0.501347 0.000000 -vt 0.025977 0.504320 0.000000 -vt 0.024315 0.506425 0.000000 -vt 0.029485 0.508959 0.000000 -vt 0.032017 0.513939 0.000000 -vt 0.034384 0.514842 0.000000 -vt 0.039384 0.513975 0.000000 -vt 0.041417 0.511910 0.000000 -vt 0.089860 0.530982 0.000000 -vt 0.094114 0.533429 0.000000 -vt 0.551366 0.574813 0.000000 -vt 0.550737 0.581246 0.000000 -vt 0.554314 0.569062 0.000000 -vt 0.559318 0.564972 0.000000 -vt 0.565469 0.562986 0.000000 -vt 0.571901 0.563630 0.000000 -vt 0.577654 0.566578 0.000000 -vt 0.581751 0.571577 0.000000 -vt 0.583728 0.577731 0.000000 -vt 0.583097 0.584164 0.000000 -vt 0.580144 0.589912 0.000000 -vt 0.575141 0.594007 0.000000 -vt 0.568990 0.595992 0.000000 -vt 0.562558 0.595344 0.000000 -vt 0.556800 0.592407 0.000000 -vt 0.092826 0.831401 0.000000 -vt 0.088214 0.835020 0.000000 -vt 0.264916 0.968892 0.000000 -vt 0.282005 0.423679 0.000000 -vt 0.286894 0.420841 0.000000 -vt 0.141035 0.569892 0.000000 -vt 0.247093 0.929289 0.000000 -vt 0.247850 0.938786 0.000000 -vt 0.213061 0.554509 0.000000 -vt 0.247770 0.476953 0.000000 -vt 0.252671 0.914515 0.000000 -vt 0.252588 0.501244 0.000000 -# 2574 texture coords - -g asdf -f 18/1/1 27/2/2 19/3/3 -f 19/3/4 27/2/5 72/4/6 -f 128/5/7 22/6/8 2/7/9 -f 2/7/10 22/6/11 3/8/12 -f 2/7/13 17/9/14 128/5/15 -f 128/5/16 17/9/17 23/10/18 -f 25/11/19 66/12/20 26/13/21 -f 26/13/22 66/12/23 150/14/24 -f 27/2/25 29/15/26 28/16/27 -f 30/17/28 33/18/29 31/19/30 -f 31/19/31 33/18/32 32/20/33 -f 34/21/34 29/15/35 18/1/36 -f 18/1/37 29/15/38 27/2/39 -f 25/11/40 33/18/41 35/22/42 -f 35/22/43 33/18/44 30/17/45 -f 25/11/46 35/22/47 66/12/48 -f 66/12/49 35/22/50 69/23/51 -f 36/24/52 39/25/53 37/26/54 -f 37/26/55 39/25/56 38/27/57 -f 39/25/58 41/28/59 38/27/60 -f 38/27/61 41/28/62 40/29/63 -f 42/30/64 45/31/65 43/32/66 -f 43/32/67 45/31/68 44/33/69 -f 47/34/70 46/35/71 44/33/72 -f 44/33/73 46/35/74 43/32/75 -f 51/36/76 50/37/77 48/38/78 -f 48/38/79 50/37/80 49/39/81 -f 53/40/82 52/41/83 51/36/84 -f 51/36/85 52/41/86 50/37/87 -f 4/42/88 5/43/89 53/40/90 -f 53/40/91 5/43/92 52/41/93 -f 41/28/94 45/31/95 40/29/96 -f 40/29/97 45/31/98 42/30/99 -f 36/24/100 107/44/101 39/25/102 -f 39/25/103 107/44/104 106/45/105 -f 39/25/106 106/45/107 41/28/108 -f 41/28/109 106/45/110 108/46/111 -f 45/31/112 41/28/113 109/47/114 -f 109/47/115 41/28/116 108/46/117 -f 54/48/118 36/24/119 55/49/120 -f 55/49/121 36/24/122 37/26/123 -f 51/36/124 48/38/125 56/50/126 -f 56/50/127 48/38/128 57/51/129 -f 51/36/130 56/50/131 53/40/132 -f 53/40/133 56/50/134 58/52/135 -f 4/42/136 53/40/137 7/53/138 -f 7/53/139 53/40/140 58/52/141 -f 44/33/142 45/31/143 172/54/144 -f 172/54/145 45/31/146 109/47/147 -f 59/55/148 47/34/149 172/54/150 -f 172/54/151 47/34/152 44/33/153 -f 60/56/154 57/51/155 61/57/156 -f 61/57/157 57/51/158 59/55/159 -f 60/56/160 62/58/161 57/51/162 -f 57/51/163 62/58/164 56/50/165 -f 62/58/166 63/59/167 56/50/168 -f 56/50/169 63/59/170 58/52/171 -f 63/59/172 6/60/173 58/52/174 -f 58/52/175 6/60/176 7/53/177 -f 152/61/178 64/62/179 151/63/180 -f 151/63/181 64/62/182 65/64/183 -f 69/23/184 68/65/185 66/12/186 -f 66/12/187 68/65/188 67/66/189 -f 66/12/190 67/66/191 150/14/192 -f 150/14/193 67/66/194 149/67/195 -f 69/23/196 158/68/197 68/65/198 -f 68/65/199 158/68/200 157/69/201 -f 70/70/202 30/17/203 71/71/204 -f 71/71/205 30/17/206 31/19/207 -f 24/72/208 35/22/209 70/70/210 -f 70/70/211 35/22/212 30/17/213 -f 10/73/214 3/8/215 98/74/216 -f 98/74/217 3/8/218 22/6/219 -f 95/75/220 21/76/221 93/77/222 -f 93/77/223 21/76/224 20/78/225 -f 27/2/226 87/79/227 72/4/228 -f 72/4/229 87/79/230 92/80/231 -f 87/79/232 28/16/233 90/81/234 -f 28/16/235 87/79/236 27/2/237 -f 71/71/238 31/19/239 85/82/240 -f 85/82/241 31/19/242 82/83/243 -f 37/26/244 38/27/245 78/84/246 -f 78/84/247 38/27/248 76/85/249 -f 38/27/250 40/29/251 76/85/252 -f 76/85/253 40/29/254 74/86/255 -f 42/30/256 43/32/257 73/87/258 -f 46/35/259 132/88/260 43/32/261 -f 43/32/262 132/88/263 133/89/264 -f 50/37/265 130/90/266 49/39/267 -f 49/39/268 130/90/269 131/91/270 -f 52/41/271 129/92/272 50/37/273 -f 50/37/274 129/92/275 130/90/276 -f 5/43/277 9/93/278 52/41/279 -f 52/41/280 9/93/281 129/92/282 -f 40/29/283 42/30/284 74/86/285 -f 74/86/286 42/30/287 73/87/288 -f 55/49/289 37/26/290 80/94/291 -f 80/94/292 37/26/293 78/84/294 -f 31/19/295 32/20/296 82/83/297 -f 32/20/298 177/95/299 82/83/300 -f 82/83/301 177/95/302 176/96/303 -f 43/32/304 133/89/305 73/87/306 -f 73/87/307 133/89/308 134/97/309 -f 74/86/310 73/87/311 75/98/312 -f 75/98/313 73/87/314 134/97/315 -f 76/85/316 74/86/317 77/99/318 -f 77/99/319 74/86/320 75/98/321 -f 78/84/322 76/85/323 79/100/324 -f 79/100/325 76/85/326 77/99/327 -f 80/94/328 78/84/329 81/101/330 -f 81/101/331 78/84/332 79/100/333 -f 84/102/334 83/103/335 176/96/336 -f 176/96/337 83/103/338 82/83/339 -f 85/82/340 82/83/341 86/104/342 -f 86/104/343 82/83/344 83/103/345 -f 90/81/346 89/105/347 87/79/348 -f 87/79/349 89/105/350 88/106/351 -f 92/80/352 87/79/353 91/107/354 -f 91/107/355 87/79/356 88/106/357 -f 93/77/358 92/80/359 94/108/360 -f 94/108/361 92/80/362 91/107/363 -f 93/77/364 94/108/365 95/75/366 -f 95/75/367 94/108/368 96/109/369 -f 98/74/370 97/110/371 10/73/372 -f 10/73/373 97/110/374 11/111/375 -f 91/107/376 100/112/377 94/108/378 -f 94/108/379 100/112/380 99/113/381 -f 94/108/382 99/113/383 96/109/384 -f 96/109/385 99/113/386 101/114/387 -f 97/110/388 102/115/389 11/111/390 -f 11/111/391 102/115/392 8/116/393 -f 109/47/394 108/46/395 148/117/396 -f 148/117/397 108/46/398 142/118/399 -f 47/34/400 59/55/401 48/38/402 -f 48/38/403 59/55/404 57/51/405 -f 48/38/406 49/39/407 47/34/408 -f 47/34/409 49/39/410 46/35/411 -f 49/39/412 131/91/413 46/35/414 -f 46/35/415 131/91/416 132/88/417 -f 104/119/418 114/120/419 103/121/420 -f 103/121/421 114/120/422 105/122/423 -f 67/123/424 68/124/425 159/125/426 -f 149/126/427 67/123/428 161/127/429 -f 161/127/430 67/123/431 159/125/432 -f 157/128/433 16/129/434 68/124/435 -f 68/124/436 16/129/437 159/125/438 -f 104/119/439 160/130/440 114/120/441 -f 115/131/442 116/132/443 185/133/444 -f 185/133/445 116/132/446 184/134/447 -f 120/135/448 119/136/449 117/137/450 -f 117/137/451 119/136/452 118/138/453 -f 122/139/454 121/140/455 120/135/456 -f 120/135/457 121/140/458 119/136/459 -f 124/141/460 123/142/461 122/139/462 -f 122/139/463 123/142/464 121/140/465 -f 124/141/466 1/143/467 123/142/468 -f 123/142/469 1/143/470 12/144/471 -f 178/145/472 26/13/473 126/146/474 -f 54/48/475 126/146/476 125/147/477 -f 125/147/478 189/148/479 188/149/480 -f 189/148/481 125/147/482 126/146/483 -f 108/46/484 106/45/485 142/118/486 -f 142/118/487 106/45/488 143/150/489 -f 107/44/490 125/147/491 188/149/492 -f 54/48/493 125/147/494 36/24/495 -f 36/24/496 125/147/497 107/44/498 -f 127/151/499 20/78/500 23/10/501 -f 23/10/502 20/78/503 128/5/504 -f 19/3/505 72/4/506 127/151/507 -f 127/151/508 72/4/509 20/78/510 -f 77/99/511 75/98/512 135/152/513 -f 79/100/514 77/99/515 136/153/516 -f 136/153/517 77/99/518 135/152/519 -f 81/101/520 79/100/521 137/154/522 -f 137/154/523 79/100/524 136/153/525 -f 83/103/526 84/102/527 138/155/528 -f 138/155/529 84/102/530 139/156/531 -f 138/155/532 86/104/533 83/103/534 -f 86/104/535 138/155/536 140/157/537 -f 89/105/538 179/158/539 88/106/540 -f 88/106/541 179/158/542 141/159/543 -f 88/106/544 141/159/545 91/107/546 -f 91/107/547 141/159/548 100/112/549 -f 174/160/550 175/161/551 102/115/552 -f 102/115/553 175/161/554 8/116/555 -f 99/113/556 173/162/557 101/114/558 -f 110/163/559 109/47/560 148/117/561 -f 61/57/562 59/55/563 113/164/564 -f 113/164/565 59/55/566 111/165/567 -f 105/122/568 162/166/569 145/167/570 -f 105/168/571 189/148/572 26/13/573 -f 105/168/574 150/14/575 103/169/576 -f 150/14/577 105/168/578 26/13/579 -f 149/67/580 104/170/581 150/14/582 -f 150/14/583 104/170/584 103/169/585 -f 116/132/586 115/131/587 151/63/588 -f 151/63/589 115/131/590 152/171/591 -f 65/64/592 116/132/593 151/63/594 -f 123/172/595 156/173/596 121/174/597 -f 121/174/598 156/173/599 155/175/600 -f 12/176/601 13/177/602 123/172/603 -f 123/172/604 13/177/605 156/173/606 -f 119/179/607 154/180/608 118/181/609 -f 118/181/610 154/180/611 153/182/612 -f 121/174/613 155/175/614 119/179/615 -f 119/179/616 155/175/617 154/180/618 -f 186/185/619 185/186/620 153/182/621 -f 153/182/622 185/186/623 118/181/624 -f 15/188/625 16/129/626 157/189/627 -f 64/62/628 157/69/629 65/64/630 -f 65/64/631 157/69/632 158/68/633 -f 359/190/634 190/191/635 14/192/636 -f 182/193/637 183/194/638 71/71/639 -f 71/71/640 183/194/641 70/70/642 -f 181/195/643 182/193/644 85/82/645 -f 85/82/646 182/193/647 71/71/648 -f 180/196/649 181/195/650 86/104/651 -f 86/104/652 181/195/653 85/82/654 -f 84/102/655 81/101/656 139/156/657 -f 139/156/658 81/101/659 137/154/660 -f 176/96/661 80/94/662 84/102/663 -f 84/102/664 80/94/665 81/101/666 -f 177/95/667 55/49/668 176/96/669 -f 176/96/670 55/49/671 80/94/672 -f 178/145/673 54/48/674 177/95/675 -f 177/95/676 54/48/677 55/49/678 -f 178/145/679 126/146/680 54/48/681 -f 24/72/682 183/194/683 34/21/684 -f 183/194/685 24/72/686 70/70/687 -f 65/64/688 158/68/689 116/132/690 -f 184/134/691 158/68/692 24/72/693 -f 24/72/694 158/68/695 35/22/696 -f 35/22/697 158/68/698 69/23/699 -f 124/141/700 23/10/701 1/143/702 -f 1/143/703 23/10/704 17/9/705 -f 122/139/706 127/151/707 124/141/708 -f 124/141/709 127/151/710 23/10/711 -f 120/135/712 19/3/713 122/139/714 -f 122/139/715 19/3/716 127/151/717 -f 117/137/718 18/1/719 120/135/720 -f 120/135/721 18/1/722 19/3/723 -f 18/1/724 117/137/725 34/21/726 -f 117/137/727 184/134/728 34/21/729 -f 184/134/730 24/72/731 34/21/732 -f 173/162/733 174/160/734 101/114/735 -f 101/114/736 174/160/737 102/115/738 -f 96/109/739 101/114/740 97/110/741 -f 97/110/742 101/114/743 102/115/744 -f 98/74/745 95/75/746 97/110/747 -f 97/110/748 95/75/749 96/109/750 -f 21/76/751 95/75/752 22/6/753 -f 22/6/754 95/75/755 98/74/756 -f 22/6/757 128/5/758 21/76/759 -f 21/76/760 128/5/761 20/78/762 -f 149/126/763 161/127/764 104/119/765 -f 104/119/766 161/127/767 160/130/768 -f 162/166/769 105/122/770 163/197/771 -f 163/197/772 105/122/773 114/120/774 -f 163/197/775 165/198/776 162/166/777 -f 162/166/778 165/198/779 164/199/780 -f 165/198/781 167/200/782 164/199/783 -f 164/199/784 167/200/785 166/201/786 -f 160/130/787 168/202/788 114/120/789 -f 114/120/790 168/202/791 163/197/792 -f 168/202/793 169/203/794 163/197/795 -f 169/203/796 170/204/797 163/197/798 -f 163/197/799 170/204/800 165/198/801 -f 170/204/802 171/205/803 165/198/804 -f 165/198/805 171/205/806 167/200/807 -f 147/206/808 105/168/809 145/207/810 -f 105/168/811 187/208/812 189/148/813 -f 72/4/814 92/80/815 20/78/816 -f 20/78/817 92/80/818 93/77/819 -f 109/47/820 110/163/821 172/54/822 -f 172/54/823 110/163/824 112/209/825 -f 59/55/826 172/54/827 111/165/828 -f 111/165/829 172/54/830 112/209/831 -f 129/210/832 9/211/833 174/212/834 -f 174/212/835 9/211/836 175/213/837 -f 99/214/838 130/215/839 173/216/840 -f 130/215/841 129/210/842 173/216/843 -f 129/210/844 174/212/845 173/216/846 -f 130/215/847 140/217/848 131/218/849 -f 140/217/850 130/215/851 179/219/852 -f 130/215/853 141/220/854 179/219/855 -f 130/215/856 100/221/857 141/220/858 -f 100/221/859 130/215/860 99/214/861 -f 137/222/862 136/223/863 131/218/864 -f 136/223/865 135/224/866 131/218/867 -f 135/224/868 132/225/869 131/218/870 -f 140/217/871 138/226/872 131/218/873 -f 138/226/874 139/227/875 131/218/876 -f 131/218/877 139/227/878 137/222/879 -f 135/224/880 75/228/881 132/225/882 -f 132/225/883 75/228/884 133/229/885 -f 75/228/886 134/230/887 133/229/888 -f 33/18/889 178/145/890 32/20/891 -f 32/20/892 178/145/893 177/95/894 -f 26/13/895 178/145/896 25/11/897 -f 178/145/898 33/18/899 25/11/900 -f 140/157/901 180/196/902 86/104/903 -f 180/196/904 179/158/905 89/105/906 -f 179/158/907 180/196/908 140/157/909 -f 89/105/910 90/81/911 180/196/912 -f 180/196/913 90/81/914 181/195/915 -f 90/81/916 28/16/917 181/195/918 -f 181/195/919 28/16/920 182/193/921 -f 28/16/922 29/15/923 182/193/924 -f 182/193/925 29/15/926 183/194/927 -f 29/15/928 34/21/929 183/194/930 -f 185/133/931 184/134/932 118/138/933 -f 118/138/934 184/134/935 117/137/936 -f 115/231/937 64/232/938 152/233/939 -f 158/68/940 184/134/941 116/132/942 -f 105/168/943 147/206/944 187/208/945 -f 188/149/946 187/208/947 146/234/948 -f 146/234/949 187/208/950 147/206/951 -f 107/44/952 188/149/953 144/235/954 -f 144/235/955 188/149/956 146/234/957 -f 106/45/958 107/44/959 143/150/960 -f 143/150/961 107/44/962 144/235/963 -f 185/186/964 186/185/965 115/231/966 -f 115/231/967 186/185/968 64/232/969 -f 188/149/970 189/148/971 187/208/972 -f 26/13/973 189/148/974 126/146/975 -f 64/236/976 190/191/977 157/189/978 -f 157/189/979 190/191/980 15/188/981 -f 191/237/982 190/238/983 186/185/984 -f 186/185/985 190/238/986 64/232/987 -f 192/239/988 191/237/989 153/182/990 -f 153/182/991 191/237/992 186/185/993 -f 154/180/994 193/240/995 153/182/996 -f 153/182/997 193/240/998 192/239/999 -f 155/175/1000 194/241/1001 154/180/1002 -f 154/180/1003 194/241/1004 193/240/1005 -f 156/173/1006 195/242/1007 155/175/1008 -f 155/175/1009 195/242/1010 194/241/1011 -f 13/177/1012 196/243/1013 156/173/1014 -f 156/173/1015 196/243/1016 195/242/1017 -f 200/244/1018 195/245/1019 197/246/1020 -f 197/246/1021 195/245/1022 196/247/1023 -f 201/248/1024 199/249/1025 193/250/1026 -f 193/250/1027 199/249/1028 192/251/1029 -f 200/244/1030 198/252/1031 195/245/1032 -f 195/245/1033 198/252/1034 194/253/1035 -f 201/248/1036 193/250/1037 198/252/1038 -f 198/252/1039 193/250/1040 194/253/1041 -f 191/256/1042 203/255/1043 202/254/1044 -f 203/255/1045 191/256/1046 192/251/1047 -f 203/255/1048 192/251/1049 199/249/1050 -f 14/257/1051 190/258/1052 204/259/1053 -f 191/256/1054 204/259/1055 190/258/1056 -f 204/259/1057 191/256/1058 202/254/1059 -f 205/260/1060 207/261/1061 206/262/1062 -f 207/261/1063 208/263/1064 206/262/1065 -f 209/264/1066 2/7/1067 210/265/1068 -f 2/7/1069 3/8/1070 210/265/1071 -f 2/7/1072 209/264/1073 17/9/1074 -f 209/264/1075 211/266/1076 17/9/1077 -f 212/267/1078 214/268/1079 213/269/1080 -f 214/268/1081 215/270/1082 213/269/1083 -f 206/262/1084 217/271/1085 216/272/1086 -f 218/273/1087 220/274/1088 219/275/1089 -f 220/274/1090 221/276/1091 219/275/1092 -f 222/277/1093 205/260/1094 216/272/1095 -f 205/260/1096 206/262/1097 216/272/1098 -f 212/267/1099 223/278/1100 219/275/1101 -f 223/278/1102 218/273/1103 219/275/1104 -f 212/267/1105 213/269/1106 223/278/1107 -f 213/269/1108 224/279/1109 223/278/1110 -f 225/280/1111 227/281/1112 226/282/1113 -f 227/281/1114 228/283/1115 226/282/1116 -f 226/282/1117 228/283/1118 229/284/1119 -f 228/283/1120 230/285/1121 229/284/1122 -f 231/286/1123 233/287/1124 232/288/1125 -f 233/287/1126 234/289/1127 232/288/1128 -f 235/290/1129 234/289/1130 236/291/1131 -f 234/289/1132 233/287/1133 236/291/1134 -f 237/292/1135 239/293/1136 238/294/1137 -f 239/293/1138 240/295/1139 238/294/1140 -f 241/296/1141 237/292/1142 242/297/1143 -f 237/292/1144 238/294/1145 242/297/1146 -f 4/42/1147 241/296/1148 5/43/1149 -f 241/296/1150 242/297/1151 5/43/1152 -f 229/284/1153 230/285/1154 232/288/1155 -f 230/285/1156 231/286/1157 232/288/1158 -f 225/280/1159 226/282/1160 243/298/1161 -f 226/282/1162 244/299/1163 243/298/1164 -f 226/282/1165 229/284/1166 244/299/1167 -f 229/284/1168 245/300/1169 244/299/1170 -f 232/288/1171 246/301/1172 229/284/1173 -f 246/301/1174 245/300/1175 229/284/1176 -f 247/302/1177 248/303/1178 225/280/1179 -f 248/303/1180 227/281/1181 225/280/1182 -f 237/292/1183 249/304/1184 239/293/1185 -f 249/304/1186 250/305/1187 239/293/1188 -f 237/292/1189 241/296/1190 249/304/1191 -f 241/296/1192 251/306/1193 249/304/1194 -f 4/42/1195 7/53/1196 241/296/1197 -f 7/53/1198 251/306/1199 241/296/1200 -f 234/289/1201 252/307/1202 232/288/1203 -f 252/307/1204 246/301/1205 232/288/1206 -f 253/308/1207 252/307/1208 235/290/1209 -f 252/307/1210 234/289/1211 235/290/1212 -f 254/309/1213 255/310/1214 250/305/1215 -f 255/310/1216 253/308/1217 250/305/1218 -f 254/309/1219 250/305/1220 256/311/1221 -f 250/305/1222 249/304/1223 256/311/1224 -f 256/311/1225 249/304/1226 257/312/1227 -f 249/304/1228 251/306/1229 257/312/1230 -f 257/312/1231 251/306/1232 6/60/1233 -f 251/306/1234 7/53/1235 6/60/1236 -f 258/313/1237 260/314/1238 259/315/1239 -f 260/314/1240 261/316/1241 259/315/1242 -f 224/279/1243 213/269/1244 262/317/1245 -f 213/269/1246 263/318/1247 262/317/1248 -f 213/269/1249 215/270/1250 263/318/1251 -f 215/270/1252 264/319/1253 263/318/1254 -f 224/279/1255 262/317/1256 265/320/1257 -f 262/317/1258 266/321/1259 265/320/1260 -f 267/322/1261 268/323/1262 218/273/1263 -f 268/323/1264 220/274/1265 218/273/1266 -f 269/324/1267 267/322/1268 223/278/1269 -f 267/322/1270 218/273/1271 223/278/1272 -f 10/73/1273 270/325/1274 3/8/1275 -f 270/325/1276 210/265/1277 3/8/1278 -f 271/326/1279 273/327/1280 272/328/1281 -f 273/327/1282 274/329/1283 272/328/1284 -f 206/262/1285 208/263/1286 275/330/1287 -f 208/263/1288 276/331/1289 275/330/1290 -f 275/330/1291 277/332/1292 217/271/1293 -f 217/271/1294 206/262/1295 275/330/1296 -f 268/323/1297 278/333/1298 220/274/1299 -f 278/333/1300 279/334/1301 220/274/1302 -f 227/281/1303 280/335/1304 228/283/1305 -f 280/335/1306 281/336/1307 228/283/1308 -f 228/283/1309 281/336/1310 230/285/1311 -f 281/336/1312 282/337/1313 230/285/1314 -f 231/286/1315 283/338/1316 233/287/1317 -f 236/291/1318 233/287/1319 284/339/1320 -f 233/287/1321 285/340/1322 284/339/1323 -f 238/294/1324 240/295/1325 286/341/1326 -f 240/295/1327 287/342/1328 286/341/1329 -f 242/297/1330 238/294/1331 288/343/1332 -f 238/294/1333 286/341/1334 288/343/1335 -f 5/43/1336 242/297/1337 9/93/1338 -f 242/297/1339 288/343/1340 9/93/1341 -f 230/285/1342 282/337/1343 231/286/1344 -f 282/337/1345 283/338/1346 231/286/1347 -f 248/303/1348 289/344/1349 227/281/1350 -f 289/344/1351 280/335/1352 227/281/1353 -f 220/274/1354 279/334/1355 221/276/1356 -f 221/276/1357 279/334/1358 290/345/1359 -f 279/334/1360 291/346/1361 290/345/1362 -f 233/287/1363 283/338/1364 285/340/1365 -f 283/338/1366 292/347/1367 285/340/1368 -f 282/337/1369 293/348/1370 283/338/1371 -f 293/348/1372 292/347/1373 283/338/1374 -f 281/336/1375 294/349/1376 282/337/1377 -f 294/349/1378 293/348/1379 282/337/1380 -f 280/335/1381 295/350/1382 281/336/1383 -f 295/350/1384 294/349/1385 281/336/1386 -f 289/344/1387 296/351/1388 280/335/1389 -f 296/351/1390 295/350/1391 280/335/1392 -f 297/352/1393 291/346/1394 298/353/1395 -f 291/346/1396 279/334/1397 298/353/1398 -f 278/333/1399 299/354/1400 279/334/1401 -f 299/354/1402 298/353/1403 279/334/1404 -f 277/332/1405 275/330/1406 300/355/1407 -f 275/330/1408 301/356/1409 300/355/1410 -f 276/331/1411 302/357/1412 275/330/1413 -f 302/357/1414 301/356/1415 275/330/1416 -f 273/327/1417 303/358/1418 276/331/1419 -f 303/358/1420 302/357/1421 276/331/1422 -f 273/327/1423 271/326/1424 303/358/1425 -f 271/326/1426 304/359/1427 303/358/1428 -f 270/325/1429 10/73/1430 305/360/1431 -f 10/73/1432 11/111/1433 305/360/1434 -f 302/357/1435 303/358/1436 306/361/1437 -f 303/358/1438 307/362/1439 306/361/1440 -f 303/358/1441 304/359/1442 307/362/1443 -f 304/359/1444 308/363/1445 307/362/1446 -f 305/360/1447 11/111/1448 309/364/1449 -f 11/111/1450 8/116/1451 309/364/1452 -f 246/301/1453 310/365/1454 245/300/1455 -f 310/365/1456 311/366/1457 245/300/1458 -f 235/290/1459 239/293/1460 253/308/1461 -f 239/293/1462 250/305/1463 253/308/1464 -f 239/293/1465 235/290/1466 240/295/1467 -f 235/290/1468 236/291/1469 240/295/1470 -f 240/295/1471 236/291/1472 287/342/1473 -f 236/291/1474 284/339/1475 287/342/1476 -f 312/367/1477 314/368/1478 313/369/1479 -f 314/368/1480 315/370/1481 313/369/1482 -f 263/371/1483 316/372/1484 262/373/1485 -f 264/374/1486 317/375/1487 263/371/1488 -f 317/375/1489 316/372/1490 263/371/1491 -f 266/376/1492 262/373/1493 318/377/1494 -f 262/373/1495 316/372/1496 318/377/1497 -f 312/367/1498 313/369/1499 319/378/1500 -f 320/379/1501 322/380/1502 321/381/1503 -f 322/380/1504 323/382/1505 321/381/1506 -f 324/383/1507 326/384/1508 325/385/1509 -f 326/384/1510 327/386/1511 325/385/1512 -f 328/387/1513 324/383/1514 329/388/1515 -f 324/383/1516 325/385/1517 329/388/1518 -f 330/389/1519 328/387/1520 331/390/1521 -f 328/387/1522 329/388/1523 331/390/1524 -f 330/389/1525 331/390/1526 1/143/1527 -f 331/390/1528 12/391/1529 1/143/1530 -f 332/392/1531 333/393/1532 214/268/1533 -f 247/302/1534 334/394/1535 333/393/1536 -f 334/394/1537 336/395/1538 335/396/1539 -f 335/396/1540 333/393/1541 334/394/1542 -f 245/300/1543 311/366/1544 244/299/1545 -f 311/366/1546 337/397/1547 244/299/1548 -f 243/298/1549 336/395/1550 334/394/1551 -f 247/302/1552 225/280/1553 334/394/1554 -f 225/280/1555 243/298/1556 334/394/1557 -f 338/398/1558 211/266/1559 274/329/1560 -f 211/266/1561 209/264/1562 274/329/1563 -f 207/261/1564 338/398/1565 208/263/1566 -f 338/398/1567 274/329/1568 208/263/1569 -f 294/349/1570 339/399/1571 293/348/1572 -f 295/350/1573 340/400/1574 294/349/1575 -f 340/400/1576 339/399/1577 294/349/1578 -f 296/351/1579 341/401/1580 295/350/1581 -f 341/401/1582 340/400/1583 295/350/1584 -f 298/353/1585 342/402/1586 297/352/1587 -f 342/402/1588 343/403/1589 297/352/1590 -f 342/402/1591 298/353/1592 299/354/1593 -f 299/354/1594 344/404/1595 342/402/1596 -f 300/355/1597 301/356/1598 345/405/1599 -f 301/356/1600 346/406/1601 345/405/1602 -f 301/356/1603 302/357/1604 346/406/1605 -f 302/357/1606 306/361/1607 346/406/1608 -f 347/407/1609 309/364/1610 175/161/1611 -f 309/364/1612 8/116/1613 175/161/1614 -f 307/362/1615 308/363/1616 348/409/1617 -f 349/410/1618 310/365/1619 246/301/1620 -f 255/310/1621 350/411/1622 253/308/1623 -f 350/411/1624 351/412/1625 253/308/1626 -f 315/370/1627 353/413/1628 352/414/1629 -f 315/415/1630 214/268/1631 335/396/1632 -f 315/415/1633 314/416/1634 215/270/1635 -f 215/270/1636 214/268/1637 315/415/1638 -f 264/319/1639 215/270/1640 312/417/1641 -f 215/270/1642 314/416/1643 312/417/1644 -f 321/381/1645 260/314/1646 320/379/1647 -f 260/314/1648 258/418/1649 320/379/1650 -f 261/316/1651 260/314/1652 321/381/1653 -f 331/419/1654 329/420/1655 354/421/1656 -f 329/420/1657 355/422/1658 354/421/1659 -f 12/176/1660 331/419/1661 13/177/1662 -f 331/419/1663 354/421/1664 13/177/1665 -f 325/425/1666 327/426/1667 356/427/1668 -f 327/426/1669 357/428/1670 356/427/1671 -f 329/420/1672 325/425/1673 355/422/1674 -f 325/425/1675 356/427/1676 355/422/1677 -f 358/431/1678 357/428/1679 322/432/1680 -f 357/428/1681 327/426/1682 322/432/1683 -f 318/377/1684 15/188/1685 266/434/1686 -f 15/188/1687 318/377/1688 16/129/1689 -f 259/315/1690 261/316/1691 266/321/1692 -f 261/316/1693 265/320/1694 266/321/1695 -f 190/191/1696 359/190/1697 15/188/1698 -f 360/435/1699 268/323/1700 361/436/1701 -f 268/323/1702 267/322/1703 361/436/1704 -f 362/437/1705 278/333/1706 360/435/1707 -f 278/333/1708 268/323/1709 360/435/1710 -f 363/438/1711 299/354/1712 362/437/1713 -f 299/354/1714 278/333/1715 362/437/1716 -f 297/352/1717 343/403/1718 296/351/1719 -f 343/403/1720 341/401/1721 296/351/1722 -f 291/346/1723 297/352/1724 289/344/1725 -f 297/352/1726 296/351/1727 289/344/1728 -f 290/345/1729 291/346/1730 248/303/1731 -f 291/346/1732 289/344/1733 248/303/1734 -f 332/392/1735 290/345/1736 247/302/1737 -f 290/345/1738 248/303/1739 247/302/1740 -f 332/392/1741 247/302/1742 333/393/1743 -f 269/324/1744 222/277/1745 361/436/1746 -f 361/436/1747 267/322/1748 269/324/1749 -f 261/316/1750 321/381/1751 265/320/1752 -f 323/382/1753 269/324/1754 265/320/1755 -f 269/324/1756 223/278/1757 265/320/1758 -f 223/278/1759 224/279/1760 265/320/1761 -f 330/389/1762 1/143/1763 211/266/1764 -f 1/143/1765 17/9/1766 211/266/1767 -f 328/387/1768 330/389/1769 338/398/1770 -f 330/389/1771 211/266/1772 338/398/1773 -f 324/383/1774 328/387/1775 207/261/1776 -f 328/387/1777 338/398/1778 207/261/1779 -f 326/384/1780 324/383/1781 205/260/1782 -f 324/383/1783 207/261/1784 205/260/1785 -f 205/260/1786 222/277/1787 326/384/1788 -f 326/384/1789 222/277/1790 323/382/1791 -f 323/382/1792 222/277/1793 269/324/1794 -f 348/409/1795 308/363/1796 347/407/1797 -f 308/363/1798 309/364/1799 347/407/1800 -f 304/359/1801 305/360/1802 308/363/1803 -f 305/360/1804 309/364/1805 308/363/1806 -f 270/325/1807 305/360/1808 271/326/1809 -f 305/360/1810 304/359/1811 271/326/1812 -f 272/328/1813 210/265/1814 271/326/1815 -f 210/265/1816 270/325/1817 271/326/1818 -f 210/265/1819 272/328/1820 209/264/1821 -f 272/328/1822 274/329/1823 209/264/1824 -f 264/374/1825 312/367/1826 317/375/1827 -f 312/367/1828 319/378/1829 317/375/1830 -f 352/414/1831 364/439/1832 315/370/1833 -f 364/439/1834 313/369/1835 315/370/1836 -f 364/439/1837 352/414/1838 366/440/1839 -f 352/414/1840 365/441/1841 366/440/1842 -f 366/440/1843 365/441/1844 368/442/1845 -f 365/441/1846 367/443/1847 368/442/1848 -f 319/378/1849 313/369/1850 369/444/1851 -f 313/369/1852 364/439/1853 369/444/1854 -f 369/444/1855 364/439/1856 370/445/1857 -f 370/445/1858 364/439/1859 371/446/1860 -f 364/439/1861 366/440/1862 371/446/1863 -f 371/446/1864 366/440/1865 372/447/1866 -f 366/440/1867 368/442/1868 372/447/1869 -f 16/129/1870 318/377/1871 159/125/1872 -f 318/377/1873 316/372/1874 159/125/1875 -f 161/127/1876 317/375/1877 160/130/1878 -f 317/375/1879 319/378/1880 160/130/1881 -f 159/125/1882 316/372/1883 161/127/1884 -f 316/372/1885 317/375/1886 161/127/1887 -f 160/130/1888 319/378/1889 168/202/1890 -f 319/378/1891 369/444/1892 168/202/1893 -f 373/448/1894 353/449/1895 315/415/1896 -f 315/415/1897 335/396/1898 374/450/1899 -f 208/263/1900 274/329/1901 276/331/1902 -f 274/329/1903 273/327/1904 276/331/1905 -f 246/301/1906 252/307/1907 349/410/1908 -f 252/307/1909 375/451/1910 349/410/1911 -f 253/308/1912 351/412/1913 252/307/1914 -f 351/412/1915 375/451/1916 252/307/1917 -f 288/452/1918 347/453/1919 9/211/1920 -f 347/453/1921 175/213/1922 9/211/1923 -f 307/454/1924 348/455/1925 286/456/1926 -f 286/456/1927 348/455/1928 288/452/1929 -f 288/452/1930 348/455/1931 347/453/1932 -f 286/456/1933 287/457/1934 344/458/1935 -f 344/458/1936 345/459/1937 286/456/1938 -f 286/456/1939 345/459/1940 346/460/1941 -f 286/456/1942 346/460/1943 306/461/1944 -f 306/461/1945 307/454/1946 286/456/1947 -f 341/462/1948 287/457/1949 340/463/1950 -f 340/463/1951 287/457/1952 339/464/1953 -f 339/464/1954 287/457/1955 284/465/1956 -f 344/458/1957 287/457/1958 342/466/1959 -f 342/466/1960 287/457/1961 343/467/1962 -f 287/457/1963 341/462/1964 343/467/1965 -f 339/464/1966 284/465/1967 293/468/1968 -f 284/465/1969 285/469/1970 293/468/1971 -f 293/468/1972 285/469/1973 292/470/1974 -f 219/275/1975 221/276/1976 332/392/1977 -f 221/276/1978 290/345/1979 332/392/1980 -f 214/268/1981 212/267/1982 332/392/1983 -f 332/392/1984 212/267/1985 219/275/1986 -f 344/404/1987 299/354/1988 363/438/1989 -f 363/438/1990 300/355/1991 345/405/1992 -f 345/405/1993 344/404/1994 363/438/1995 -f 300/355/1996 363/438/1997 277/332/1998 -f 363/438/1999 362/437/2000 277/332/2001 -f 277/332/2002 362/437/2003 217/271/2004 -f 362/437/2005 360/435/2006 217/271/2007 -f 217/271/2008 360/435/2009 216/272/2010 -f 360/435/2011 361/436/2012 216/272/2013 -f 216/272/2014 361/436/2015 222/277/2016 -f 322/380/2017 327/386/2018 323/382/2019 -f 327/386/2020 326/384/2021 323/382/2022 -f 320/471/2023 258/472/2024 259/473/2025 -f 265/320/2026 321/381/2027 323/382/2028 -f 315/415/2029 374/450/2030 373/448/2031 -f 336/395/2032 376/474/2033 374/450/2034 -f 376/474/2035 373/448/2036 374/450/2037 -f 243/298/2038 377/475/2039 336/395/2040 -f 377/475/2041 376/474/2042 336/395/2043 -f 244/299/2044 337/397/2045 243/298/2046 -f 337/397/2047 377/475/2048 243/298/2049 -f 322/432/2050 320/471/2051 358/431/2052 -f 320/471/2053 259/473/2054 358/431/2055 -f 336/395/2056 374/450/2057 335/396/2058 -f 214/268/2059 333/393/2060 335/396/2061 -f 259/476/2062 266/434/2063 359/190/2064 -f 266/434/2065 15/188/2066 359/190/2067 -f 378/477/2068 358/431/2069 359/478/2070 -f 358/431/2071 259/473/2072 359/478/2073 -f 379/479/2074 357/428/2075 378/477/2076 -f 357/428/2077 358/431/2078 378/477/2079 -f 356/427/2080 357/428/2081 380/480/2082 -f 357/428/2083 379/479/2084 380/480/2085 -f 355/422/2086 356/427/2087 381/481/2088 -f 356/427/2089 380/480/2090 381/481/2091 -f 354/421/2092 355/422/2093 382/482/2094 -f 355/422/2095 381/481/2096 382/482/2097 -f 13/177/2098 354/421/2099 196/243/2100 -f 354/421/2101 382/482/2102 196/243/2103 -f 383/483/2104 197/246/2105 382/484/2106 -f 197/246/2107 196/247/2108 382/484/2109 -f 384/485/2110 380/486/2111 385/487/2112 -f 380/486/2113 379/488/2114 385/487/2115 -f 383/483/2116 382/484/2117 386/489/2118 -f 382/484/2119 381/490/2120 386/489/2121 -f 384/485/2122 386/489/2123 380/486/2124 -f 386/489/2125 381/490/2126 380/486/2127 -f 14/192/2128 387/423/2129 359/190/2130 -f 388/424/2131 387/178/2132 204/259/2133 -f 387/178/2134 14/257/2135 204/259/2136 -f 201/248/2137 384/485/2138 199/249/2139 -f 384/485/2140 385/487/2141 199/249/2142 -f 200/244/2143 383/483/2144 198/252/2145 -f 383/483/2146 386/489/2147 198/252/2148 -f 378/430/2149 390/184/2150 379/488/2151 -f 202/187/2152 389/429/2153 204/259/2154 -f 389/429/2155 388/424/2156 204/259/2157 -f 389/429/2158 202/187/2159 390/184/2160 -f 202/187/2161 203/255/2162 390/184/2163 -f 385/487/2164 390/184/2165 199/249/2166 -f 390/184/2167 203/255/2168 199/249/2169 -f 198/252/2170 386/489/2171 201/248/2172 -f 386/489/2173 384/485/2174 201/248/2175 -f 390/184/2176 378/430/2177 389/183/2178 -f 390/184/2179 385/487/2180 379/488/2181 -f 387/178/2182 388/424/2183 359/433/2184 -f 378/430/2185 388/424/2186 389/183/2187 -f 197/246/2188 383/483/2189 200/244/2190 -f 388/424/2191 378/430/2192 359/433/2193 -f 465/491/2194 466/492/2195 467/493/2196 -f 469/494/2197 564/495/2198 550/496/2199 -f 424/497/2200 425/498/2201 391/499/2202 -f 391/499/2203 425/498/2204 401/500/2205 -f 391/499/2206 401/500/2207 393/501/2208 -f 393/501/2209 401/500/2210 403/502/2211 -f 403/502/2212 410/503/2213 393/501/2214 -f 393/501/2215 410/503/2216 394/504/2217 -f 396/505/2218 395/506/2219 406/507/2220 -f 406/507/2221 395/506/2222 405/508/2223 -f 397/509/2224 396/505/2225 407/510/2226 -f 407/510/2227 396/505/2228 406/507/2229 -f 394/504/2230 404/511/2231 398/512/2232 -f 398/512/2233 404/511/2234 399/513/2235 -f 399/513/2236 404/511/2237 408/514/2238 -f 558/515/2239 400/516/2240 557/517/2241 -f 557/517/2242 400/516/2243 409/518/2244 -f 426/519/2245 427/520/2246 400/516/2247 -f 400/516/2248 427/520/2249 409/518/2250 -f 392/521/2251 436/522/2252 402/523/2253 -f 402/523/2254 436/522/2255 437/524/2256 -f 429/525/2257 401/500/2258 425/498/2259 -f 403/502/2260 401/500/2261 430/526/2262 -f 430/526/2263 401/500/2264 429/525/2265 -f 430/526/2266 431/527/2267 403/502/2268 -f 403/502/2269 431/527/2270 410/503/2271 -f 406/507/2272 405/508/2273 445/528/2274 -f 445/528/2275 405/508/2276 444/529/2277 -f 407/510/2278 406/507/2279 446/530/2280 -f 446/530/2281 406/507/2282 445/528/2283 -f 408/514/2284 404/511/2285 433/531/2286 -f 433/531/2287 404/511/2288 432/532/2289 -f 557/517/2290 409/518/2291 556/533/2292 -f 556/533/2293 409/518/2294 435/534/2295 -f 409/518/2296 427/520/2297 435/534/2298 -f 435/534/2299 427/520/2300 434/535/2301 -f 496/536/2302 410/503/2303 495/537/2304 -f 495/537/2305 410/503/2306 431/527/2307 -f 447/538/2308 448/539/2309 424/497/2310 -f 424/497/2311 448/539/2312 425/498/2313 -f 399/513/2314 408/514/2315 426/519/2316 -f 426/519/2317 408/514/2318 427/520/2319 -f 427/520/2320 408/514/2321 434/535/2322 -f 434/535/2323 408/514/2324 433/531/2325 -f 472/540/2326 473/541/2327 474/542/2328 -f 474/542/2329 473/541/2330 465/491/2331 -f 473/541/2332 472/540/2333 476/543/2334 -f 476/543/2335 472/540/2336 475/544/2337 -f 563/545/2338 477/546/2339 479/547/2340 -f 477/546/2341 480/548/2342 479/547/2343 -f 480/548/2344 481/549/2345 479/547/2346 -f 476/543/2347 475/544/2348 483/550/2349 -f 483/550/2350 475/544/2351 482/551/2352 -f 484/552/2353 485/553/2354 487/554/2355 -f 487/554/2356 485/553/2357 486/555/2358 -f 488/556/2359 489/557/2360 484/552/2361 -f 484/552/2362 489/557/2363 485/553/2364 -f 567/558/2365 489/557/2366 488/556/2367 -f 489/557/2368 567/558/2369 469/494/2370 -f 488/556/2371 468/559/2372 567/558/2373 -f 435/534/2374 434/535/2375 442/560/2376 -f 529/561/2377 530/562/2378 528/563/2379 -f 528/563/2380 530/562/2381 527/564/2382 -f 532/565/2383 531/566/2384 529/561/2385 -f 529/561/2386 531/566/2387 530/562/2388 -f 500/567/2389 501/568/2390 549/569/2391 -f 501/568/2392 502/570/2393 549/569/2394 -f 486/555/2395 485/553/2396 503/571/2397 -f 502/570/2398 485/553/2399 549/569/2400 -f 476/543/2401 483/550/2402 505/572/2403 -f 505/572/2404 483/550/2405 504/573/2406 -f 473/541/2407 476/543/2408 506/574/2409 -f 506/574/2410 476/543/2411 505/572/2412 -f 465/491/2413 473/541/2414 507/575/2415 -f 507/575/2416 473/541/2417 506/574/2418 -f 466/492/2419 465/491/2420 508/576/2421 -f 508/576/2422 465/491/2423 507/575/2424 -f 412/577/2425 437/524/2426 411/578/2427 -f 411/578/2428 437/524/2429 436/522/2430 -f 413/579/2431 429/525/2432 412/577/2433 -f 412/577/2434 429/525/2435 437/524/2436 -f 414/580/2437 430/526/2438 413/579/2439 -f 413/579/2440 430/526/2441 429/525/2442 -f 415/581/2443 431/527/2444 414/580/2445 -f 414/580/2446 431/527/2447 430/526/2448 -f 431/527/2449 415/581/2450 495/537/2451 -f 495/537/2452 415/581/2453 494/582/2454 -f 420/583/2455 439/584/2456 432/532/2457 -f 562/585/2458 444/529/2459 417/586/2460 -f 417/586/2461 444/529/2462 416/587/2463 -f 416/587/2464 444/529/2465 441/588/2466 -f 418/589/2467 445/528/2468 562/585/2469 -f 419/590/2470 446/530/2471 418/589/2472 -f 418/589/2473 446/530/2474 445/528/2475 -f 447/591/2476 392/521/2477 448/539/2478 -f 448/539/2479 392/521/2480 402/523/2481 -f 402/523/2482 437/524/2483 429/525/2484 -f 474/542/2485 465/491/2486 492/592/2487 -f 483/550/2488 482/551/2489 486/555/2490 -f 486/555/2491 482/551/2492 487/554/2493 -f 483/550/2494 486/555/2495 504/573/2496 -f 504/573/2497 486/555/2498 503/571/2499 -f 394/504/2500 410/503/2501 496/536/2502 -f 451/593/2503 436/522/2504 452/594/2505 -f 452/594/2506 436/522/2507 392/521/2508 -f 452/594/2509 392/521/2510 450/595/2511 -f 450/595/2512 392/521/2513 447/591/2514 -f 558/515/2515 559/596/2516 400/516/2517 -f 400/516/2518 559/596/2519 453/597/2520 -f 455/598/2521 456/599/2522 393/501/2523 -f 393/501/2524 456/599/2525 391/499/2526 -f 393/501/2527 394/504/2528 455/598/2529 -f 455/598/2530 394/504/2531 457/600/2532 -f 454/601/2533 395/506/2534 458/602/2535 -f 458/602/2536 395/506/2537 396/505/2538 -f 459/603/2539 458/602/2540 397/509/2541 -f 397/509/2542 458/602/2543 396/505/2544 -f 460/604/2545 461/605/2546 399/513/2547 -f 399/513/2548 461/605/2549 398/512/2550 -f 460/604/2551 399/513/2552 462/606/2553 -f 462/606/2554 399/513/2555 426/519/2556 -f 462/606/2557 426/519/2558 453/597/2559 -f 453/597/2560 426/519/2561 400/516/2562 -f 451/593/2563 509/607/2564 436/522/2565 -f 436/522/2566 509/607/2567 411/578/2568 -f 463/608/2569 450/609/2570 424/497/2571 -f 424/497/2572 450/609/2573 447/538/2574 -f 456/599/2575 463/608/2576 391/499/2577 -f 391/499/2578 463/608/2579 424/497/2580 -f 457/600/2581 394/504/2582 461/605/2583 -f 461/605/2584 394/504/2585 398/512/2586 -f 452/610/2587 467/493/2588 451/611/2589 -f 451/611/2590 467/493/2591 466/492/2592 -f 450/612/2593 464/613/2594 452/610/2595 -f 452/610/2596 464/613/2597 467/493/2598 -f 559/614/2599 560/615/2600 453/616/2601 -f 453/616/2602 560/615/2603 468/559/2604 -f 472/540/2605 474/542/2606 455/617/2607 -f 455/617/2608 474/542/2609 456/618/2610 -f 472/540/2611 455/617/2612 475/544/2613 -f 475/544/2614 455/617/2615 457/619/2616 -f 458/620/2617 477/546/2618 454/621/2619 -f 454/621/2620 477/546/2621 470/622/2622 -f 480/548/2623 477/546/2624 459/623/2625 -f 459/623/2626 477/546/2627 458/620/2628 -f 482/551/2629 475/544/2630 457/619/2631 -f 460/624/2632 484/552/2633 461/625/2634 -f 461/625/2635 484/552/2636 487/554/2637 -f 462/626/2638 488/556/2639 460/624/2640 -f 460/624/2641 488/556/2642 484/552/2643 -f 488/556/2644 462/626/2645 468/559/2646 -f 468/559/2647 462/626/2648 453/616/2649 -f 466/492/2650 508/576/2651 451/611/2652 -f 451/611/2653 508/576/2654 509/627/2655 -f 492/592/2656 464/613/2657 463/628/2658 -f 463/628/2659 464/613/2660 450/629/2661 -f 474/542/2662 492/592/2663 456/618/2664 -f 456/618/2665 492/592/2666 463/628/2667 -f 487/554/2668 482/551/2669 461/625/2670 -f 461/625/2671 482/551/2672 457/619/2673 -f 567/558/2674 468/559/2675 561/630/2676 -f 561/630/2677 468/559/2678 560/615/2679 -f 420/583/2680 432/532/2681 494/582/2682 -f 494/582/2683 432/532/2684 495/537/2685 -f 404/511/2686 496/536/2687 432/532/2688 -f 432/532/2689 496/536/2690 495/537/2691 -f 394/504/2692 496/536/2693 404/511/2694 -f 425/498/2695 448/539/2696 429/525/2697 -f 448/539/2698 402/523/2699 429/525/2700 -f 465/491/2701 467/493/2702 464/613/2703 -f 465/491/2704 464/613/2705 492/592/2706 -f 414/580/2707 413/579/2708 521/631/2709 -f 521/631/2710 413/579/2711 523/632/2712 -f 413/579/2713 412/577/2714 523/632/2715 -f 523/632/2716 412/577/2717 411/633/2718 -f 421/634/2719 517/635/2720 422/636/2721 -f 422/636/2722 517/635/2723 515/637/2724 -f 422/636/2725 515/637/2726 428/638/2727 -f 428/638/2728 515/637/2729 513/639/2730 -f 421/634/2731 420/583/2732 517/635/2733 -f 517/635/2734 420/583/2735 518/640/2736 -f 518/640/2737 415/581/2738 521/631/2739 -f 521/631/2740 415/581/2741 414/580/2742 -f 494/582/2743 415/581/2744 518/640/2745 -f 420/583/2746 494/582/2747 518/640/2748 -f 428/638/2749 513/639/2750 423/641/2751 -f 423/641/2752 513/639/2753 512/642/2754 -f 481/643/2755 419/590/2756 479/644/2757 -f 479/644/2758 419/590/2759 418/589/2760 -f 562/585/2761 563/645/2762 418/589/2763 -f 418/589/2764 563/645/2765 479/644/2766 -f 416/587/2767 471/646/2768 417/586/2769 -f 417/586/2770 471/646/2771 478/647/2772 -f 471/646/2773 416/587/2774 490/648/2775 -f 490/648/2776 416/587/2777 497/649/2778 -f 546/650/2779 547/651/2780 441/588/2781 -f 441/588/2782 547/651/2783 497/649/2784 -f 563/545/2785 478/652/2786 493/653/2787 -f 564/495/2788 478/652/2789 471/654/2790 -f 547/651/2791 548/655/2792 497/649/2793 -f 497/649/2794 548/655/2795 490/648/2796 -f 441/588/2797 497/649/2798 416/587/2799 -f 491/656/2800 499/657/2801 532/565/2802 -f 532/565/2803 499/657/2804 531/566/2805 -f 511/658/2806 510/659/2807 513/639/2808 -f 513/639/2809 510/659/2810 512/642/2811 -f 514/660/2812 511/658/2813 515/637/2814 -f 515/637/2815 511/658/2816 513/639/2817 -f 516/661/2818 514/660/2819 517/635/2820 -f 517/635/2821 514/660/2822 515/637/2823 -f 517/635/2824 518/640/2825 516/661/2826 -f 516/661/2827 518/640/2828 519/662/2829 -f 518/640/2830 521/631/2831 519/662/2832 -f 519/662/2833 521/631/2834 520/663/2835 -f 522/664/2836 520/663/2837 523/632/2838 -f 523/632/2839 520/663/2840 521/631/2841 -f 501/568/2842 500/567/2843 511/665/2844 -f 511/665/2845 500/567/2846 510/666/2847 -f 502/570/2848 501/568/2849 514/667/2850 -f 514/667/2851 501/568/2852 511/665/2853 -f 503/571/2854 502/570/2855 516/668/2856 -f 516/668/2857 502/570/2858 514/667/2859 -f 519/669/2860 504/573/2861 516/668/2862 -f 516/668/2863 504/573/2864 503/571/2865 -f 519/669/2866 505/572/2867 504/573/2868 -f 506/574/2869 505/572/2870 520/670/2871 -f 520/670/2872 505/572/2873 519/669/2874 -f 522/671/2875 507/575/2876 520/670/2877 -f 520/670/2878 507/575/2879 506/574/2880 -f 507/575/2881 522/671/2882 508/576/2883 -f 508/576/2884 522/671/2885 509/672/2886 -f 510/659/2887 528/563/2888 512/642/2889 -f 512/642/2890 528/563/2891 527/564/2892 -f 525/673/2893 524/674/2894 528/675/2895 -f 528/675/2896 524/674/2897 529/676/2898 -f 438/677/2899 527/564/2900 449/678/2901 -f 449/678/2902 527/564/2903 530/562/2904 -f 449/678/2905 530/562/2906 443/679/2907 -f 443/679/2908 530/562/2909 531/566/2910 -f 524/674/2911 526/680/2912 529/676/2913 -f 529/676/2914 526/680/2915 532/681/2916 -f 491/682/2917 532/681/2918 526/680/2919 -f 443/679/2920 531/566/2921 498/683/2922 -f 498/683/2923 531/566/2924 499/657/2925 -f 500/567/2926 525/673/2927 510/666/2928 -f 510/666/2929 525/673/2930 528/675/2931 -f 423/641/2932 512/642/2933 438/677/2934 -f 438/677/2935 512/642/2936 527/564/2937 -f 568/684/2938 569/685/2939 549/569/2940 -f 490/686/2941 548/687/2942 550/496/2943 -f 564/495/2944 469/494/2945 561/630/2946 -f 411/633/2947 509/688/2948 523/632/2949 -f 523/632/2950 509/688/2951 522/664/2952 -f 534/689/2953 535/690/2954 554/691/2955 -f 535/690/2956 423/641/2957 554/691/2958 -f 423/641/2959 438/677/2960 554/691/2961 -f 449/678/2962 554/691/2963 438/677/2964 -f 533/692/2965 534/689/2966 552/693/2967 -f 552/693/2968 534/689/2969 551/694/2970 -f 538/695/2971 553/696/2972 442/560/2973 -f 442/560/2974 553/696/2975 555/697/2976 -f 439/584/2977 440/698/2978 433/531/2979 -f 440/698/2980 539/699/2981 433/531/2982 -f 433/531/2983 539/699/2984 434/535/2985 -f 428/638/2986 536/700/2987 422/636/2988 -f 439/584/2989 422/636/2990 440/698/2991 -f 422/636/2992 536/700/2993 440/698/2994 -f 423/641/2995 535/690/2996 428/638/2997 -f 428/638/2998 535/690/2999 536/700/3000 -f 440/698/3001 536/700/3002 540/701/3003 -f 540/701/3004 536/700/3005 541/702/3006 -f 533/692/3007 542/703/3008 534/689/3009 -f 534/689/3010 542/703/3011 543/704/3012 -f 535/690/3013 534/689/3014 543/704/3015 -f 536/700/3016 535/690/3017 541/702/3018 -f 537/705/3019 539/699/3020 544/706/3021 -f 538/695/3022 537/705/3023 545/707/3024 -f 533/692/3025 538/695/3026 542/703/3027 -f 542/703/3028 538/695/3029 545/707/3030 -f 440/698/3031 540/701/3032 539/699/3033 -f 539/699/3034 540/701/3035 544/706/3036 -f 553/696/3037 538/695/3038 552/693/3039 -f 552/693/3040 538/695/3041 533/692/3042 -f 498/683/3043 499/657/3044 546/650/3045 -f 546/650/3046 499/657/3047 547/651/3048 -f 491/656/3049 548/655/3050 499/657/3051 -f 499/657/3052 548/655/3053 547/651/3054 -f 539/699/3055 537/705/3056 434/535/3057 -f 538/695/3058 442/560/3059 537/705/3060 -f 442/560/3061 434/535/3062 537/705/3063 -f 422/636/3064 439/584/3065 421/634/3066 -f 439/584/3067 420/583/3068 421/634/3069 -f 439/584/3070 433/531/3071 432/532/3072 -f 485/553/3073 502/570/3074 503/571/3075 -f 489/557/3076 568/684/3077 549/569/3078 -f 568/684/3079 489/557/3080 469/494/3081 -f 485/553/3082 489/557/3083 549/569/3084 -f 544/706/3085 540/701/3086 537/705/3087 -f 535/690/3088 540/701/3089 541/702/3090 -f 542/703/3091 540/701/3092 543/704/3093 -f 543/704/3094 540/701/3095 535/690/3096 -f 537/705/3097 540/701/3098 545/707/3099 -f 545/707/3100 540/701/3101 542/703/3102 -f 552/693/3103 551/694/3104 498/683/3105 -f 498/683/3106 551/694/3107 443/679/3108 -f 546/650/3109 553/696/3110 498/683/3111 -f 498/683/3112 553/696/3113 552/693/3114 -f 551/694/3115 534/689/3116 554/691/3117 -f 449/678/3118 551/694/3119 554/691/3120 -f 551/694/3121 449/678/3122 443/679/3123 -f 441/588/3124 555/697/3125 546/650/3126 -f 546/650/3127 555/697/3128 553/696/3129 -f 556/533/3130 435/534/3131 555/697/3132 -f 555/697/3133 435/534/3134 442/560/3135 -f 405/508/3136 557/517/3137 444/529/3138 -f 444/529/3139 557/517/3140 556/533/3141 -f 395/506/3142 558/515/3143 405/508/3144 -f 405/508/3145 558/515/3146 557/517/3147 -f 395/506/3148 454/601/3149 558/515/3150 -f 558/515/3151 454/601/3152 559/596/3153 -f 454/621/3154 470/622/3155 559/614/3156 -f 559/614/3157 470/622/3158 560/615/3159 -f 470/622/3160 493/653/3161 560/615/3162 -f 560/615/3163 493/653/3164 561/630/3165 -f 444/529/3166 556/533/3167 441/588/3168 -f 441/588/3169 556/533/3170 555/697/3171 -f 478/652/3172 564/495/3173 493/653/3174 -f 444/529/3175 562/585/3176 445/528/3177 -f 563/645/3178 562/585/3179 478/647/3180 -f 478/647/3181 562/585/3182 417/586/3183 -f 563/545/3184 493/653/3185 477/546/3186 -f 477/546/3187 493/653/3188 470/622/3189 -f 493/653/3190 564/495/3191 561/630/3192 -f 490/686/3193 564/495/3194 471/654/3195 -f 564/495/3196 490/686/3197 550/496/3198 -f 550/496/3199 548/687/3200 565/708/3201 -f 566/709/3202 548/687/3203 491/682/3204 -f 548/687/3205 566/709/3206 565/708/3207 -f 491/682/3208 526/680/3209 566/709/3210 -f 469/494/3211 567/558/3212 561/630/3213 -f 550/496/3214 568/684/3215 469/494/3216 -f 568/684/3217 550/496/3218 565/708/3219 -f 565/708/3220 566/709/3221 568/684/3222 -f 566/709/3223 569/685/3224 568/684/3225 -f 526/680/3226 569/685/3227 566/709/3228 -f 569/685/3229 526/680/3230 524/674/3231 -f 525/673/3232 569/685/3233 524/674/3234 -f 500/567/3235 569/685/3236 525/673/3237 -f 549/569/3238 569/685/3239 500/567/3240 -f 570/710/3241 572/711/3242 571/712/3243 -f 573/713/3244 575/714/3245 574/715/3246 -f 576/716/3247 578/717/3248 577/718/3249 -f 578/717/3250 579/719/3251 577/718/3252 -f 578/717/3253 580/720/3254 579/719/3255 -f 580/720/3256 581/721/3257 579/719/3258 -f 581/721/3259 580/720/3260 582/722/3261 -f 580/720/3262 583/723/3263 582/722/3264 -f 584/724/3265 586/725/3266 585/726/3267 -f 586/725/3268 587/727/3269 585/726/3270 -f 397/509/3271 407/510/3272 584/724/3273 -f 407/510/3274 586/725/3275 584/724/3276 -f 583/723/3277 589/728/3278 588/729/3279 -f 589/728/3280 590/730/3281 588/729/3282 -f 590/730/3283 591/731/3284 588/729/3285 -f 592/732/3286 594/733/3287 593/734/3288 -f 594/733/3289 595/735/3290 593/734/3291 -f 596/736/3292 593/734/3293 597/737/3294 -f 593/734/3295 595/735/3296 597/737/3297 -f 598/738/3298 600/739/3299 599/740/3300 -f 600/739/3301 601/741/3302 599/740/3303 -f 602/742/3304 577/718/3305 579/719/3306 -f 581/721/3307 603/743/3308 579/719/3309 -f 603/743/3310 602/742/3311 579/719/3312 -f 603/743/3313 581/721/3314 604/744/3315 -f 581/721/3316 582/722/3317 604/744/3318 -f 586/725/3319 605/745/3320 587/727/3321 -f 605/745/3322 606/746/3323 587/727/3324 -f 407/510/3325 446/530/3326 586/725/3327 -f 446/530/3328 605/745/3329 586/725/3330 -f 591/731/3331 607/747/3332 588/729/3333 -f 607/747/3334 608/748/3335 588/729/3336 -f 594/733/3337 609/749/3338 595/735/3339 -f 609/749/3340 610/750/3341 595/735/3342 -f 595/735/3343 610/750/3344 597/737/3345 -f 610/750/3346 611/751/3347 597/737/3348 -f 612/752/3349 613/753/3350 582/722/3351 -f 613/753/3352 604/744/3353 582/722/3354 -f 614/754/3355 576/716/3356 615/755/3357 -f 576/716/3358 577/718/3359 615/755/3360 -f 590/730/3361 596/736/3362 591/731/3363 -f 596/736/3364 597/737/3365 591/731/3366 -f 597/737/3367 611/751/3368 591/731/3369 -f 611/751/3370 607/747/3371 591/731/3372 -f 616/756/3373 618/757/3374 617/758/3375 -f 618/757/3376 570/710/3377 617/758/3378 -f 617/758/3379 619/759/3380 616/756/3381 -f 619/759/3382 620/760/3383 616/756/3384 -f 621/761/3385 623/762/3386 622/763/3387 -f 622/763/3388 623/762/3389 480/548/3390 -f 480/548/3391 623/762/3392 481/549/3393 -f 619/759/3394 624/764/3395 620/760/3396 -f 624/764/3397 625/765/3398 620/760/3399 -f 626/766/3400 628/767/3401 627/768/3402 -f 628/767/3403 629/769/3404 627/768/3405 -f 630/770/3406 626/766/3407 631/771/3408 -f 626/766/3409 627/768/3410 631/771/3411 -f 632/772/3412 630/770/3413 631/771/3414 -f 631/771/3415 573/713/3416 632/772/3417 -f 630/770/3418 632/772/3419 633/773/3420 -f 610/750/3421 634/774/3422 611/751/3423 -f 635/775/3424 637/776/3425 636/777/3426 -f 637/776/3427 638/778/3428 636/777/3429 -f 639/779/3430 635/775/3431 640/780/3432 -f 635/775/3433 636/777/3434 640/780/3435 -f 641/781/3436 643/782/3437 642/783/3438 -f 642/783/3439 643/782/3440 644/784/3441 -f 629/769/3442 645/785/3443 627/768/3444 -f 644/784/3445 643/782/3446 627/768/3447 -f 619/759/3448 646/786/3449 624/764/3450 -f 646/786/3451 647/787/3452 624/764/3453 -f 617/758/3454 648/788/3455 619/759/3456 -f 648/788/3457 646/786/3458 619/759/3459 -f 570/710/3460 649/789/3461 617/758/3462 -f 649/789/3463 648/788/3464 617/758/3465 -f 571/712/3466 650/790/3467 570/710/3468 -f 650/790/3469 649/789/3470 570/710/3471 -f 651/791/3472 652/792/3473 601/741/3474 -f 652/792/3475 599/740/3476 601/741/3477 -f 653/793/3478 651/791/3479 602/742/3480 -f 651/791/3481 601/741/3482 602/742/3483 -f 654/794/3484 653/793/3485 603/743/3486 -f 653/793/3487 602/742/3488 603/743/3489 -f 655/795/3490 654/794/3491 604/744/3492 -f 654/794/3493 603/743/3494 604/744/3495 -f 604/744/3496 613/753/3497 655/795/3498 -f 613/753/3499 656/796/3500 655/795/3501 -f 657/797/3502 608/748/3503 658/798/3504 -f 659/799/3505 660/800/3506 606/746/3507 -f 660/800/3508 661/801/3509 606/746/3510 -f 661/801/3511 662/802/3512 606/746/3513 -f 663/803/3514 659/799/3515 605/745/3516 -f 419/590/3517 663/803/3518 446/530/3519 -f 663/803/3520 605/745/3521 446/530/3522 -f 614/804/3523 615/755/3524 598/738/3525 -f 615/755/3526 600/739/3527 598/738/3528 -f 600/739/3529 602/742/3530 601/741/3531 -f 618/757/3532 664/805/3533 570/710/3534 -f 624/764/3535 629/769/3536 625/765/3537 -f 629/769/3538 628/767/3539 625/765/3540 -f 624/764/3541 647/787/3542 629/769/3543 -f 647/787/3544 645/785/3545 629/769/3546 -f 583/723/3547 612/752/3548 582/722/3549 -f 665/806/3550 666/807/3551 599/740/3552 -f 666/807/3553 598/738/3554 599/740/3555 -f 666/807/3556 667/808/3557 598/738/3558 -f 667/808/3559 614/804/3560 598/738/3561 -f 592/732/3562 593/734/3563 668/809/3564 -f 593/734/3565 669/810/3566 668/809/3567 -f 670/811/3568 580/720/3569 671/812/3570 -f 580/720/3571 578/717/3572 671/812/3573 -f 580/720/3574 670/811/3575 583/723/3576 -f 670/811/3577 672/813/3578 583/723/3579 -f 673/814/3580 674/815/3581 585/726/3582 -f 674/815/3583 584/724/3584 585/726/3585 -f 459/603/3586 397/509/3587 674/815/3588 -f 397/509/3589 584/724/3590 674/815/3591 -f 675/816/3592 590/730/3593 676/817/3594 -f 590/730/3595 589/728/3596 676/817/3597 -f 675/816/3598 677/818/3599 590/730/3600 -f 677/818/3601 596/736/3602 590/730/3603 -f 677/818/3604 669/810/3605 596/736/3606 -f 669/810/3607 593/734/3608 596/736/3609 -f 665/806/3610 599/740/3611 678/819/3612 -f 599/740/3613 652/792/3614 678/819/3615 -f 679/820/3616 576/716/3617 667/821/3618 -f 576/716/3619 614/754/3620 667/821/3621 -f 671/812/3622 578/717/3623 679/820/3624 -f 578/717/3625 576/716/3626 679/820/3627 -f 672/813/3628 676/817/3629 583/723/3630 -f 676/817/3631 589/728/3632 583/723/3633 -f 666/822/3634 665/823/3635 572/711/3636 -f 665/823/3637 571/712/3638 572/711/3639 -f 667/824/3640 666/822/3641 680/825/3642 -f 666/822/3643 572/711/3644 680/825/3645 -f 668/826/3646 669/827/3647 681/828/3648 -f 669/827/3649 633/773/3650 681/828/3651 -f 616/756/3652 670/829/3653 618/757/3654 -f 670/829/3655 671/830/3656 618/757/3657 -f 616/756/3658 620/760/3659 670/829/3660 -f 620/760/3661 672/831/3662 670/829/3663 -f 674/832/3664 673/833/3665 622/763/3666 -f 673/833/3667 682/834/3668 622/763/3669 -f 480/548/3670 459/623/3671 622/763/3672 -f 459/623/3673 674/832/3674 622/763/3675 -f 625/765/3676 672/831/3677 620/760/3678 -f 675/835/3679 676/836/3680 626/766/3681 -f 676/836/3682 628/767/3683 626/766/3684 -f 677/837/3685 675/835/3686 630/770/3687 -f 675/835/3688 626/766/3689 630/770/3690 -f 630/770/3691 633/773/3692 677/837/3693 -f 633/773/3694 669/827/3695 677/837/3696 -f 571/712/3697 665/823/3698 650/790/3699 -f 665/823/3700 678/838/3701 650/790/3702 -f 664/805/3703 679/839/3704 680/825/3705 -f 679/839/3706 667/840/3707 680/825/3708 -f 618/757/3709 671/830/3710 664/805/3711 -f 671/830/3712 679/839/3713 664/805/3714 -f 628/767/3715 676/836/3716 625/765/3717 -f 676/836/3718 672/831/3719 625/765/3720 -f 632/772/3721 683/841/3722 633/773/3723 -f 683/841/3724 681/828/3725 633/773/3726 -f 657/797/3727 656/796/3728 608/748/3729 -f 656/796/3730 613/753/3731 608/748/3732 -f 588/729/3733 608/748/3734 612/752/3735 -f 608/748/3736 613/753/3737 612/752/3738 -f 583/723/3739 588/729/3740 612/752/3741 -f 577/718/3742 602/742/3743 615/755/3744 -f 615/755/3745 602/742/3746 600/739/3747 -f 570/710/3748 680/825/3749 572/711/3750 -f 570/710/3751 664/805/3752 680/825/3753 -f 654/794/3754 684/842/3755 653/793/3756 -f 684/842/3757 685/843/3758 653/793/3759 -f 653/793/3760 685/843/3761 651/791/3762 -f 685/843/3763 652/844/3764 651/791/3765 -f 686/845/3766 688/846/3767 687/847/3768 -f 688/846/3769 689/848/3770 687/847/3771 -f 688/846/3772 690/849/3773 689/848/3774 -f 690/849/3775 691/850/3776 689/848/3777 -f 686/845/3778 687/847/3779 657/797/3780 -f 687/847/3781 692/851/3782 657/797/3783 -f 692/851/3784 684/842/3785 655/795/3786 -f 684/842/3787 654/794/3788 655/795/3789 -f 656/796/3790 692/851/3791 655/795/3792 -f 657/797/3793 692/851/3794 656/796/3795 -f 690/849/3796 693/852/3797 691/850/3798 -f 693/852/3799 694/853/3800 691/850/3801 -f 481/643/3802 623/854/3803 419/590/3804 -f 623/854/3805 663/803/3806 419/590/3807 -f 659/799/3808 663/803/3809 621/855/3810 -f 663/803/3811 623/854/3812 621/855/3813 -f 661/801/3814 660/800/3815 695/856/3816 -f 660/800/3817 696/857/3818 695/856/3819 -f 695/856/3820 697/858/3821 661/801/3822 -f 697/858/3823 698/859/3824 661/801/3825 -f 699/860/3826 662/802/3827 700/861/3828 -f 662/802/3829 698/859/3830 700/861/3831 -f 621/761/3832 701/862/3833 696/863/3834 -f 574/715/3835 695/864/3836 696/863/3837 -f 700/861/3838 698/859/3839 702/865/3840 -f 698/859/3841 697/858/3842 702/865/3843 -f 662/802/3844 661/801/3845 698/859/3846 -f 703/866/3847 639/779/3848 704/867/3849 -f 639/779/3850 640/780/3851 704/867/3852 -f 705/868/3853 691/850/3854 706/869/3855 -f 691/850/3856 694/853/3857 706/869/3858 -f 707/870/3859 689/848/3860 705/868/3861 -f 689/848/3862 691/850/3863 705/868/3864 -f 708/871/3865 687/847/3866 707/870/3867 -f 687/847/3868 689/848/3869 707/870/3870 -f 687/847/3871 708/871/3872 692/851/3873 -f 708/871/3874 709/872/3875 692/851/3876 -f 692/851/3877 709/872/3878 684/842/3879 -f 709/872/3880 710/873/3881 684/842/3882 -f 711/874/3883 685/843/3884 710/873/3885 -f 685/843/3886 684/842/3887 710/873/3888 -f 642/783/3889 705/875/3890 641/781/3891 -f 705/875/3892 706/876/3893 641/781/3894 -f 644/784/3895 707/877/3896 642/783/3897 -f 707/877/3898 705/875/3899 642/783/3900 -f 645/785/3901 708/878/3902 644/784/3903 -f 708/878/3904 707/877/3905 644/784/3906 -f 709/879/3907 708/878/3908 647/787/3909 -f 708/878/3910 645/785/3911 647/787/3912 -f 709/879/3913 647/787/3914 646/786/3915 -f 648/788/3916 710/880/3917 646/786/3918 -f 710/880/3919 709/879/3920 646/786/3921 -f 711/881/3922 710/880/3923 649/789/3924 -f 710/880/3925 648/788/3926 649/789/3927 -f 649/789/3928 650/790/3929 711/881/3930 -f 650/790/3931 678/882/3932 711/881/3933 -f 706/869/3934 694/853/3935 637/776/3936 -f 694/853/3937 638/778/3938 637/776/3939 -f 712/883/3940 637/884/3941 713/885/3942 -f 637/884/3943 635/886/3944 713/885/3945 -f 714/887/3946 715/888/3947 638/778/3948 -f 715/888/3949 636/777/3950 638/778/3951 -f 715/888/3952 716/889/3953 636/777/3954 -f 716/889/3955 640/780/3956 636/777/3957 -f 713/885/3958 635/886/3959 717/890/3960 -f 635/886/3961 639/891/3962 717/890/3963 -f 703/892/3964 717/890/3965 639/891/3966 -f 716/889/3967 718/893/3968 640/780/3969 -f 718/893/3970 704/867/3971 640/780/3972 -f 641/781/3973 706/876/3974 712/883/3975 -f 706/876/3976 637/884/3977 712/883/3978 -f 693/852/3979 714/887/3980 694/853/3981 -f 714/887/3982 638/778/3983 694/853/3984 -f 719/894/3985 643/782/3986 720/895/3987 -f 697/896/3988 575/714/3989 702/897/3990 -f 574/715/3991 683/841/3992 573/713/3993 -f 652/844/3994 685/843/3995 678/898/3996 -f 685/843/3997 711/874/3998 678/898/3999 -f 721/899/4000 723/900/4001 722/901/4002 -f 722/901/4003 723/900/4004 693/852/4005 -f 693/852/4006 723/900/4007 714/887/4008 -f 715/888/4009 714/887/4010 723/900/4011 -f 724/902/4012 725/903/4013 721/899/4014 -f 725/903/4015 726/904/4016 721/899/4017 -f 727/905/4018 634/774/4019 728/906/4020 -f 634/774/4021 729/907/4022 728/906/4023 -f 658/798/4024 607/747/4025 730/908/4026 -f 730/908/4027 607/747/4028 731/909/4029 -f 607/747/4030 611/751/4031 731/909/4032 -f 690/849/4033 688/846/4034 732/910/4035 -f 658/798/4036 730/908/4037 688/846/4038 -f 688/846/4039 730/908/4040 732/910/4041 -f 693/852/4042 690/849/4043 722/901/4044 -f 690/849/4045 732/910/4046 722/901/4047 -f 730/908/4048 733/911/4049 732/910/4050 -f 733/911/4051 734/912/4052 732/910/4053 -f 724/902/4054 721/899/4055 735/913/4056 -f 721/899/4057 736/914/4058 735/913/4059 -f 722/901/4060 736/914/4061 721/899/4062 -f 732/910/4063 734/912/4064 722/901/4065 -f 737/915/4066 738/916/4067 731/909/4068 -f 727/905/4069 739/917/4070 737/915/4071 -f 724/902/4072 735/913/4073 727/905/4074 -f 735/913/4075 739/917/4076 727/905/4077 -f 730/908/4078 731/909/4079 733/911/4080 -f 731/909/4081 738/916/4082 733/911/4083 -f 728/906/4084 725/903/4085 727/905/4086 -f 725/903/4087 724/902/4088 727/905/4089 -f 718/893/4090 699/860/4091 704/867/4092 -f 699/860/4093 700/861/4094 704/867/4095 -f 703/866/4096 704/867/4097 702/865/4098 -f 704/867/4099 700/861/4100 702/865/4101 -f 731/909/4102 611/751/4103 737/915/4104 -f 727/905/4105 737/915/4106 634/774/4107 -f 634/774/4108 737/915/4109 611/751/4110 -f 688/846/4111 686/845/4112 658/798/4113 -f 658/798/4114 686/845/4115 657/797/4116 -f 658/798/4117 608/748/4118 607/747/4119 -f 627/768/4120 645/785/4121 644/784/4122 -f 631/771/4123 643/782/4124 719/894/4125 -f 719/894/4126 573/713/4127 631/771/4128 -f 627/768/4129 643/782/4130 631/771/4131 -f 738/916/4132 737/915/4133 733/911/4134 -f 722/901/4135 734/912/4136 733/911/4137 -f 735/913/4138 736/914/4139 733/911/4140 -f 736/914/4141 722/901/4142 733/911/4143 -f 737/915/4144 739/917/4145 733/911/4146 -f 739/917/4147 735/913/4148 733/911/4149 -f 725/903/4150 718/893/4151 726/904/4152 -f 718/893/4153 716/889/4154 726/904/4155 -f 699/860/4156 718/893/4157 728/906/4158 -f 718/893/4159 725/903/4160 728/906/4161 -f 726/904/4162 723/900/4163 721/899/4164 -f 715/888/4165 723/900/4166 726/904/4167 -f 726/904/4168 716/889/4169 715/888/4170 -f 662/802/4171 699/860/4172 729/907/4173 -f 699/860/4174 728/906/4175 729/907/4176 -f 609/749/4177 729/907/4178 610/750/4179 -f 729/907/4180 634/774/4181 610/750/4182 -f 587/727/4183 606/746/4184 594/733/4185 -f 606/746/4186 609/749/4187 594/733/4188 -f 585/726/4189 587/727/4190 592/732/4191 -f 587/727/4192 594/733/4193 592/732/4194 -f 585/726/4195 592/732/4196 673/814/4197 -f 592/732/4198 668/809/4199 673/814/4200 -f 673/833/4201 668/826/4202 682/834/4203 -f 668/826/4204 681/828/4205 682/834/4206 -f 682/834/4207 681/828/4208 701/862/4209 -f 681/828/4210 683/841/4211 701/862/4212 -f 606/746/4213 662/802/4214 609/749/4215 -f 662/802/4216 729/907/4217 609/749/4218 -f 696/863/4219 701/862/4220 574/715/4221 -f 606/746/4222 605/745/4223 659/799/4224 -f 621/855/4225 696/857/4226 659/799/4227 -f 696/857/4228 660/800/4229 659/799/4230 -f 621/761/4231 622/763/4232 701/862/4233 -f 622/763/4234 682/834/4235 701/862/4236 -f 701/862/4237 683/841/4238 574/715/4239 -f 697/896/4240 695/864/4241 574/715/4242 -f 574/715/4243 575/714/4244 697/896/4245 -f 575/714/4246 740/918/4247 702/897/4248 -f 741/919/4249 703/892/4250 702/897/4251 -f 702/897/4252 740/918/4253 741/919/4254 -f 703/892/4255 741/919/4256 717/890/4257 -f 573/713/4258 683/841/4259 632/772/4260 -f 575/714/4261 573/713/4262 719/894/4263 -f 719/894/4264 740/918/4265 575/714/4266 -f 740/918/4267 719/894/4268 741/919/4269 -f 741/919/4270 719/894/4271 720/895/4272 -f 717/890/4273 741/919/4274 720/895/4275 -f 720/895/4276 713/885/4277 717/890/4278 -f 712/883/4279 713/885/4280 720/895/4281 -f 641/781/4282 712/883/4283 720/895/4284 -f 643/782/4285 641/781/4286 720/895/4287 -f 772/920/4288 845/921/4289 940/922/4290 -f 940/922/4291 845/921/4292 939/923/4293 -f 774/924/4294 773/925/4295 942/926/4296 -f 942/926/4297 773/925/4298 941/927/4299 -f 775/928/4300 774/924/4301 943/929/4302 -f 943/929/4303 774/924/4304 942/926/4305 -f 776/930/4306 775/928/4307 944/931/4308 -f 944/931/4309 775/928/4310 943/929/4311 -f 778/932/4312 777/933/4313 946/934/4314 -f 946/934/4315 777/933/4316 945/935/4317 -f 743/936/4318 778/932/4319 769/937/4320 -f 769/937/4321 778/932/4322 946/934/4323 -f 773/925/4324 774/924/4325 779/938/4326 -f 779/938/4327 774/924/4328 780/939/4329 -f 774/924/4330 775/928/4331 780/939/4332 -f 780/939/4333 775/928/4334 781/940/4335 -f 775/928/4336 776/930/4337 781/940/4338 -f 781/940/4339 776/930/4340 782/941/4341 -f 783/942/4342 777/933/4343 784/943/4344 -f 784/943/4345 777/933/4346 778/932/4347 -f 743/936/4348 754/944/4349 778/932/4350 -f 778/932/4351 754/944/4352 784/943/4353 -f 786/945/4354 787/946/4355 785/947/4356 -f 785/947/4357 787/946/4358 788/948/4359 -f 787/946/4360 790/949/4361 788/948/4362 -f 788/948/4363 790/949/4364 789/950/4365 -f 790/949/4366 792/951/4367 789/950/4368 -f 789/950/4369 792/951/4370 791/952/4371 -f 792/951/4372 794/953/4373 791/952/4374 -f 791/952/4375 794/953/4376 793/954/4377 -f 796/955/4378 795/956/4379 797/957/4380 -f 797/957/4381 795/956/4382 798/958/4383 -f 744/959/4384 745/960/4385 795/956/4386 -f 795/956/4387 745/960/4388 798/958/4389 -f 785/947/4390 788/948/4391 799/961/4392 -f 799/961/4393 788/948/4394 800/962/4395 -f 788/948/4396 789/950/4397 800/962/4398 -f 800/962/4399 789/950/4400 801/963/4401 -f 789/950/4402 791/952/4403 801/963/4404 -f 801/963/4405 791/952/4406 802/964/4407 -f 791/952/4408 793/954/4409 802/964/4410 -f 802/964/4411 793/954/4412 803/965/4413 -f 797/957/4414 798/958/4415 804/966/4416 -f 804/966/4417 798/958/4418 805/967/4419 -f 745/960/4420 768/968/4421 798/958/4422 -f 798/958/4423 768/968/4424 805/967/4425 -f 806/969/4426 807/970/4427 809/971/4428 -f 809/971/4429 807/970/4430 808/972/4431 -f 811/973/4432 810/974/4433 808/972/4434 -f 808/972/4435 810/974/4436 809/971/4437 -f 811/973/4438 813/975/4439 810/974/4440 -f 810/974/4441 813/975/4442 812/976/4443 -f 816/977/4444 746/978/4445 817/979/4446 -f 817/979/4447 746/978/4448 747/980/4449 -f 819/981/4450 809/971/4451 820/982/4452 -f 820/982/4453 809/971/4454 810/974/4455 -f 820/982/4456 810/974/4457 821/983/4458 -f 821/983/4459 810/974/4460 812/976/4461 -f 962/984/4462 963/985/4463 935/986/4464 -f 935/986/4465 963/985/4466 814/987/4467 -f 814/987/4468 817/979/4469 935/986/4470 -f 935/986/4471 817/979/4472 824/988/4473 -f 817/979/4474 747/980/4475 824/988/4476 -f 824/988/4477 747/980/4478 748/989/4479 -f 932/990/4480 933/991/4481 819/981/4482 -f 1019/992/4483 933/991/4484 818/993/4485 -f 819/981/4486 820/982/4487 932/990/4488 -f 932/990/4489 820/982/4490 930/994/4491 -f 820/982/4492 821/983/4493 930/994/4494 -f 930/994/4495 821/983/4496 931/995/4497 -f 965/996/4498 822/997/4499 966/998/4500 -f 966/998/4501 822/997/4502 929/999/4503 -f 823/1000/4504 928/1001/4505 822/997/4506 -f 822/997/4507 928/1001/4508 929/999/4509 -f 748/989/4510 767/1002/4511 824/988/4512 -f 824/988/4513 767/1002/4514 927/1003/4515 -f 825/1004/4516 827/1005/4517 826/1006/4518 -f 826/1006/4519 827/1005/4520 828/1007/4521 -f 827/1005/4522 830/1008/4523 828/1007/4524 -f 828/1007/4525 830/1008/4526 829/1009/4527 -f 830/1008/4528 832/1010/4529 829/1009/4530 -f 829/1009/4531 832/1010/4532 831/1011/4533 -f 833/1012/4534 826/1006/4535 834/1013/4536 -f 834/1013/4537 826/1006/4538 828/1007/4539 -f 829/1009/4540 835/1014/4541 828/1007/4542 -f 828/1007/4543 835/1014/4544 834/1013/4545 -f 831/1011/4546 836/1015/4547 829/1009/4548 -f 829/1009/4549 836/1015/4550 835/1014/4551 -f 831/1011/4552 838/1016/4553 836/1015/4554 -f 836/1015/4555 838/1016/4556 837/1017/4557 -f 838/1016/4558 840/1018/4559 837/1017/4560 -f 837/1017/4561 840/1018/4562 839/1019/4563 -f 841/1020/4564 750/1021/4565 842/1022/4566 -f 842/1022/4567 750/1021/4568 751/1023/4569 -f 920/1024/4570 833/1012/4571 863/1025/4572 -f 863/1025/4573 833/1012/4574 834/1013/4575 -f 835/1014/4576 864/1026/4577 834/1013/4578 -f 834/1013/4579 864/1026/4580 863/1025/4581 -f 836/1015/4582 865/1027/4583 835/1014/4584 -f 835/1014/4585 865/1027/4586 864/1026/4587 -f 837/1017/4588 866/1028/4589 836/1015/4590 -f 836/1015/4591 866/1028/4592 865/1027/4593 -f 837/1017/4594 839/1019/4595 866/1028/4596 -f 866/1028/4597 839/1019/4598 867/1029/4599 -f 842/1022/4600 751/1023/4601 868/1030/4602 -f 868/1030/4603 751/1023/4604 752/1031/4605 -f 904/1032/4606 818/993/4607 934/1033/4608 -f 934/1033/4609 818/993/4610 933/991/4611 -f 825/1004/4612 826/1006/4613 900/1034/4614 -f 900/1034/4615 826/1006/4616 901/1035/4617 -f 833/1012/4618 902/1036/4619 903/2571/4620 -f 843/1038/4621 845/921/4622 844/1039/4623 -f 904/1032/4624 905/1040/4625 861/1041/4626 -f 861/1041/4627 905/1040/4628 862/1042/4629 -f 905/1040/4630 906/1043/4631 862/1042/4632 -f 904/1032/4633 846/1044/4634 818/993/4635 -f 847/1045/4636 753/1046/4637 816/977/4638 -f 816/977/4639 753/1046/4640 746/978/4641 -f 948/1047/4642 947/1048/4643 964/1049/4644 -f 964/1049/4645 947/1048/4646 815/1050/4647 -f 848/1051/4648 849/1052/4649 811/973/4650 -f 811/973/4651 849/1052/4652 813/975/4653 -f 850/1053/4654 848/1051/4655 808/972/4656 -f 808/972/4657 848/1051/4658 811/973/4659 -f 851/1054/4660 850/1053/4661 807/970/4662 -f 807/970/4663 850/1053/4664 808/972/4665 -f 844/1039/4666 854/1055/4667 852/1056/4668 -f 852/1056/4669 854/1055/4670 853/1057/4671 -f 856/1058/4672 786/945/4673 785/947/4674 -f 786/945/4675 856/1058/4676 855/1059/4677 -f 785/947/4678 799/961/4679 856/1058/4680 -f 856/1058/4681 799/961/4682 857/1060/4683 -f 807/970/4684 859/1061/4685 858/1062/4686 -f 859/1061/4687 807/970/4688 806/969/4689 -f 860/1063/4690 807/970/4691 858/1062/4692 -f 807/970/4693 860/1063/4694 851/1054/4695 -f 784/943/4696 754/944/4697 795/956/4698 -f 795/956/4699 754/944/4700 744/959/4701 -f 783/942/4702 784/943/4703 796/955/4704 -f 796/955/4705 784/943/4706 795/956/4707 -f 781/940/4708 782/941/4709 792/951/4710 -f 792/951/4711 782/941/4712 794/953/4713 -f 780/939/4714 781/940/4715 790/949/4716 -f 790/949/4717 781/940/4718 792/951/4719 -f 779/938/4720 780/939/4721 787/946/4722 -f 787/946/4723 780/939/4724 790/949/4725 -f 854/1055/4726 779/938/4727 786/945/4728 -f 786/945/4729 779/938/4730 787/946/4731 -f 854/1055/4732 786/945/4733 853/1057/4734 -f 853/1057/4735 786/945/4736 855/1059/4737 -f 862/1064/4738 950/1065/4739 861/1066/4740 -f 861/1066/4741 950/1065/4742 949/1067/4743 -f 852/1068/4744 853/1069/4745 1020/1070/4746 -f 951/1071/4747 853/1069/4748 952/1072/4749 -f 855/1073/4750 856/1074/4751 953/1075/4752 -f 953/1075/4753 856/1074/4754 954/1076/4755 -f 856/1074/4756 857/1077/4757 954/1076/4758 -f 954/1076/4759 857/1077/4760 955/1078/4761 -f 859/1079/4762 957/1080/4763 858/1081/4764 -f 858/1081/4765 957/1080/4766 956/1082/4767 -f 861/1083/4768 949/1084/4769 859/1079/4770 -f 859/1079/4771 949/1084/4772 957/1080/4773 -f 858/1081/4774 956/1082/4775 860/1085/4776 -f 860/1085/4777 956/1082/4778 958/1086/4779 -f 853/1069/4780 855/1073/4781 952/1072/4782 -f 952/1072/4783 855/1073/4784 953/1075/4785 -f 861/1041/4786 846/1044/4787 904/1032/4788 -f 846/1044/4789 859/1061/4790 806/969/4791 -f 859/1061/4792 846/1044/4793 861/1041/4794 -f 862/1042/4795 906/1043/4796 926/1087/4797 -f 926/1087/4798 906/1043/4799 925/1088/4800 -f 950/1065/4801 862/1064/4802 959/1089/4803 -f 959/1089/4804 862/1064/4805 926/1090/4806 -f 843/1038/4807 844/1039/4808 852/1056/4809 -f 854/1055/4810 844/1039/4811 772/920/4812 -f 772/920/4813 844/1039/4814 845/921/4815 -f 773/925/4816 772/920/4817 941/927/4818 -f 941/927/4819 772/920/4820 940/922/4821 -f 863/1025/4822 864/1026/4823 869/1091/4824 -f 865/1027/4825 872/1092/4826 864/1026/4827 -f 864/1026/4828 872/1092/4829 869/1091/4830 -f 866/1028/4831 876/1093/4832 865/1027/4833 -f 865/1027/4834 876/1093/4835 872/1092/4836 -f 866/1028/4837 867/1029/4838 876/1093/4839 -f 876/1093/4840 867/1029/4841 878/1094/4842 -f 868/1030/4843 752/1031/4844 879/1095/4845 -f 879/1095/4846 752/1031/4847 755/1096/4848 -f 871/1097/4849 870/1098/4850 872/1092/4851 -f 872/1092/4852 870/1098/4853 869/1091/4854 -f 873/1099/4855 874/1100/4856 757/1101/4857 -f 757/1101/4858 874/1100/4859 758/1102/4860 -f 874/1100/4861 875/1103/4862 758/1102/4863 -f 758/1102/4864 875/1103/4865 759/1104/4866 -f 877/1105/4867 871/1097/4868 876/1093/4869 -f 876/1093/4870 871/1097/4871 872/1092/4872 -f 878/1094/4873 877/1105/4874 876/1093/4875 -f 755/1096/4876 759/1104/4877 879/1095/4878 -f 879/1095/4879 759/1104/4880 875/1103/4881 -f 877/1105/4882 880/1106/4883 871/1097/4884 -f 880/1106/4885 881/1107/4886 871/1097/4887 -f 871/1097/4888 881/1107/4889 870/1098/4890 -f 882/1108/4891 885/1109/4892 883/1110/4893 -f 883/1110/4894 885/1109/4895 884/1111/4896 -f 886/1112/4897 760/1113/4898 887/1114/4899 -f 887/1114/4900 760/1113/4901 761/1115/4902 -f 885/1109/4903 889/1116/4904 884/1111/4905 -f 884/1111/4906 889/1116/4907 888/1117/4908 -f 890/1118/4909 893/1119/4910 891/1120/4911 -f 891/1120/4912 893/1119/4913 892/1121/4914 -f 894/1122/4915 895/1123/4916 891/1120/4917 -f 891/1120/4918 895/1123/4919 890/1118/4920 -f 764/1124/4921 897/1125/4922 765/1126/4923 -f 765/1126/4924 897/1125/4925 896/1127/4926 -f 898/1128/4927 762/1129/4928 896/1127/4929 -f 896/1127/4930 762/1129/4931 765/1126/4932 -f 894/1122/4933 891/1120/4934 899/1130/4935 -f 899/1130/4936 891/1120/4937 892/1121/4938 -f 901/2574/4939 907/1131/4940 900/1034/4941 -f 903/1037/4942 907/1131/4943 901/2574/4944 -f 902/2572/4945 907/1131/4946 903/1037/4947 -f 907/1131/4948 902/2572/4949 909/1132/4950 -f 934/1033/4951 1017/1133/4952 904/1032/4953 -f 904/1032/4954 1017/1133/4955 905/1040/4956 -f 911/2566/4957 1002/1135/4958 909/1132/4959 -f 909/1132/4960 1002/1135/4961 907/1131/4962 -f 909/2568/4963 908/1136/4964 911/1134/4965 -f 910/1137/4966 908/1136/4967 909/2568/4968 -f 913/1138/4969 912/1139/4970 916/1140/4971 -f 916/1140/4972 912/1139/4973 917/1141/4974 -f 913/1138/4975 916/1140/4976 914/1142/4977 -f 914/1142/4978 916/1140/4979 918/1143/4980 -f 763/1144/4981 766/1145/4982 919/1146/4983 -f 919/1146/4984 766/1145/4985 915/1147/4986 -f 882/1108/4987 883/1110/4988 910/1137/4989 -f 910/1137/4990 883/1110/4991 908/1136/4992 -f 917/1141/4993 893/1119/4994 916/1140/4995 -f 916/1140/4996 893/1119/4997 890/1118/4998 -f 895/1123/4999 918/1143/5000 890/1118/5001 -f 890/1118/5002 918/1143/5003 916/1140/5004 -f 919/1146/5005 897/1125/5006 763/1144/5007 -f 763/1144/5008 897/1125/5009 764/1124/5010 -f 921/1148/5011 756/1149/5012 886/1112/5013 -f 886/1112/5014 756/1149/5015 760/1113/5016 -f 889/1116/5017 885/1109/5018 922/1150/5019 -f 922/1150/5020 885/1109/5021 923/1151/5022 -f 923/1151/5023 885/1109/5024 924/1152/5025 -f 924/1152/5026 885/1109/5027 882/1108/5028 -f 920/1024/5029 924/1152/5030 910/1137/5031 -f 910/1137/5032 924/1152/5033 882/1108/5034 -f 1019/992/5035 806/969/5036 809/971/5037 -f 846/1044/5038 1019/992/5039 818/993/5040 -f 924/1152/5041 869/1091/5042 923/1151/5043 -f 923/1151/5044 869/1091/5045 870/1098/5046 -f 923/1151/5047 870/1098/5048 922/1150/5049 -f 922/1150/5050 870/1098/5051 881/1107/5052 -f 757/1101/5053 756/1149/5054 873/1099/5055 -f 873/1099/5056 756/1149/5057 921/1148/5058 -f 826/1006/5059 833/1012/5060 901/1035/5061 -f 901/1035/5062 833/1012/5063 903/2571/5064 -f 902/1036/5065 833/1012/5066 920/1024/5067 -f 869/1091/5068 924/1152/5069 863/1025/5070 -f 863/1025/5071 924/1152/5072 920/1024/5073 -f 854/1055/5074 772/920/5075 779/938/5076 -f 779/938/5077 772/920/5078 773/925/5079 -f 925/1088/5080 976/1153/5081 843/1038/5082 -f 843/1038/5083 976/1153/5084 971/1154/5085 -f 926/1087/5086 925/1088/5087 852/1056/5088 -f 852/1056/5089 925/1088/5090 843/1038/5091 -f 852/1155/5092 1020/1156/5093 926/1090/5094 -f 926/1090/5095 951/1157/5096 959/1089/5097 -f 1017/1133/5098 934/1033/5099 907/1131/5100 -f 767/1002/5101 749/1158/5102 927/1003/5103 -f 927/1003/5104 749/1158/5105 936/1159/5106 -f 938/1160/5107 929/999/5108 937/1161/5109 -f 937/1161/5110 929/999/5111 928/1001/5112 -f 938/1160/5113 968/1162/5114 929/999/5115 -f 929/999/5116 968/1162/5117 966/998/5118 -f 930/994/5119 931/995/5120 830/1008/5121 -f 830/1008/5122 931/995/5123 832/1010/5124 -f 932/990/5125 930/994/5126 827/1005/5127 -f 827/1005/5128 930/994/5129 830/1008/5130 -f 969/1163/5131 1018/1164/5132 983/1165/5133 -f 843/1038/5134 969/1163/5135 939/923/5136 -f 939/923/5137 969/1163/5138 987/1166/5139 -f 987/1166/5140 993/1167/5141 939/923/5142 -f 939/923/5143 993/1167/5144 940/922/5145 -f 941/927/5146 940/922/5147 992/1168/5148 -f 992/1168/5149 940/922/5150 993/1167/5151 -f 942/926/5152 941/927/5153 989/1169/5154 -f 989/1169/5155 941/927/5156 992/1168/5157 -f 943/929/5158 942/926/5159 988/1170/5160 -f 988/1170/5161 942/926/5162 989/1169/5163 -f 944/931/5164 943/929/5165 990/1171/5166 -f 990/1171/5167 943/929/5168 988/1170/5169 -f 946/934/5170 945/935/5171 991/1172/5172 -f 991/1172/5173 945/935/5174 994/1173/5175 -f 769/937/5176 946/934/5177 742/1174/5178 -f 742/1174/5179 946/934/5180 991/1172/5181 -f 768/968/5182 753/1046/5183 805/967/5184 -f 805/967/5185 753/1046/5186 847/1045/5187 -f 804/966/5188 805/967/5189 947/1048/5190 -f 947/1048/5191 805/967/5192 847/1045/5193 -f 802/964/5194 803/965/5195 849/1052/5196 -f 849/1052/5197 803/965/5198 948/1047/5199 -f 801/963/5200 802/964/5201 848/1051/5202 -f 848/1051/5203 802/964/5204 849/1052/5205 -f 800/962/5206 801/963/5207 850/1053/5208 -f 850/1053/5209 801/963/5210 848/1051/5211 -f 799/961/5212 800/962/5213 851/1054/5214 -f 851/1054/5215 800/962/5216 850/1053/5217 -f 851/1054/5218 860/1063/5219 799/961/5220 -f 799/961/5221 860/1063/5222 857/1060/5223 -f 857/1077/5224 860/1085/5225 955/1078/5226 -f 955/1078/5227 860/1085/5228 958/1086/5229 -f 976/1153/5230 925/1088/5231 974/1175/5232 -f 974/1175/5233 925/1088/5234 906/1043/5235 -f 909/2568/5236 902/1036/5237 910/1137/5238 -f 910/1137/5239 902/1036/5240 920/1024/5241 -f 960/1176/5242 832/1010/5243 961/1177/5244 -f 961/1177/5245 832/1010/5246 931/995/5247 -f 821/983/5248 962/984/5249 931/995/5250 -f 931/995/5251 962/984/5252 961/1177/5253 -f 812/976/5254 963/985/5255 821/983/5256 -f 821/983/5257 963/985/5258 962/984/5259 -f 813/975/5260 964/1049/5261 812/976/5262 -f 812/976/5263 964/1049/5264 963/985/5265 -f 849/1052/5266 948/1047/5267 813/975/5268 -f 813/975/5269 948/1047/5270 964/1049/5271 -f 822/997/5272 965/996/5273 935/986/5274 -f 935/986/5275 965/996/5276 962/984/5277 -f 824/988/5278 823/1000/5279 935/986/5280 -f 935/986/5281 823/1000/5282 822/997/5283 -f 824/988/5284 927/1003/5285 823/1000/5286 -f 823/1000/5287 927/1003/5288 928/1001/5289 -f 966/998/5290 961/1177/5291 965/996/5292 -f 965/996/5293 961/1177/5294 962/984/5295 -f 936/1159/5296 937/1161/5297 927/1003/5298 -f 927/1003/5299 937/1161/5300 928/1001/5301 -f 936/1159/5302 967/1178/5303 937/1161/5304 -f 937/1161/5305 967/1178/5306 938/1160/5307 -f 938/1160/5308 967/1178/5309 968/1162/5310 -f 968/1162/5311 967/1178/5312 960/1176/5313 -f 960/1176/5314 961/1177/5315 968/1162/5316 -f 968/1162/5317 961/1177/5318 966/998/5319 -f 803/965/5320 804/966/5321 948/1047/5322 -f 948/1047/5323 804/966/5324 947/1048/5325 -f 793/954/5326 797/957/5327 803/965/5328 -f 803/965/5329 797/957/5330 804/966/5331 -f 794/953/5332 796/955/5333 793/954/5334 -f 793/954/5335 796/955/5336 797/957/5337 -f 782/941/5338 783/942/5339 794/953/5340 -f 794/953/5341 783/942/5342 796/955/5343 -f 776/930/5344 777/933/5345 782/941/5346 -f 782/941/5347 777/933/5348 783/942/5349 -f 777/933/5350 776/930/5351 945/935/5352 -f 945/935/5353 776/930/5354 944/931/5355 -f 945/935/5356 944/931/5357 994/1173/5358 -f 994/1173/5359 944/931/5360 990/1171/5361 -f 947/1048/5362 847/1045/5363 815/1050/5364 -f 815/1050/5365 847/1045/5366 816/977/5367 -f 840/1018/5368 841/1020/5369 839/1019/5370 -f 839/1019/5371 841/1020/5372 842/1022/5373 -f 839/1019/5374 842/1022/5375 867/1029/5376 -f 867/1029/5377 842/1022/5378 868/1030/5379 -f 867/1029/5380 868/1030/5381 878/1094/5382 -f 878/1094/5383 868/1030/5384 879/1095/5385 -f 879/1095/5386 875/1103/5387 878/1094/5388 -f 878/1094/5389 875/1103/5390 877/1105/5391 -f 875/1103/5392 874/1100/5393 877/1105/5394 -f 877/1105/5395 874/1100/5396 880/1106/5397 -f 874/1100/5398 873/1099/5399 880/1106/5400 -f 880/1106/5401 873/1099/5402 881/1107/5403 -f 873/1099/5404 921/1148/5405 881/1107/5406 -f 881/1107/5407 921/1148/5408 922/1150/5409 -f 886/1112/5410 889/1116/5411 921/1148/5412 -f 921/1148/5413 889/1116/5414 922/1150/5415 -f 889/1116/5416 886/1112/5417 888/1117/5418 -f 888/1117/5419 886/1112/5420 887/1114/5421 -f 896/1127/5422 894/1122/5423 898/1128/5424 -f 898/1128/5425 894/1122/5426 899/1130/5427 -f 897/1125/5428 895/1123/5429 896/1127/5430 -f 896/1127/5431 895/1123/5432 894/1122/5433 -f 897/1125/5434 919/1146/5435 895/1123/5436 -f 895/1123/5437 919/1146/5438 918/1143/5439 -f 914/1142/5440 918/1143/5441 915/1147/5442 -f 915/1147/5443 918/1143/5444 919/1146/5445 -f 841/1020/5446 840/1018/5447 936/1159/5448 -f 936/1159/5449 840/1018/5450 967/1178/5451 -f 750/1021/5452 841/1020/5453 749/1158/5454 -f 749/1158/5455 841/1020/5456 936/1159/5457 -f 840/1018/5458 838/1016/5459 967/1178/5460 -f 967/1178/5461 838/1016/5462 960/1176/5463 -f 832/1010/5464 960/1176/5465 831/1011/5466 -f 831/1011/5467 960/1176/5468 838/1016/5469 -f 932/990/5470 827/1005/5471 933/991/5472 -f 827/1005/5473 825/1004/5474 933/991/5475 -f 934/1033/5476 933/991/5477 900/1034/5478 -f 900/1034/5479 933/991/5480 825/1004/5481 -f 900/1034/5482 907/1131/5483 934/1033/5484 -f 1018/1164/5485 971/1154/5486 977/1179/5487 -f 939/923/5488 845/921/5489 843/1038/5490 -f 1017/1133/5491 907/1131/5492 1016/1180/5493 -f 1016/1180/5494 907/1131/5495 1002/1135/5496 -f 905/1040/5497 982/1181/5498 906/1043/5499 -f 906/1043/5500 982/1181/5501 974/1175/5502 -f 982/1182/5503 905/1040/5504 1003/1183/5505 -f 1018/1164/5506 977/1179/5507 979/1184/5508 -f 984/1185/5509 970/1186/5510 983/1165/5511 -f 983/1165/5512 970/1186/5513 969/1163/5514 -f 976/1153/5515 975/1187/5516 971/1154/5517 -f 971/1154/5518 975/1187/5519 972/1188/5520 -f 978/1189/5521 977/1179/5522 972/1188/5523 -f 972/1188/5524 977/1179/5525 971/1154/5526 -f 975/1187/5527 976/1153/5528 973/1190/5529 -f 973/1190/5530 976/1153/5531 974/1175/5532 -f 977/1179/5533 978/1189/5534 979/1184/5535 -f 979/1184/5536 978/1189/5537 980/1191/5538 -f 982/1181/5539 981/1192/5540 974/1175/5541 -f 974/1175/5542 981/1192/5543 973/1190/5544 -f 981/1193/5545 982/1182/5546 1004/1194/5547 -f 1004/1194/5548 982/1182/5549 1003/1183/5550 -f 983/1165/5551 986/1195/5552 984/1185/5553 -f 984/1185/5554 986/1195/5555 985/1196/5556 -f 988/1170/5557 989/1169/5558 995/1197/5559 -f 995/1197/5560 989/1169/5561 996/1198/5562 -f 990/1171/5563 988/1170/5564 997/1199/5565 -f 997/1199/5566 988/1170/5567 995/1197/5568 -f 742/1174/5569 991/1172/5570 770/1200/5571 -f 770/1200/5572 991/1172/5573 998/1201/5574 -f 989/1169/5575 992/1168/5576 996/1198/5577 -f 996/1198/5578 992/1168/5579 999/1202/5580 -f 992/1168/5581 993/1167/5582 999/1202/5583 -f 999/1202/5584 993/1167/5585 1000/1203/5586 -f 1000/1203/5587 993/1167/5588 970/1186/5589 -f 970/1186/5590 993/1167/5591 987/1166/5592 -f 970/1186/5593 987/1166/5594 969/1163/5595 -f 994/1173/5596 990/1171/5597 1001/1204/5598 -f 1001/1204/5599 990/1171/5600 997/1199/5601 -f 991/1172/5602 994/1173/5603 998/1201/5604 -f 998/1201/5605 994/1173/5606 1001/1204/5607 -f 908/1136/5608 917/1141/5609 911/1134/5610 -f 911/1134/5611 917/1141/5612 912/1139/5613 -f 887/1114/5614 761/1115/5615 898/1128/5616 -f 898/1128/5617 761/1115/5618 762/1129/5619 -f 888/1117/5620 887/1114/5621 899/1130/5622 -f 899/1130/5623 887/1114/5624 898/1128/5625 -f 884/1111/5626 888/1117/5627 892/1121/5628 -f 892/1121/5629 888/1117/5630 899/1130/5631 -f 883/1110/5632 884/1111/5633 893/1119/5634 -f 893/1119/5635 884/1111/5636 892/1121/5637 -f 883/1110/5638 893/1119/5639 908/1136/5640 -f 908/1136/5641 893/1119/5642 917/1141/5643 -f 986/1195/5644 983/1165/5645 1018/1164/5646 -f 986/1195/5647 979/1184/5648 985/1196/5649 -f 985/1196/5650 979/1184/5651 980/1191/5652 -f 986/1195/5653 1018/1164/5654 979/1184/5655 -f 1006/1205/5656 1005/1206/5657 912/1139/5658 -f 912/1139/5659 1005/1206/5660 911/1134/5661 -f 1007/1207/5662 1006/1205/5663 913/1138/5664 -f 913/1138/5665 1006/1205/5666 912/1139/5667 -f 1008/1208/5668 1007/1207/5669 914/1142/5670 -f 914/1142/5671 1007/1207/5672 913/1138/5673 -f 915/1147/5674 1009/1209/5675 914/1142/5676 -f 914/1142/5677 1009/1209/5678 1008/1208/5679 -f 766/1145/5680 771/1210/5681 915/1147/5682 -f 915/1147/5683 771/1210/5684 1009/1209/5685 -f 1015/1211/5686 1016/1180/5687 1010/1212/5688 -f 1010/1212/5689 1016/1180/5690 1002/1135/5691 -f 1010/1212/5692 1002/1135/5693 1005/2567/5694 -f 1005/2567/5695 1002/1135/5696 911/2566/5697 -f 815/1050/5698 814/987/5699 964/1049/5700 -f 964/1049/5701 814/987/5702 963/985/5703 -f 817/979/5704 814/987/5705 816/977/5706 -f 816/977/5707 814/987/5708 815/1050/5709 -f 1044/1213/5710 1045/1214/5711 970/1215/5712 -f 996/1216/5713 1023/1217/5714 995/1218/5715 -f 995/1218/5716 1023/1217/5717 1024/1219/5718 -f 997/1220/5719 995/1218/5720 1025/1221/5721 -f 1025/1221/5722 995/1218/5723 1024/1219/5724 -f 1027/1222/5725 1028/1223/5726 998/1224/5727 -f 998/1224/5728 1028/1223/5729 770/1225/5730 -f 1023/1217/5731 996/1216/5732 1022/1226/5733 -f 1022/1226/5734 996/1216/5735 999/1227/5736 -f 1022/1226/5737 1000/1228/5738 1021/1229/5739 -f 1000/1228/5740 1022/1226/5741 999/1227/5742 -f 972/1230/5743 1021/1229/5744 1045/1214/5745 -f 1045/1214/5746 1021/1229/5747 970/1215/5748 -f 970/1215/5749 1021/1229/5750 1000/1228/5751 -f 997/1220/5752 1025/1221/5753 1001/1231/5754 -f 1001/1231/5755 1025/1221/5756 1026/1232/5757 -f 1001/1231/5758 1026/1232/5759 998/1224/5760 -f 998/1224/5761 1026/1232/5762 1027/1222/5763 -f 1021/1229/5764 972/1230/5765 1012/1233/5766 -f 1012/1234/5767 972/1235/5768 1014/1236/5769 -f 955/1237/5770 959/1089/5771 954/1238/5772 -f 959/1089/5773 955/1237/5774 950/1065/5775 -f 955/1237/5776 958/1239/5777 950/1065/5778 -f 954/1238/5779 959/1089/5780 953/1240/5781 -f 953/1240/5782 959/1089/5783 952/1241/5784 -f 952/1241/5785 959/1089/5786 951/1157/5787 -f 958/1239/5788 956/1242/5789 950/1065/5790 -f 956/1242/5791 957/1243/5792 950/1065/5793 -f 950/1065/5794 957/1243/5795 949/1067/5796 -f 1011/1244/5797 1003/1183/5798 1015/1211/5799 -f 1015/1211/5800 1003/1183/5801 1016/1180/5802 -f 905/1040/5803 1017/1133/5804 1003/1183/5805 -f 1003/1183/5806 1017/1133/5807 1016/1180/5808 -f 1043/1245/5809 1044/1213/5810 984/1246/5811 -f 984/1246/5812 1044/1213/5813 970/1215/5814 -f 985/1247/5815 1043/1245/5816 984/1246/5817 -f 985/1247/5818 980/1248/5819 1043/1245/5820 -f 978/1249/5821 1046/1250/5822 980/1248/5823 -f 980/1248/5824 1046/1250/5825 1043/1245/5826 -f 1046/1250/5827 978/1249/5828 972/1230/5829 -f 969/1163/5830 843/1038/5831 1018/1164/5832 -f 843/1038/5833 971/1154/5834 1018/1164/5835 -f 806/969/5836 1019/992/5837 846/1044/5838 -f 1019/992/5839 809/971/5840 819/981/5841 -f 819/981/5842 933/991/5843 1019/992/5844 -f 1020/1070/5845 853/1069/5846 951/1071/5847 -f 926/1090/5848 1020/1156/5849 951/1157/5850 -f 1037/1251/5851 1013/1252/5852 1042/1253/5853 -f 1042/1253/5854 1013/1252/5855 1034/1254/5856 -f 1036/1255/5857 1014/1256/5858 1037/1251/5859 -f 1037/1251/5860 1014/1256/5861 1013/1252/5862 -f 1038/1257/5863 1030/1258/5864 1035/1259/5865 -f 1035/1259/5866 1030/1258/5867 1029/1260/5868 -f 1039/1261/5869 1031/1262/5870 1038/1257/5871 -f 1038/1257/5872 1031/1262/5873 1030/1258/5874 -f 1040/1263/5875 1032/1264/5876 1039/1261/5877 -f 1039/1261/5878 1032/1264/5879 1031/1262/5880 -f 1041/1265/5881 1033/1266/5882 1040/1263/5883 -f 1040/1263/5884 1033/1266/5885 1032/1264/5886 -f 1042/1253/5887 1034/1254/5888 1041/1265/5889 -f 1041/1265/5890 1034/1254/5891 1033/1266/5892 -f 1021/1229/5893 1012/1233/5894 1036/1255/5895 -f 1036/1255/5896 1012/1233/5897 1014/1256/5898 -f 1021/1229/5899 1036/1255/5900 1022/1226/5901 -f 1022/1226/5902 1036/1255/5903 1037/1251/5904 -f 1023/1217/5905 1022/1226/5906 1042/1253/5907 -f 1042/1253/5908 1022/1226/5909 1037/1251/5910 -f 1024/1219/5911 1023/1217/5912 1041/1265/5913 -f 1041/1265/5914 1023/1217/5915 1042/1253/5916 -f 1025/1221/5917 1024/1219/5918 1040/1263/5919 -f 1040/1263/5920 1024/1219/5921 1041/1265/5922 -f 1025/1221/5923 1040/1263/5924 1026/1232/5925 -f 1026/1232/5926 1040/1263/5927 1039/1261/5928 -f 1038/1257/5929 1027/1222/5930 1039/1261/5931 -f 1039/1261/5932 1027/1222/5933 1026/1232/5934 -f 1027/1222/5935 1038/1257/5936 1028/1223/5937 -f 1028/1223/5938 1038/1257/5939 1035/1259/5940 -f 972/1230/5941 1045/1214/5942 1046/1250/5943 -f 1046/1250/5944 1045/1214/5945 1047/1267/5946 -f 1047/1267/5947 1045/1214/5948 1048/1268/5949 -f 1049/1269/5950 1047/1267/5951 1050/1270/5952 -f 1050/1270/5953 1047/1267/5954 1048/1268/5955 -f 1049/1269/5956 1050/1270/5957 1043/1245/5958 -f 1043/1245/5959 1050/1270/5960 1044/1213/5961 -f 1050/1270/5962 1048/1268/5963 1044/1213/5964 -f 1044/1213/5965 1048/1268/5966 1045/1214/5967 -f 1043/1245/5968 1046/1250/5969 1049/1269/5970 -f 1049/1269/5971 1046/1250/5972 1047/1267/5973 -f 1051/1271/5974 1053/1272/5975 1052/1273/5976 -f 1053/1272/5977 1054/1274/5978 1052/1273/5979 -f 1055/1275/5980 1057/1276/5981 1056/1277/5982 -f 1057/1276/5983 1058/1278/5984 1056/1277/5985 -f 1059/1279/5986 1060/1280/5987 1055/1275/5988 -f 1060/1280/5989 1057/1276/5990 1055/1275/5991 -f 1061/1281/5992 1062/1282/5993 1059/1279/5994 -f 1062/1282/5995 1060/1280/5996 1059/1279/5997 -f 1063/1283/5998 1065/1284/5999 1064/1285/6000 -f 1065/1284/6001 1066/1286/6002 1064/1285/6003 -f 743/936/6004 769/937/6005 1063/1283/6006 -f 769/937/6007 1065/1284/6008 1063/1283/6009 -f 1056/1277/6010 1067/1287/6011 1055/1275/6012 -f 1067/1287/6013 1068/1288/6014 1055/1275/6015 -f 1055/1275/6016 1068/1288/6017 1059/1279/6018 -f 1068/1288/6019 1069/1289/6020 1059/1279/6021 -f 1059/1279/6022 1069/1289/6023 1061/1281/6024 -f 1069/1289/6025 1070/1290/6026 1061/1281/6027 -f 1071/1291/6028 1072/1292/6029 1064/1285/6030 -f 1072/1292/6031 1063/1283/6032 1064/1285/6033 -f 743/936/6034 1063/1283/6035 754/944/6036 -f 1063/1283/6037 1072/1292/6038 754/944/6039 -f 1073/1293/6040 1075/1294/6041 1074/1295/6042 -f 1075/1294/6043 1076/1296/6044 1074/1295/6045 -f 1074/1295/6046 1076/1296/6047 1077/1297/6048 -f 1076/1296/6049 1078/1298/6050 1077/1297/6051 -f 1077/1297/6052 1078/1298/6053 1079/1299/6054 -f 1078/1298/6055 1080/1300/6056 1079/1299/6057 -f 1079/1299/6058 1080/1300/6059 1081/1301/6060 -f 1080/1300/6061 1082/1302/6062 1081/1301/6063 -f 1083/1303/6064 1085/1304/6065 1084/1305/6066 -f 1085/1304/6067 1086/1306/6068 1084/1305/6069 -f 744/959/6070 1084/1305/6071 745/960/6072 -f 1084/1305/6073 1086/1306/6074 745/960/6075 -f 1075/1294/6076 1087/1307/6077 1076/1296/6078 -f 1087/1307/6079 1088/1308/6080 1076/1296/6081 -f 1076/1296/6082 1088/1308/6083 1078/1298/6084 -f 1088/1308/6085 1089/1309/6086 1078/1298/6087 -f 1078/1298/6088 1089/1309/6089 1080/1300/6090 -f 1089/1309/6091 1090/1310/6092 1080/1300/6093 -f 1080/1300/6094 1090/1310/6095 1082/1302/6096 -f 1090/1310/6097 1091/1311/6098 1082/1302/6099 -f 1085/1304/6100 1092/1312/6101 1086/1306/6102 -f 1092/1312/6103 1093/1313/6104 1086/1306/6105 -f 745/960/6106 1086/1306/6107 768/968/6108 -f 1086/1306/6109 1093/1313/6110 768/968/6111 -f 1094/1314/6112 1096/1315/6113 1095/1316/6114 -f 1096/1315/6115 1097/1317/6116 1095/1316/6117 -f 1098/1318/6118 1097/1317/6119 1099/1319/6120 -f 1097/1317/6121 1096/1315/6122 1099/1319/6123 -f 1098/1318/6124 1099/1319/6125 1100/1320/6126 -f 1099/1319/6127 1101/1321/6128 1100/1320/6129 -f 1102/1322/6130 1103/1323/6131 746/978/6132 -f 1103/1323/6133 747/980/6134 746/978/6135 -f 1104/1324/6136 1105/1325/6137 1096/1315/6138 -f 1105/1325/6139 1099/1319/6140 1096/1315/6141 -f 1105/1325/6142 1106/1326/6143 1099/1319/6144 -f 1106/1326/6145 1101/1321/6146 1099/1319/6147 -f 1107/1327/6148 1109/1328/6149 1108/1329/6150 -f 1109/1328/6151 1110/1330/6152 1108/1329/6153 -f 1110/1330/6154 1109/1328/6155 1103/1323/6156 -f 1109/1328/6157 1111/1331/6158 1103/1323/6159 -f 1103/1323/6160 1111/1331/6161 747/980/6162 -f 1111/1331/6163 748/989/6164 747/980/6165 -f 1112/1332/6166 1104/1324/6167 1113/1333/6168 -f 1114/1334/6169 1115/1335/6170 1113/1333/6171 -f 1104/1324/6172 1112/1332/6173 1105/1325/6174 -f 1112/1332/6175 1116/1336/6176 1105/1325/6177 -f 1105/1325/6178 1116/1336/6179 1106/1326/6180 -f 1116/1336/6181 1117/1337/6182 1106/1326/6183 -f 1118/1338/6184 1120/1339/6185 1119/1340/6186 -f 1120/1339/6187 1121/1341/6188 1119/1340/6189 -f 1122/1342/6190 1119/1340/6191 1123/1343/6192 -f 1119/1340/6193 1121/1341/6194 1123/1343/6195 -f 748/989/6196 1111/1331/6197 767/1002/6198 -f 1111/1331/6199 1124/1344/6200 767/1002/6201 -f 1125/1345/6202 1127/1346/6203 1126/1347/6204 -f 1127/1346/6205 1128/1348/6206 1126/1347/6207 -f 1126/1347/6208 1128/1348/6209 1129/1349/6210 -f 1128/1348/6211 1130/1350/6212 1129/1349/6213 -f 1129/1349/6214 1130/1350/6215 1131/1351/6216 -f 1130/1350/6217 1132/1352/6218 1131/1351/6219 -f 1133/1353/6220 1134/1354/6221 1127/1346/6222 -f 1134/1354/6223 1128/1348/6224 1127/1346/6225 -f 1130/1350/6226 1128/1348/6227 1135/1355/6228 -f 1128/1348/6229 1134/1354/6230 1135/1355/6231 -f 1132/1352/6232 1130/1350/6233 1136/1356/6234 -f 1130/1350/6235 1135/1355/6236 1136/1356/6237 -f 1132/1352/6238 1136/1356/6239 1137/1357/6240 -f 1136/1356/6241 1138/1358/6242 1137/1357/6243 -f 1137/1357/6244 1138/1358/6245 1139/1359/6246 -f 1138/1358/6247 1140/1360/6248 1139/1359/6249 -f 1141/1361/6250 1142/1362/6251 750/1021/6252 -f 1142/1362/6253 751/1023/6254 750/1021/6255 -f 1143/1363/6256 1144/1364/6257 1133/1353/6258 -f 1144/1364/6259 1134/1354/6260 1133/1353/6261 -f 1135/1355/6262 1134/1354/6263 1145/1365/6264 -f 1134/1354/6265 1144/1364/6266 1145/1365/6267 -f 1136/1356/6268 1135/1355/6269 1146/1366/6270 -f 1135/1355/6271 1145/1365/6272 1146/1366/6273 -f 1138/1358/6274 1136/1356/6275 1147/1367/6276 -f 1136/1356/6277 1146/1366/6278 1147/1367/6279 -f 1138/1358/6280 1147/1367/6281 1140/1360/6282 -f 1147/1367/6283 1148/1368/6284 1140/1360/6285 -f 1142/1362/6286 1149/1369/6287 751/1023/6288 -f 1149/1369/6289 752/1031/6290 751/1023/6291 -f 1150/1370/6292 1151/1371/6293 1115/1335/6294 -f 1151/1371/6295 1113/1333/6296 1115/1335/6297 -f 1125/1345/6298 1152/1372/6299 1127/1346/6300 -f 1152/1372/6301 1153/1373/6302 1127/1346/6303 -f 1133/1353/6304 1155/1374/6305 1154/1375/6306 -f 1156/1376/6307 1157/1377/6308 1052/1273/6309 -f 1150/1370/6310 1159/1378/6311 1158/1379/6312 -f 1159/1378/6313 1160/1380/6314 1158/1379/6315 -f 1158/1379/6316 1160/1380/6317 1161/1381/6318 -f 1150/1370/6319 1115/1335/6320 1162/1382/6321 -f 1163/1383/6322 1102/1322/6323 753/1046/6324 -f 1102/1322/6325 746/978/6326 753/1046/6327 -f 1164/1384/6328 1166/1385/6329 1165/1386/6330 -f 1166/1385/6331 1167/1387/6332 1165/1386/6333 -f 1168/1388/6334 1098/1318/6335 1169/1389/6336 -f 1098/1318/6337 1100/1320/6338 1169/1389/6339 -f 1170/1390/6340 1097/1317/6341 1168/1388/6342 -f 1097/1317/6343 1098/1318/6344 1168/1388/6345 -f 1171/1391/6346 1095/1316/6347 1170/1390/6348 -f 1095/1316/6349 1097/1317/6350 1170/1390/6351 -f 1157/1377/6352 1173/1392/6353 1172/1393/6354 -f 1173/1392/6355 1174/1394/6356 1172/1393/6357 -f 1175/1395/6358 1075/1294/6359 1073/1293/6360 -f 1073/1293/6361 1176/1396/6362 1175/1395/6363 -f 1075/1294/6364 1175/1395/6365 1087/1307/6366 -f 1175/1395/6367 1177/1397/6368 1087/1307/6369 -f 1095/1316/6370 1179/1398/6371 1178/1399/6372 -f 1178/1399/6373 1094/1314/6374 1095/1316/6375 -f 1180/1400/6376 1179/1398/6377 1095/1316/6378 -f 1095/1316/6379 1171/1391/6380 1180/1400/6381 -f 1072/1292/6382 1084/1305/6383 754/944/6384 -f 1084/1305/6385 744/959/6386 754/944/6387 -f 1071/1291/6388 1083/1303/6389 1072/1292/6390 -f 1083/1303/6391 1084/1305/6392 1072/1292/6393 -f 1069/1289/6394 1079/1299/6395 1070/1290/6396 -f 1079/1299/6397 1081/1301/6398 1070/1290/6399 -f 1068/1288/6400 1077/1297/6401 1069/1289/6402 -f 1077/1297/6403 1079/1299/6404 1069/1289/6405 -f 1067/1287/6406 1074/1295/6407 1068/1288/6408 -f 1074/1295/6409 1077/1297/6410 1068/1288/6411 -f 1172/1393/6412 1073/1293/6413 1067/1287/6414 -f 1073/1293/6415 1074/1295/6416 1067/1287/6417 -f 1172/1393/6418 1174/1394/6419 1073/1293/6420 -f 1174/1394/6421 1176/1396/6422 1073/1293/6423 -f 1160/1401/6424 1159/1402/6425 1181/1403/6426 -f 1159/1402/6427 1182/1404/6428 1181/1403/6429 -f 1173/1405/6430 1183/1406/6431 1174/1407/6432 -f 1184/1408/6433 1185/1409/6434 1174/1407/6435 -f 1176/1410/6436 1186/1411/6437 1175/1412/6438 -f 1186/1411/6439 1187/1413/6440 1175/1412/6441 -f 1175/1412/6442 1187/1413/6443 1177/1414/6444 -f 1187/1413/6445 1188/1415/6446 1177/1414/6447 -f 1178/1416/6448 1179/1417/6449 1189/1418/6450 -f 1179/1417/6451 1190/1419/6452 1189/1418/6453 -f 1159/1420/6454 1178/1416/6455 1182/1421/6456 -f 1178/1416/6457 1189/1418/6458 1182/1421/6459 -f 1179/1417/6460 1180/1422/6461 1190/1419/6462 -f 1180/1422/6463 1191/1423/6464 1190/1419/6465 -f 1174/1407/6466 1185/1409/6467 1176/1410/6468 -f 1185/1409/6469 1186/1411/6470 1176/1410/6471 -f 1159/1378/6472 1150/1370/6473 1162/1382/6474 -f 1162/1382/6475 1094/1314/6476 1178/1399/6477 -f 1178/1399/6478 1159/1378/6479 1162/1382/6480 -f 1160/1380/6481 1192/1424/6482 1161/1381/6483 -f 1192/1424/6484 1193/1425/6485 1161/1381/6486 -f 1181/1403/6487 1194/1426/6488 1160/1401/6489 -f 1194/1426/6490 1192/1427/6491 1160/1401/6492 -f 1156/1376/6493 1173/1392/6494 1157/1377/6495 -f 1172/1393/6496 1051/1271/6497 1157/1377/6498 -f 1051/1271/6499 1052/1273/6500 1157/1377/6501 -f 1056/1277/6502 1058/1278/6503 1051/1271/6504 -f 1058/1278/6505 1053/1272/6506 1051/1271/6507 -f 1144/1364/6508 1195/1428/6509 1145/1365/6510 -f 1146/1366/6511 1145/1365/6512 1196/1429/6513 -f 1145/1365/6514 1195/1428/6515 1196/1429/6516 -f 1147/1367/6517 1146/1366/6518 1197/1430/6519 -f 1146/1366/6520 1196/1429/6521 1197/1430/6522 -f 1147/1367/6523 1197/1430/6524 1148/1368/6525 -f 1197/1430/6526 1198/1431/6527 1148/1368/6528 -f 1149/1369/6529 1199/1432/6530 752/1031/6531 -f 1199/1432/6532 755/1096/6533 752/1031/6534 -f 1200/1433/6535 1196/1429/6536 1201/1434/6537 -f 1196/1429/6538 1195/1428/6539 1201/1434/6540 -f 1202/1435/6541 757/1101/6542 1203/1436/6543 -f 757/1101/6544 758/1102/6545 1203/1436/6546 -f 1203/1436/6547 758/1102/6548 1204/1437/6549 -f 758/1102/6550 759/1104/6551 1204/1437/6552 -f 1205/1438/6553 1197/1430/6554 1200/1433/6555 -f 1197/1430/6556 1196/1429/6557 1200/1433/6558 -f 1198/1431/6559 1197/1430/6560 1205/1438/6561 -f 755/1096/6562 1199/1432/6563 759/1104/6564 -f 1199/1432/6565 1204/1437/6566 759/1104/6567 -f 1205/1438/6568 1200/1433/6569 1206/1439/6570 -f 1206/1439/6571 1200/1433/6572 1207/1440/6573 -f 1200/1433/6574 1201/1434/6575 1207/1440/6576 -f 1208/1441/6577 1210/1442/6578 1209/1443/6579 -f 1210/1442/6580 1211/1444/6581 1209/1443/6582 -f 1212/1445/6583 1213/1446/6584 760/1113/6585 -f 1213/1446/6586 761/1115/6587 760/1113/6588 -f 1209/1443/6589 1211/1444/6590 1214/1447/6591 -f 1211/1444/6592 1215/1448/6593 1214/1447/6594 -f 1216/1449/6595 1218/1450/6596 1217/1451/6597 -f 1218/1450/6598 1219/1452/6599 1217/1451/6600 -f 1220/1453/6601 1218/1450/6602 1221/1454/6603 -f 1218/1450/6604 1216/1449/6605 1221/1454/6606 -f 764/1124/6607 765/1126/6608 1222/1455/6609 -f 765/1126/6610 1223/1456/6611 1222/1455/6612 -f 1224/1457/6613 1223/1456/6614 762/1129/6615 -f 1223/1456/6616 765/1126/6617 762/1129/6618 -f 1220/1453/6619 1225/1458/6620 1218/1450/6621 -f 1225/1458/6622 1219/1452/6623 1218/1450/6624 -f 1153/2573/6625 1152/1372/6626 1226/1459/6627 -f 1155/2569/6628 1153/2573/6629 1226/1459/6630 -f 1154/2570/6631 1155/2569/6632 1226/1459/6633 -f 1226/1459/6634 1227/2565/6635 1154/2570/6636 -f 1151/1371/6637 1150/1370/6638 1228/1461/6639 -f 1150/1370/6640 1158/1379/6641 1228/1461/6642 -f 1229/1462/6643 1227/2565/6644 1230/1463/6645 -f 1227/2565/6646 1226/1459/6647 1230/1463/6648 -f 1227/1460/6649 1229/2563/6650 1231/1464/6651 -f 1232/1465/6652 1227/1460/6653 1231/1464/6654 -f 1233/1466/6655 1235/1467/6656 1234/1468/6657 -f 1235/1467/6658 1236/1469/6659 1234/1468/6660 -f 1233/1466/6661 1237/1470/6662 1235/1467/6663 -f 1237/1470/6664 1238/1471/6665 1235/1467/6666 -f 763/1144/6667 1239/1472/6668 766/1145/6669 -f 1239/1472/6670 1240/1473/6671 766/1145/6672 -f 1208/1441/6673 1232/1465/6674 1210/1442/6675 -f 1232/1465/6676 1231/1464/6677 1210/1442/6678 -f 1236/1469/6679 1235/1467/6680 1217/1451/6681 -f 1235/1467/6682 1216/1449/6683 1217/1451/6684 -f 1221/1454/6685 1216/1449/6686 1238/1471/6687 -f 1216/1449/6688 1235/1467/6689 1238/1471/6690 -f 1239/1472/6691 763/1144/6692 1222/1455/6693 -f 763/1144/6694 764/1124/6695 1222/1455/6696 -f 1241/1474/6697 1212/1445/6698 756/1149/6699 -f 1212/1445/6700 760/1113/6701 756/1149/6702 -f 1214/1447/6703 1242/1475/6704 1209/1443/6705 -f 1242/1475/6706 1243/1476/6707 1209/1443/6708 -f 1243/1476/6709 1244/1477/6710 1209/1443/6711 -f 1244/1477/6712 1208/1441/6713 1209/1443/6714 -f 1143/1363/6715 1232/1465/6716 1244/1477/6717 -f 1232/1465/6718 1208/1441/6719 1244/1477/6720 -f 1114/1334/6721 1096/1315/6722 1094/1314/6723 -f 1162/1382/6724 1115/1335/6725 1114/1334/6726 -f 1244/1477/6727 1243/1476/6728 1195/1428/6729 -f 1243/1476/6730 1201/1434/6731 1195/1428/6732 -f 1243/1476/6733 1242/1475/6734 1201/1434/6735 -f 1242/1475/6736 1207/1440/6737 1201/1434/6738 -f 757/1101/6739 1202/1435/6740 756/1149/6741 -f 1202/1435/6742 1241/1474/6743 756/1149/6744 -f 1127/1346/6745 1153/1373/6746 1133/1353/6747 -f 1153/1373/6748 1155/1374/6749 1133/1353/6750 -f 1154/1375/6751 1143/1363/6752 1133/1353/6753 -f 1195/1428/6754 1144/1364/6755 1244/1477/6756 -f 1144/1364/6757 1143/1363/6758 1244/1477/6759 -f 1172/1393/6760 1067/1287/6761 1051/1271/6762 -f 1067/1287/6763 1056/1277/6764 1051/1271/6765 -f 1193/1425/6766 1156/1376/6767 1245/1478/6768 -f 1156/1376/6769 1246/1479/6770 1245/1478/6771 -f 1192/1424/6772 1173/1392/6773 1193/1425/6774 -f 1173/1392/6775 1156/1376/6776 1193/1425/6777 -f 1173/1480/6778 1192/1427/6779 1183/1481/6780 -f 1192/1427/6781 1194/1426/6782 1184/1482/6783 -f 1228/1461/6784 1226/1459/6785 1151/1371/6786 -f 767/1002/6787 1124/1344/6788 749/1158/6789 -f 1124/1344/6790 1247/1483/6791 749/1158/6792 -f 1248/1484/6793 1249/1485/6794 1121/1341/6795 -f 1249/1485/6796 1123/1343/6797 1121/1341/6798 -f 1248/1484/6799 1121/1341/6800 1250/1486/6801 -f 1121/1341/6802 1120/1339/6803 1250/1486/6804 -f 1116/1336/6805 1129/1349/6806 1117/1337/6807 -f 1129/1349/6808 1131/1351/6809 1117/1337/6810 -f 1112/1332/6811 1126/1347/6812 1116/1336/6813 -f 1126/1347/6814 1129/1349/6815 1116/1336/6816 -f 1251/1487/6817 1253/1488/6818 1252/1489/6819 -f 1156/1376/6820 1054/1274/6821 1251/1487/6822 -f 1054/1274/6823 1254/1490/6824 1251/1487/6825 -f 1254/1490/6826 1054/1274/6827 1255/1491/6828 -f 1054/1274/6829 1053/1272/6830 1255/1491/6831 -f 1058/1278/6832 1256/1492/6833 1053/1272/6834 -f 1256/1492/6835 1255/1491/6836 1053/1272/6837 -f 1057/1276/6838 1257/1493/6839 1058/1278/6840 -f 1257/1493/6841 1256/1492/6842 1058/1278/6843 -f 1060/1280/6844 1258/1494/6845 1057/1276/6846 -f 1258/1494/6847 1257/1493/6848 1057/1276/6849 -f 1062/1282/6850 1259/1495/6851 1060/1280/6852 -f 1259/1495/6853 1258/1494/6854 1060/1280/6855 -f 1065/1284/6856 1260/1496/6857 1066/1286/6858 -f 1260/1496/6859 1261/1497/6860 1066/1286/6861 -f 769/937/6862 742/1174/6863 1065/1284/6864 -f 742/1174/6865 1260/1496/6866 1065/1284/6867 -f 768/968/6868 1093/1313/6869 753/1046/6870 -f 1093/1313/6871 1163/1383/6872 753/1046/6873 -f 1092/1312/6874 1165/1386/6875 1093/1313/6876 -f 1165/1386/6877 1163/1383/6878 1093/1313/6879 -f 1090/1310/6880 1169/1389/6881 1091/1311/6882 -f 1169/1389/6883 1164/1384/6884 1091/1311/6885 -f 1089/1309/6886 1168/1388/6887 1090/1310/6888 -f 1168/1388/6889 1169/1389/6890 1090/1310/6891 -f 1088/1308/6892 1170/1390/6893 1089/1309/6894 -f 1170/1390/6895 1168/1388/6896 1089/1309/6897 -f 1087/1307/6898 1171/1391/6899 1088/1308/6900 -f 1171/1391/6901 1170/1390/6902 1088/1308/6903 -f 1171/1391/6904 1087/1307/6905 1180/1400/6906 -f 1087/1307/6907 1177/1397/6908 1180/1400/6909 -f 1177/1414/6910 1188/1415/6911 1180/1422/6912 -f 1188/1415/6913 1191/1423/6914 1180/1422/6915 -f 1245/1478/6916 1262/1498/6917 1193/1425/6918 -f 1262/1498/6919 1161/1381/6920 1193/1425/6921 -f 1227/1460/6922 1232/1465/6923 1154/1375/6924 -f 1232/1465/6925 1143/1363/6926 1154/1375/6927 -f 1263/1499/6928 1264/1500/6929 1131/1351/6930 -f 1264/1500/6931 1117/1337/6932 1131/1351/6933 -f 1106/1326/6934 1117/1337/6935 1107/1327/6936 -f 1117/1337/6937 1264/1500/6938 1107/1327/6939 -f 1101/1321/6940 1106/1326/6941 1108/1329/6942 -f 1106/1326/6943 1107/1327/6944 1108/1329/6945 -f 1100/1320/6946 1101/1321/6947 1166/1385/6948 -f 1101/1321/6949 1108/1329/6950 1166/1385/6951 -f 1169/1389/6952 1100/1320/6953 1164/1384/6954 -f 1100/1320/6955 1166/1385/6956 1164/1384/6957 -f 1119/1340/6958 1109/1328/6959 1118/1338/6960 -f 1109/1328/6961 1107/1327/6962 1118/1338/6963 -f 1111/1331/6964 1109/1328/6965 1122/1342/6966 -f 1109/1328/6967 1119/1340/6968 1122/1342/6969 -f 1111/1331/6970 1122/1342/6971 1124/1344/6972 -f 1122/1342/6973 1123/1343/6974 1124/1344/6975 -f 1120/1339/6976 1118/1338/6977 1264/1500/6978 -f 1118/1338/6979 1107/1327/6980 1264/1500/6981 -f 1247/1483/6982 1124/1344/6983 1249/1485/6984 -f 1124/1344/6985 1123/1343/6986 1249/1485/6987 -f 1247/1483/6988 1249/1485/6989 1265/1501/6990 -f 1249/1485/6991 1248/1484/6992 1265/1501/6993 -f 1248/1484/6994 1250/1486/6995 1265/1501/6996 -f 1250/1486/6997 1263/1499/6998 1265/1501/6999 -f 1263/1499/7000 1250/1486/7001 1264/1500/7002 -f 1250/1486/7003 1120/1339/7004 1264/1500/7005 -f 1091/1311/7006 1164/1384/7007 1092/1312/7008 -f 1164/1384/7009 1165/1386/7010 1092/1312/7011 -f 1082/1302/7012 1091/1311/7013 1085/1304/7014 -f 1091/1311/7015 1092/1312/7016 1085/1304/7017 -f 1081/1301/7018 1082/1302/7019 1083/1303/7020 -f 1082/1302/7021 1085/1304/7022 1083/1303/7023 -f 1070/1290/7024 1081/1301/7025 1071/1291/7026 -f 1081/1301/7027 1083/1303/7028 1071/1291/7029 -f 1061/1281/7030 1070/1290/7031 1064/1285/7032 -f 1070/1290/7033 1071/1291/7034 1064/1285/7035 -f 1064/1285/7036 1066/1286/7037 1061/1281/7038 -f 1066/1286/7039 1062/1282/7040 1061/1281/7041 -f 1066/1286/7042 1261/1497/7043 1062/1282/7044 -f 1261/1497/7045 1259/1495/7046 1062/1282/7047 -f 1165/1386/7048 1167/1387/7049 1163/1383/7050 -f 1167/1387/7051 1102/1322/7052 1163/1383/7053 -f 1139/1359/7054 1140/1360/7055 1141/1361/7056 -f 1140/1360/7057 1142/1362/7058 1141/1361/7059 -f 1140/1360/7060 1148/1368/7061 1142/1362/7062 -f 1148/1368/7063 1149/1369/7064 1142/1362/7065 -f 1148/1368/7066 1198/1431/7067 1149/1369/7068 -f 1198/1431/7069 1199/1432/7070 1149/1369/7071 -f 1199/1432/7072 1198/1431/7073 1204/1437/7074 -f 1198/1431/7075 1205/1438/7076 1204/1437/7077 -f 1204/1437/7078 1205/1438/7079 1203/1436/7080 -f 1205/1438/7081 1206/1439/7082 1203/1436/7083 -f 1203/1436/7084 1206/1439/7085 1202/1435/7086 -f 1206/1439/7087 1207/1440/7088 1202/1435/7089 -f 1202/1435/7090 1207/1440/7091 1241/1474/7092 -f 1207/1440/7093 1242/1475/7094 1241/1474/7095 -f 1212/1445/7096 1241/1474/7097 1214/1447/7098 -f 1241/1474/7099 1242/1475/7100 1214/1447/7101 -f 1214/1447/7102 1215/1448/7103 1212/1445/7104 -f 1215/1448/7105 1213/1446/7106 1212/1445/7107 -f 1223/1456/7108 1224/1457/7109 1220/1453/7110 -f 1224/1457/7111 1225/1458/7112 1220/1453/7113 -f 1222/1455/7114 1223/1456/7115 1221/1454/7116 -f 1223/1456/7117 1220/1453/7118 1221/1454/7119 -f 1222/1455/7120 1221/1454/7121 1239/1472/7122 -f 1221/1454/7123 1238/1471/7124 1239/1472/7125 -f 1237/1470/7126 1240/1473/7127 1238/1471/7128 -f 1240/1473/7129 1239/1472/7130 1238/1471/7131 -f 1141/1361/7132 1247/1483/7133 1139/1359/7134 -f 1247/1483/7135 1265/1501/7136 1139/1359/7137 -f 750/1021/7138 749/1158/7139 1141/1361/7140 -f 749/1158/7141 1247/1483/7142 1141/1361/7143 -f 1139/1359/7144 1265/1501/7145 1137/1357/7146 -f 1265/1501/7147 1263/1499/7148 1137/1357/7149 -f 1131/1351/7150 1132/1352/7151 1263/1499/7152 -f 1132/1352/7153 1137/1357/7154 1263/1499/7155 -f 1112/1332/7156 1113/1333/7157 1126/1347/7158 -f 1126/1347/7159 1113/1333/7160 1125/1345/7161 -f 1151/1371/7162 1152/1372/7163 1113/1333/7164 -f 1152/1372/7165 1125/1345/7166 1113/1333/7167 -f 1152/1372/7168 1151/1371/7169 1226/1459/7170 -f 1252/1489/7171 1266/1502/7172 1246/1479/7173 -f 1054/1274/7174 1156/1376/7175 1052/1273/7176 -f 1228/1461/7177 1267/1503/7178 1226/1459/7179 -f 1267/1503/7180 1230/1463/7181 1226/1459/7182 -f 1158/1379/7183 1161/1381/7184 1268/1504/7185 -f 1161/1381/7186 1262/1498/7187 1268/1504/7188 -f 1268/1505/7189 1269/1506/7190 1158/1379/7191 -f 1252/1489/7192 1270/1507/7193 1266/1502/7194 -f 1271/1508/7195 1253/1488/7196 1272/1509/7197 -f 1253/1488/7198 1251/1487/7199 1272/1509/7200 -f 1245/1478/7201 1246/1479/7202 1273/1510/7203 -f 1246/1479/7204 1274/1511/7205 1273/1510/7206 -f 1275/1512/7207 1274/1511/7208 1266/1502/7209 -f 1274/1511/7210 1246/1479/7211 1266/1502/7212 -f 1273/1510/7213 1276/1513/7214 1245/1478/7215 -f 1276/1513/7216 1262/1498/7217 1245/1478/7218 -f 1266/1502/7219 1270/1507/7220 1275/1512/7221 -f 1270/1507/7222 1277/1514/7223 1275/1512/7224 -f 1268/1504/7225 1262/1498/7226 1278/1515/7227 -f 1262/1498/7228 1276/1513/7229 1278/1515/7230 -f 1278/1516/7231 1279/1517/7232 1268/1505/7233 -f 1279/1517/7234 1269/1506/7235 1268/1505/7236 -f 1253/1488/7237 1271/1508/7238 1280/1518/7239 -f 1271/1508/7240 1281/1519/7241 1280/1518/7242 -f 1258/1494/7243 1282/1520/7244 1257/1493/7245 -f 1282/1520/7246 1283/1521/7247 1257/1493/7248 -f 1259/1495/7249 1284/1522/7250 1258/1494/7251 -f 1284/1522/7252 1282/1520/7253 1258/1494/7254 -f 742/1174/7255 770/1200/7256 1260/1496/7257 -f 770/1200/7258 1285/1523/7259 1260/1496/7260 -f 1257/1493/7261 1283/1521/7262 1256/1492/7263 -f 1283/1521/7264 1286/1524/7265 1256/1492/7266 -f 1256/1492/7267 1286/1524/7268 1255/1491/7269 -f 1286/1524/7270 1287/1525/7271 1255/1491/7272 -f 1287/1525/7273 1272/1509/7274 1255/1491/7275 -f 1272/1509/7276 1254/1490/7277 1255/1491/7278 -f 1272/1509/7279 1251/1487/7280 1254/1490/7281 -f 1261/1497/7282 1288/1526/7283 1259/1495/7284 -f 1288/1526/7285 1284/1522/7286 1259/1495/7287 -f 1260/1496/7288 1285/1523/7289 1261/1497/7290 -f 1285/1523/7291 1288/1526/7292 1261/1497/7293 -f 1231/1464/7294 1229/2563/7295 1236/1469/7296 -f 1229/2563/7297 1234/1468/7298 1236/1469/7299 -f 1213/1446/7300 1224/1457/7301 761/1115/7302 -f 1224/1457/7303 762/1129/7304 761/1115/7305 -f 1215/1448/7306 1225/1458/7307 1213/1446/7308 -f 1225/1458/7309 1224/1457/7310 1213/1446/7311 -f 1211/1444/7312 1219/1452/7313 1215/1448/7314 -f 1219/1452/7315 1225/1458/7316 1215/1448/7317 -f 1210/1442/7318 1217/1451/7319 1211/1444/7320 -f 1217/1451/7321 1219/1452/7322 1211/1444/7323 -f 1210/1442/7324 1231/1464/7325 1217/1451/7326 -f 1231/1464/7327 1236/1469/7328 1217/1451/7329 -f 1280/1518/7330 1252/1489/7331 1253/1488/7332 -f 1280/1518/7333 1281/1519/7334 1270/1507/7335 -f 1281/1519/7336 1277/1514/7337 1270/1507/7338 -f 1280/1518/7339 1270/1507/7340 1252/1489/7341 -f 1289/1527/7342 1234/1468/7343 1290/2564/7344 -f 1234/1468/7345 1229/2563/7346 1290/2564/7347 -f 1291/1529/7348 1233/1466/7349 1289/1527/7350 -f 1233/1466/7351 1234/1468/7352 1289/1527/7353 -f 1292/1530/7354 1237/1470/7355 1291/1529/7356 -f 1237/1470/7357 1233/1466/7358 1291/1529/7359 -f 1240/1473/7360 1237/1470/7361 1293/1531/7362 -f 1237/1470/7363 1292/1530/7364 1293/1531/7365 -f 766/1145/7366 1240/1473/7367 771/1210/7368 -f 1240/1473/7369 1293/1531/7370 771/1210/7371 -f 1294/1532/7372 1295/1533/7373 1267/1503/7374 -f 1295/1533/7375 1230/1463/7376 1267/1503/7377 -f 1295/1533/7378 1290/1528/7379 1230/1463/7380 -f 1290/1528/7381 1229/1462/7382 1230/1463/7383 -f 1167/1387/7384 1166/1385/7385 1110/1330/7386 -f 1166/1385/7387 1108/1329/7388 1110/1330/7389 -f 1103/1323/7390 1102/1322/7391 1110/1330/7392 -f 1102/1322/7393 1167/1387/7394 1110/1330/7395 -f 1296/1534/7396 1272/1535/7397 1297/1536/7398 -f 1283/1537/7399 1282/1538/7400 1298/1539/7401 -f 1282/1538/7402 1299/1540/7403 1298/1539/7404 -f 1284/1541/7405 1300/1542/7406 1282/1538/7407 -f 1300/1542/7408 1299/1540/7409 1282/1538/7410 -f 1301/1543/7411 1285/1544/7412 1028/1223/7413 -f 1285/1544/7414 770/1225/7415 1028/1223/7416 -f 1298/1539/7417 1302/1545/7418 1283/1537/7419 -f 1302/1545/7420 1286/1546/7421 1283/1537/7422 -f 1302/1545/7423 1303/1547/7424 1287/1548/7425 -f 1287/1548/7426 1286/1546/7427 1302/1545/7428 -f 1274/1549/7429 1297/1536/7430 1303/1547/7431 -f 1297/1536/7432 1272/1535/7433 1303/1547/7434 -f 1272/1535/7435 1287/1548/7436 1303/1547/7437 -f 1284/1541/7438 1288/1550/7439 1300/1542/7440 -f 1288/1550/7441 1304/1551/7442 1300/1542/7443 -f 1288/1550/7444 1285/1544/7445 1304/1551/7446 -f 1285/1544/7447 1301/1543/7448 1304/1551/7449 -f 1303/1547/7450 1305/1552/7451 1274/1549/7452 -f 1305/1553/7453 1306/1554/7454 1274/1555/7455 -f 1188/1556/7456 1187/1557/7457 1194/1426/7458 -f 1194/1426/7459 1181/1403/7460 1188/1556/7461 -f 1188/1556/7462 1181/1403/7463 1191/1558/7464 -f 1187/1557/7465 1186/1559/7466 1194/1426/7467 -f 1186/1559/7468 1185/1560/7469 1194/1426/7470 -f 1185/1560/7471 1184/1482/7472 1194/1426/7473 -f 1191/1558/7474 1181/1403/7475 1190/1561/7476 -f 1190/1561/7477 1181/1403/7478 1189/1562/7479 -f 1181/1403/7480 1182/1404/7481 1189/1562/7482 -f 1307/1563/7483 1294/1532/7484 1269/1506/7485 -f 1294/1532/7486 1267/1503/7487 1269/1506/7488 -f 1158/1379/7489 1269/1506/7490 1228/1461/7491 -f 1269/1506/7492 1267/1503/7493 1228/1461/7494 -f 1308/1564/7495 1271/1565/7496 1296/1534/7497 -f 1271/1565/7498 1272/1535/7499 1296/1534/7500 -f 1281/1566/7501 1271/1565/7502 1308/1564/7503 -f 1281/1566/7504 1308/1564/7505 1277/1567/7506 -f 1275/1568/7507 1277/1567/7508 1309/1569/7509 -f 1277/1567/7510 1308/1564/7511 1309/1569/7512 -f 1309/1569/7513 1274/1549/7514 1275/1568/7515 -f 1251/1487/7516 1252/1489/7517 1156/1376/7518 -f 1156/1376/7519 1252/1489/7520 1246/1479/7521 -f 1094/1314/7522 1162/1382/7523 1114/1334/7524 -f 1114/1334/7525 1104/1324/7526 1096/1315/7527 -f 1104/1324/7528 1114/1334/7529 1113/1333/7530 -f 1183/1406/7531 1184/1408/7532 1174/1407/7533 -f 1192/1427/7534 1184/1482/7535 1183/1481/7536 -f 1310/1570/7537 1312/1571/7538 1311/1572/7539 -f 1312/1571/7540 1313/1573/7541 1311/1572/7542 -f 1314/1574/7543 1310/1570/7544 1306/1575/7545 -f 1310/1570/7546 1311/1572/7547 1306/1575/7548 -f 1315/1576/7549 1035/1259/7550 1316/1577/7551 -f 1035/1259/7552 1029/1260/7553 1316/1577/7554 -f 1317/1578/7555 1315/1576/7556 1318/1579/7557 -f 1315/1576/7558 1316/1577/7559 1318/1579/7560 -f 1319/1580/7561 1317/1578/7562 1320/1581/7563 -f 1317/1578/7564 1318/1579/7565 1320/1581/7566 -f 1321/1582/7567 1319/1580/7568 1322/1583/7569 -f 1319/1580/7570 1320/1581/7571 1322/1583/7572 -f 1312/1571/7573 1321/1582/7574 1313/1573/7575 -f 1321/1582/7576 1322/1583/7577 1313/1573/7578 -f 1303/1547/7579 1314/1574/7580 1305/1552/7581 -f 1314/1574/7582 1306/1575/7583 1305/1552/7584 -f 1303/1547/7585 1302/1545/7586 1314/1574/7587 -f 1302/1545/7588 1310/1570/7589 1314/1574/7590 -f 1298/1539/7591 1312/1571/7592 1302/1545/7593 -f 1312/1571/7594 1310/1570/7595 1302/1545/7596 -f 1299/1540/7597 1321/1582/7598 1298/1539/7599 -f 1321/1582/7600 1312/1571/7601 1298/1539/7602 -f 1300/1542/7603 1319/1580/7604 1299/1540/7605 -f 1319/1580/7606 1321/1582/7607 1299/1540/7608 -f 1300/1542/7609 1304/1551/7610 1319/1580/7611 -f 1304/1551/7612 1317/1578/7613 1319/1580/7614 -f 1315/1576/7615 1317/1578/7616 1301/1543/7617 -f 1317/1578/7618 1304/1551/7619 1301/1543/7620 -f 1301/1543/7621 1028/1223/7622 1315/1576/7623 -f 1028/1223/7624 1035/1259/7625 1315/1576/7626 -f 1274/1549/7627 1309/1569/7628 1297/1536/7629 -f 1309/1569/7630 1323/1584/7631 1297/1536/7632 -f 1323/1584/7633 1324/1585/7634 1297/1536/7635 -f 1325/1586/7636 1326/1587/7637 1323/1584/7638 -f 1326/1587/7639 1324/1585/7640 1323/1584/7641 -f 1325/1586/7642 1308/1564/7643 1326/1587/7644 -f 1308/1564/7645 1296/1534/7646 1326/1587/7647 -f 1326/1587/7648 1296/1534/7649 1324/1585/7650 -f 1296/1534/7651 1297/1536/7652 1324/1585/7653 -f 1308/1564/7654 1325/1586/7655 1309/1569/7656 -f 1325/1586/7657 1323/1584/7658 1309/1569/7659 -f 1013/1588/7660 1029/1589/7661 1034/1590/7662 -f 1274/1555/7663 1306/1554/7664 1014/1236/7665 -f 1014/1236/7666 972/1235/7667 1274/1555/7668 -f 1311/1591/7669 1013/1588/7670 1306/1554/7671 -f 1013/1588/7672 1014/1236/7673 1306/1554/7674 -f 1313/1592/7675 1316/1593/7676 1029/1589/7677 -f 1311/1591/7678 1029/1589/7679 1013/1588/7680 -f 1034/1590/7681 1030/1594/7682 1033/1595/7683 -f 1034/1590/7684 1029/1589/7685 1030/1594/7686 -f 1033/1595/7687 1031/1596/7688 1032/1597/7689 -f 1033/1595/7690 1030/1594/7691 1031/1596/7692 -f 1313/1592/7693 1029/1589/7694 1311/1591/7695 -f 1322/1598/7696 1318/1599/7697 1316/1593/7698 -f 1322/1598/7699 1316/1593/7700 1313/1592/7701 -f 1320/1600/7702 1318/1599/7703 1322/1598/7704 -f 1327/1601/7705 1343/1602/7706 1335/1603/7707 -f 1335/1603/7708 1343/1602/7709 1351/1604/7710 -f 1328/1605/7711 1344/1606/7712 1336/1607/7713 -f 1336/1607/7714 1344/1606/7715 1352/1608/7716 -f 1329/1609/7717 1345/1610/7718 1337/1611/7719 -f 1337/1611/7720 1345/1610/7721 1353/1612/7722 -f 1330/1613/7723 1346/1614/7724 1338/1615/7725 -f 1338/1615/7726 1346/1614/7727 1354/1616/7728 -f 1331/1617/7729 1347/1618/7730 1339/1619/7731 -f 1339/1619/7732 1347/1618/7733 1355/1620/7734 -f 1332/1621/7735 1348/1622/7736 1340/1623/7737 -f 1340/1623/7738 1348/1622/7739 1356/1624/7740 -f 1333/1625/7741 1349/1626/7742 1341/1627/7743 -f 1341/1627/7744 1349/1626/7745 1357/1628/7746 -f 1334/1629/7747 1350/1630/7748 1342/1631/7749 -f 1342/1631/7750 1350/1630/7751 1358/1632/7752 -f 1328/1605/7753 1343/1602/7754 1381/1633/7755 -f 1381/1633/7756 1343/1602/7757 1380/1634/7758 -f 1329/1609/7759 1344/1606/7760 1383/1635/7761 -f 1383/1635/7762 1344/1606/7763 1382/1636/7764 -f 1330/1613/7765 1345/1610/7766 1369/1637/7767 -f 1369/1637/7768 1345/1610/7769 1368/1638/7770 -f 1331/1617/7771 1346/1614/7772 1371/1639/7773 -f 1371/1639/7774 1346/1614/7775 1370/1640/7776 -f 1332/1641/7777 1347/1618/7778 1373/1642/7779 -f 1373/1642/7780 1347/1618/7781 1372/1643/7782 -f 1333/1625/7783 1348/1622/7784 1375/1644/7785 -f 1375/1644/7786 1348/1622/7787 1374/1645/7788 -f 1334/1629/7789 1349/1626/7790 1377/1646/7791 -f 1377/1646/7792 1349/1626/7793 1376/1647/7794 -f 1379/1648/7795 1327/1601/7796 1378/1649/7797 -f 1378/1649/7798 1327/1601/7799 1350/1630/7800 -f 1379/1648/7801 1380/1634/7802 1327/1601/7803 -f 1327/1601/7804 1380/1634/7805 1343/1602/7806 -f 1328/1605/7807 1381/1633/7808 1344/1606/7809 -f 1344/1606/7810 1381/1633/7811 1382/1636/7812 -f 1329/1609/7813 1383/1635/7814 1345/1610/7815 -f 1345/1610/7816 1383/1635/7817 1368/1638/7818 -f 1330/1613/7819 1369/1637/7820 1346/1614/7821 -f 1346/1614/7822 1369/1637/7823 1370/1640/7824 -f 1333/1625/7825 1375/1644/7826 1349/1626/7827 -f 1349/1626/7828 1375/1644/7829 1376/1647/7830 -f 1334/1629/7831 1377/1646/7832 1350/1630/7833 -f 1350/1630/7834 1377/1646/7835 1378/1649/7836 -f 1358/1632/7837 1350/1630/7838 1335/1603/7839 -f 1335/1603/7840 1350/1630/7841 1327/1601/7842 -f 1334/1629/7843 1342/1631/7844 1349/1626/7845 -f 1349/1626/7846 1342/1631/7847 1357/1628/7848 -f 1333/1625/7849 1341/1627/7850 1348/1622/7851 -f 1348/1622/7852 1341/1627/7853 1356/1624/7854 -f 1332/1641/7855 1340/1650/7856 1347/1618/7857 -f 1347/1618/7858 1340/1650/7859 1355/1620/7860 -f 1331/1617/7861 1339/1619/7862 1346/1614/7863 -f 1346/1614/7864 1339/1619/7865 1354/1616/7866 -f 1330/1613/7867 1338/1615/7868 1345/1610/7869 -f 1345/1610/7870 1338/1615/7871 1353/1612/7872 -f 1329/1609/7873 1337/1611/7874 1344/1606/7875 -f 1344/1606/7876 1337/1611/7877 1352/1608/7878 -f 1328/1605/7879 1336/1607/7880 1343/1602/7881 -f 1343/1602/7882 1336/1607/7883 1351/1604/7884 -f 1336/1651/7885 1871/1652/7886 1351/1653/7887 -f 1351/1653/7888 1871/1652/7889 1886/1654/7890 -f 1335/1655/7891 1351/1653/7892 1885/1656/7893 -f 1885/1656/7894 1351/1653/7895 1886/1654/7896 -f 1337/1657/7897 1873/1658/7898 1352/1659/7899 -f 1352/1659/7900 1873/1658/7901 1872/1660/7902 -f 1336/1651/7903 1352/1659/7904 1871/1652/7905 -f 1871/1652/7906 1352/1659/7907 1872/1660/7908 -f 1338/1661/7909 1875/1662/7910 1353/1663/7911 -f 1353/1663/7912 1875/1662/7913 1874/1664/7914 -f 1337/1657/7915 1353/1663/7916 1873/1658/7917 -f 1873/1658/7918 1353/1663/7919 1874/1664/7920 -f 1339/1665/7921 1877/1666/7922 1354/1667/7923 -f 1354/1667/7924 1877/1666/7925 1876/1668/7926 -f 1338/1661/7927 1354/1667/7928 1875/1662/7929 -f 1875/1662/7930 1354/1667/7931 1876/1668/7932 -f 1340/1669/7933 1879/1670/7934 1355/1671/7935 -f 1355/1671/7936 1879/1670/7937 1878/1672/7938 -f 1339/1665/7939 1355/1671/7940 1877/1666/7941 -f 1877/1666/7942 1355/1671/7943 1878/1672/7944 -f 1341/1673/7945 1881/1674/7946 1356/1675/7947 -f 1356/1675/7948 1881/1674/7949 1880/1676/7950 -f 1340/1669/7951 1356/1675/7952 1879/1670/7953 -f 1879/1670/7954 1356/1675/7955 1880/1676/7956 -f 1342/1677/7957 1883/1678/7958 1357/1679/7959 -f 1357/1679/7960 1883/1678/7961 1882/1680/7962 -f 1341/1673/7963 1357/1679/7964 1881/1674/7965 -f 1881/1674/7966 1357/1679/7967 1882/1680/7968 -f 1335/1655/7969 1885/1656/7970 1358/1681/7971 -f 1358/1681/7972 1885/1656/7973 1884/1682/7974 -f 1342/1677/7975 1358/1681/7976 1883/1678/7977 -f 1883/1678/7978 1358/1681/7979 1884/1682/7980 -f 1360/1683/7981 1359/1684/7982 1361/1685/7983 -f 1361/1685/7984 1359/1684/7985 1362/1686/7986 -f 1362/1686/7987 1359/1684/7988 1363/1687/7989 -f 1363/1687/7990 1359/1684/7991 1364/1688/7992 -f 1364/1688/7993 1359/1684/7994 1365/1689/7995 -f 1365/1689/7996 1359/1684/7997 1366/1690/7998 -f 1366/1690/7999 1359/1684/8000 1367/1691/8001 -f 1367/1691/8002 1359/1684/8003 1360/1683/8004 -f 1331/1617/8005 1371/1639/8006 1347/1618/8007 -f 1347/1618/8008 1371/1639/8009 1372/1643/8010 -f 1332/1621/8011 1373/1692/8012 1348/1622/8013 -f 1348/1622/8014 1373/1692/8015 1374/1645/8016 -f 1385/1693/8017 1401/1694/8018 1384/1695/8019 -f 1384/1695/8020 1401/1694/8021 1396/1696/8022 -f 1386/1697/8023 1400/1698/8024 1385/1693/8025 -f 1385/1693/8026 1400/1698/8027 1401/1694/8028 -f 1387/1699/8029 1399/1700/8030 1386/1697/8031 -f 1386/1697/8032 1399/1700/8033 1400/1698/8034 -f 1387/1701/8035 1388/1702/8036 1399/1703/8037 -f 1399/1703/8038 1388/1702/8039 1398/1704/8040 -f 1388/1702/8041 1389/1705/8042 1398/1704/8043 -f 1398/1704/8044 1389/1705/8045 1397/1706/8046 -f 1389/1705/8047 1384/1695/8048 1397/1706/8049 -f 1397/1706/8050 1384/1695/8051 1396/1696/8052 -f 1396/1696/8053 1390/1707/8054 1397/1706/8055 -f 1397/1706/8056 1390/1707/8057 1395/1708/8058 -f 1397/1706/8059 1395/1708/8060 1398/1704/8061 -f 1398/1704/8062 1395/1708/8063 1394/1709/8064 -f 1398/1704/8065 1394/1709/8066 1399/1703/8067 -f 1399/1703/8068 1394/1709/8069 1393/1710/8070 -f 1400/1698/8071 1399/1700/8072 1392/1711/8073 -f 1392/1711/8074 1399/1700/8075 1393/1712/8076 -f 1401/1694/8077 1400/1698/8078 1391/1713/8079 -f 1391/1713/8080 1400/1698/8081 1392/1711/8082 -f 1396/1696/8083 1401/1694/8084 1390/1707/8085 -f 1390/1707/8086 1401/1694/8087 1391/1713/8088 -f 1403/1714/8089 1419/1715/8090 1402/1716/8091 -f 1402/1716/8092 1419/1715/8093 1414/1717/8094 -f 1404/1718/8095 1418/1719/8096 1403/1714/8097 -f 1403/1714/8098 1418/1719/8099 1419/1715/8100 -f 1405/1720/8101 1417/1721/8102 1404/1718/8103 -f 1404/1718/8104 1417/1721/8105 1418/1719/8106 -f 1405/1722/8107 1406/1723/8108 1417/1724/8109 -f 1417/1724/8110 1406/1723/8111 1416/1725/8112 -f 1406/1723/8113 1407/1726/8114 1416/1725/8115 -f 1416/1725/8116 1407/1726/8117 1415/1727/8118 -f 1407/1726/8119 1402/1716/8120 1415/1727/8121 -f 1415/1727/8122 1402/1716/8123 1414/1717/8124 -f 1414/1717/8125 1408/1728/8126 1415/1727/8127 -f 1415/1727/8128 1408/1728/8129 1413/1729/8130 -f 1415/1727/8131 1413/1729/8132 1416/1725/8133 -f 1416/1725/8134 1413/1729/8135 1412/1730/8136 -f 1416/1725/8137 1412/1730/8138 1417/1724/8139 -f 1417/1724/8140 1412/1730/8141 1411/1731/8142 -f 1418/1719/8143 1417/1721/8144 1410/1732/8145 -f 1410/1732/8146 1417/1721/8147 1411/1733/8148 -f 1419/1715/8149 1418/1719/8150 1409/1734/8151 -f 1409/1734/8152 1418/1719/8153 1410/1732/8154 -f 1414/1717/8155 1419/1715/8156 1408/1728/8157 -f 1408/1728/8158 1419/1715/8159 1409/1734/8160 -f 1439/1735/8161 1485/1736/8162 1429/1737/8163 -f 1429/1737/8164 1485/1736/8165 1428/1738/8166 -f 1429/1739/8167 1432/1740/8168 1439/1741/8169 -f 1439/1741/8170 1432/1740/8171 1438/1742/8172 -f 1438/1742/8173 1432/1740/8174 1430/1743/8175 -f 1486/1744/8176 1437/1745/8177 1438/1746/8178 -f 1427/1747/8179 1426/1748/8180 1424/1749/8181 -f 1424/1749/8182 1426/1748/8183 1425/1750/8184 -f 1423/1751/8185 1422/1752/8186 1428/1738/8187 -f 1428/1738/8188 1422/1752/8189 1429/1737/8190 -f 1432/1740/8191 1433/1753/8192 1430/1743/8193 -f 1430/1743/8194 1433/1753/8195 1420/1754/8196 -f 1421/1755/8197 1431/1756/8198 1420/1757/8199 -f 1420/1757/8200 1431/1756/8201 1430/1758/8202 -f 1422/1759/8203 1423/1760/8204 1425/1750/8205 -f 1425/1750/8206 1423/1760/8207 1424/1749/8208 -f 1420/1754/8209 1433/1753/8210 1426/1748/8211 -f 1426/1748/8212 1433/1753/8213 1425/1750/8214 -f 1427/1747/8215 1421/1761/8216 1426/1748/8217 -f 1426/1748/8218 1421/1761/8219 1420/1754/8220 -f 1422/1752/8221 1435/1762/8222 1429/1737/8223 -f 1434/1763/8224 1436/1764/8225 1432/1740/8226 -f 1432/1740/8227 1436/1764/8228 1433/1753/8229 -f 1435/1765/8230 1434/1763/8231 1429/1739/8232 -f 1429/1739/8233 1434/1763/8234 1432/1740/8235 -f 1435/1765/8236 1422/1759/8237 1434/1763/8238 -f 1434/1763/8239 1422/1759/8240 1436/1764/8241 -f 1422/1759/8242 1425/1750/8243 1436/1764/8244 -f 1436/1764/8245 1425/1750/8246 1433/1753/8247 -f 1442/1766/8248 1439/1741/8249 1441/1767/8250 -f 1441/1767/8251 1439/1741/8252 1438/1742/8253 -f 1444/1768/8254 1442/1766/8255 1443/1769/8256 -f 1443/1769/8257 1442/1766/8258 1441/1767/8259 -f 1437/1770/8260 1440/1771/8261 1443/1769/8262 -f 1443/1769/8263 1440/1771/8264 1444/1768/8265 -f 1441/1772/8266 1438/1746/8267 1443/1773/8268 -f 1443/1773/8269 1438/1746/8270 1437/1745/8271 -f 1440/1774/8272 1439/1735/8273 1444/1775/8274 -f 1444/1775/8275 1439/1735/8276 1442/1776/8277 -f 1454/1777/8278 1456/1778/8279 1453/1779/8280 -f 1453/1779/8281 1456/1778/8282 1452/1780/8283 -f 1445/1781/8284 1455/1782/8285 1446/1783/8286 -f 1446/1783/8287 1455/1782/8288 1447/1784/8289 -f 1449/1785/8290 1448/1786/8291 1455/1782/8292 -f 1455/1782/8293 1448/1786/8294 1447/1784/8295 -f 1451/1787/8296 1450/1788/8297 1446/1789/8298 -f 1446/1789/8299 1450/1788/8300 1445/1790/8301 -f 1452/1791/8302 1451/1787/8303 1447/1792/8304 -f 1447/1792/8305 1451/1787/8306 1446/1789/8307 -f 1453/1793/8308 1452/1791/8309 1448/1794/8310 -f 1448/1794/8311 1452/1791/8312 1447/1792/8313 -f 1449/1795/8314 1454/1796/8315 1448/1794/8316 -f 1448/1794/8317 1454/1796/8318 1453/1793/8319 -f 1450/1797/8320 1451/1798/8321 1456/1778/8322 -f 1456/1778/8323 1451/1798/8324 1452/1780/8325 -f 1467/1799/8326 1468/1800/8327 1466/1801/8328 -f 1466/1801/8329 1468/1800/8330 1470/1802/8331 -f 1469/1803/8332 1459/1804/8333 1457/1805/8334 -f 1457/1805/8335 1459/1804/8336 1458/1806/8337 -f 1459/1804/8338 1469/1803/8339 1460/1807/8340 -f 1465/1808/8341 1466/1801/8342 1470/1802/8343 -f 1469/1803/8344 1462/1809/8345 1460/1807/8346 -f 1460/1807/8347 1462/1809/8348 1461/1810/8349 -f 1464/1811/8350 1463/1812/8351 1458/1813/8352 -f 1458/1813/8353 1463/1812/8354 1457/1814/8355 -f 1464/1811/8356 1458/1813/8357 1465/1815/8358 -f 1465/1815/8359 1458/1813/8360 1459/1816/8361 -f 1466/1817/8362 1465/1815/8363 1460/1818/8364 -f 1460/1818/8365 1465/1815/8366 1459/1816/8367 -f 1467/1819/8368 1466/1817/8369 1461/1820/8370 -f 1461/1820/8371 1466/1817/8372 1460/1818/8373 -f 1462/1821/8374 1468/1822/8375 1461/1820/8376 -f 1461/1820/8377 1468/1822/8378 1467/1819/8379 -f 1470/1802/8380 1463/1823/8381 1465/1808/8382 -f 1465/1808/8383 1463/1823/8384 1464/1824/8385 -f 1482/1825/8386 1484/1826/8387 1481/1827/8388 -f 1481/1827/8389 1484/1826/8390 1480/1828/8391 -f 1471/1829/8392 1483/1830/8393 1472/1831/8394 -f 1483/1830/8395 1473/1832/8396 1472/1831/8397 -f 1473/1832/8398 1483/1830/8399 1474/1833/8400 -f 1479/1834/8401 1480/1828/8402 1484/1826/8403 -f 1476/1835/8404 1475/1836/8405 1483/1830/8406 -f 1483/1830/8407 1475/1836/8408 1474/1833/8409 -f 1478/1837/8410 1477/1838/8411 1472/1839/8412 -f 1472/1839/8413 1477/1838/8414 1471/1840/8415 -f 1478/1837/8416 1472/1839/8417 1479/1841/8418 -f 1479/1841/8419 1472/1839/8420 1473/1842/8421 -f 1480/1843/8422 1479/1841/8423 1474/1844/8424 -f 1474/1844/8425 1479/1841/8426 1473/1842/8427 -f 1481/1845/8428 1480/1843/8429 1475/1846/8430 -f 1475/1846/8431 1480/1843/8432 1474/1844/8433 -f 1476/1847/8434 1482/1848/8435 1475/1846/8436 -f 1475/1846/8437 1482/1848/8438 1481/1845/8439 -f 1477/1849/8440 1478/1850/8441 1484/1826/8442 -f 1484/1826/8443 1478/1850/8444 1479/1834/8445 -f 1439/1735/8446 1440/1774/8447 1485/1736/8448 -f 1431/1756/8449 1486/1744/8450 1430/1758/8451 -f 1430/1758/8452 1486/1744/8453 1438/1746/8454 -f 1491/1851/8455 1492/1852/8456 1494/1853/8457 -f 1494/1853/8458 1492/1852/8459 1493/1854/8460 -f 1492/1855/8461 1491/1856/8462 1488/1857/8463 -f 1488/1857/8464 1491/1856/8465 1487/1858/8466 -f 1493/1859/8467 1492/1855/8468 1489/1860/8469 -f 1489/1860/8470 1492/1855/8471 1488/1857/8472 -f 1494/1861/8473 1493/1859/8474 1490/1862/8475 -f 1490/1862/8476 1493/1859/8477 1489/1860/8478 -f 1494/1861/8479 1490/1862/8480 1497/1863/8481 -f 1497/1863/8482 1490/1862/8483 1495/1864/8484 -f 1487/1865/8485 1490/1866/8486 1488/1867/8487 -f 1488/1867/8488 1490/1866/8489 1489/1868/8490 -f 1491/1856/8491 1498/1869/8492 1487/1858/8493 -f 1487/1858/8494 1498/1869/8495 1496/1870/8496 -f 1503/1871/8497 1504/1872/8498 1506/1873/8499 -f 1506/1873/8500 1504/1872/8501 1505/1874/8502 -f 1504/1875/8503 1503/1876/8504 1500/1877/8505 -f 1500/1877/8506 1503/1876/8507 1499/1878/8508 -f 1505/1879/8509 1504/1875/8510 1501/1880/8511 -f 1501/1880/8512 1504/1875/8513 1500/1877/8514 -f 1506/1881/8515 1505/1879/8516 1502/1882/8517 -f 1502/1882/8518 1505/1879/8519 1501/1880/8520 -f 1506/1881/8521 1502/1882/8522 1509/1883/8523 -f 1509/1883/8524 1502/1882/8525 1507/1884/8526 -f 1508/1885/8527 1507/1886/8528 1499/1887/8529 -f 1499/1887/8530 1507/1886/8531 1502/1888/8532 -f 1503/1876/8533 1510/1889/8534 1499/1878/8535 -f 1499/1878/8536 1510/1889/8537 1508/1890/8538 -f 1515/1891/8539 1516/1892/8540 1518/1893/8541 -f 1518/1893/8542 1516/1892/8543 1517/1894/8544 -f 1516/1895/8545 1515/1896/8546 1512/1897/8547 -f 1512/1897/8548 1515/1896/8549 1511/1898/8550 -f 1517/1899/8551 1516/1895/8552 1513/1900/8553 -f 1513/1900/8554 1516/1895/8555 1512/1897/8556 -f 1518/1901/8557 1517/1899/8558 1514/1902/8559 -f 1514/1902/8560 1517/1899/8561 1513/1900/8562 -f 1518/1901/8563 1514/1902/8564 1521/1903/8565 -f 1521/1903/8566 1514/1902/8567 1519/1904/8568 -f 1520/1905/8569 1519/1906/8570 1511/1907/8571 -f 1511/1907/8572 1519/1906/8573 1514/1908/8574 -f 1515/1896/8575 1522/1909/8576 1511/1898/8577 -f 1511/1898/8578 1522/1909/8579 1520/1910/8580 -f 1527/1911/8581 1528/1912/8582 1530/1913/8583 -f 1530/1913/8584 1528/1912/8585 1529/1914/8586 -f 1528/1915/8587 1527/1916/8588 1524/1917/8589 -f 1524/1917/8590 1527/1916/8591 1523/1918/8592 -f 1529/1919/8593 1528/1915/8594 1525/1920/8595 -f 1525/1920/8596 1528/1915/8597 1524/1917/8598 -f 1530/1921/8599 1529/1919/8600 1526/1922/8601 -f 1526/1922/8602 1529/1919/8603 1525/1920/8604 -f 1530/1921/8605 1526/1922/8606 1533/1923/8607 -f 1533/1923/8608 1526/1922/8609 1531/1924/8610 -f 1532/1925/8611 1531/1926/8612 1523/1927/8613 -f 1523/1927/8614 1531/1926/8615 1526/1928/8616 -f 1527/1916/8617 1534/1929/8618 1523/1918/8619 -f 1523/1918/8620 1534/1929/8621 1532/1930/8622 -f 1545/1931/8623 1541/1932/8624 1542/1933/8625 -f 1540/1934/8626 1539/1935/8627 1536/1936/8628 -f 1536/1936/8629 1539/1935/8630 1535/1937/8631 -f 1541/1938/8632 1540/1934/8633 1537/1939/8634 -f 1537/1939/8635 1540/1934/8636 1536/1936/8637 -f 1542/1940/8638 1541/1938/8639 1538/1941/8640 -f 1538/1941/8641 1541/1938/8642 1537/1939/8643 -f 1542/1940/8644 1538/1941/8645 1545/1942/8646 -f 1545/1942/8647 1538/1941/8648 1543/1943/8649 -f 1537/1944/8650 1543/1945/8651 1538/1946/8652 -f 1539/1935/8653 1546/1947/8654 1535/1937/8655 -f 1535/1937/8656 1546/1947/8657 1544/1948/8658 -f 1551/1949/8659 1554/1950/8660 1558/1951/8661 -f 1558/1951/8662 1554/1950/8663 1557/1952/8664 -f 1552/1953/8665 1551/1954/8666 1548/1955/8667 -f 1548/1955/8668 1551/1954/8669 1547/1956/8670 -f 1553/1957/8671 1552/1953/8672 1549/1958/8673 -f 1549/1958/8674 1552/1953/8675 1548/1955/8676 -f 1554/1959/8677 1553/1957/8678 1550/1960/8679 -f 1550/1960/8680 1553/1957/8681 1549/1958/8682 -f 1554/1959/8683 1550/1960/8684 1557/1961/8685 -f 1557/1961/8686 1550/1960/8687 1555/1962/8688 -f 1556/1963/8689 1555/1964/8690 1547/1965/8691 -f 1547/1965/8692 1555/1964/8693 1550/1966/8694 -f 1551/1954/8695 1558/1967/8696 1547/1956/8697 -f 1547/1956/8698 1558/1967/8699 1556/1968/8700 -f 1564/1969/8701 1581/1970/8702 1562/1971/8703 -f 1562/1971/8704 1581/1970/8705 1559/1972/8706 -f 1574/1973/8707 1577/1974/8708 1572/1975/8709 -f 1572/1975/8710 1577/1974/8711 1571/1976/8712 -f 1572/1977/8713 1571/1978/8714 1562/1979/8715 -f 1562/1979/8716 1571/1978/8717 1561/1980/8718 -f 1569/1981/8719 1579/1982/8720 1559/1983/8721 -f 1559/1983/8722 1579/1982/8723 1580/1984/8724 -f 1573/1985/8725 1570/1986/8726 1563/1987/8727 -f 1563/1987/8728 1570/1986/8729 1560/1988/8730 -f 1576/1989/8731 1573/1985/8732 1566/1990/8733 -f 1566/1990/8734 1573/1985/8735 1563/1987/8736 -f 1578/1991/8737 1576/1989/8738 1568/1992/8739 -f 1568/1992/8740 1576/1989/8741 1566/1990/8742 -f 1575/1993/8743 1578/1991/8744 1565/1994/8745 -f 1565/1994/8746 1578/1991/8747 1568/1992/8748 -f 1574/1995/8749 1575/1993/8750 1564/1996/8751 -f 1564/1996/8752 1575/1993/8753 1565/1994/8754 -f 1574/1995/8755 1564/1996/8756 1577/1997/8757 -f 1577/1997/8758 1564/1996/8759 1567/1998/8760 -f 1571/1978/8761 1577/1997/8762 1561/1980/8763 -f 1561/1980/8764 1577/1997/8765 1567/1998/8766 -f 1569/1999/8767 1572/1975/8768 1579/2000/8769 -f 1572/1977/8770 1562/1979/8771 1579/1982/8772 -f 1579/1982/8773 1562/1979/8774 1580/1984/8775 -f 1562/1971/8776 1559/1972/8777 1580/2001/8778 -f 1564/1969/8779 1562/1971/8780 1567/2002/8781 -f 1567/2002/8782 1562/1971/8783 1561/2003/8784 -f 1581/1970/8785 1565/2004/8786 1560/2005/8787 -f 1560/2005/8788 1565/2004/8789 1563/2006/8790 -f 1581/1970/8791 1564/1969/8792 1565/2004/8793 -f 1565/2004/8794 1568/2007/8795 1563/2006/8796 -f 1563/2006/8797 1568/2007/8798 1566/2008/8799 -f 1582/2009/8800 1575/2010/8801 1574/1973/8802 -f 1574/1973/8803 1572/1975/8804 1582/2009/8805 -f 1582/2009/8806 1572/1975/8807 1569/1999/8808 -f 1576/2011/8809 1578/2012/8810 1573/2013/8811 -f 1573/2013/8812 1578/2012/8813 1575/2010/8814 -f 1573/2013/8815 1575/2010/8816 1570/2014/8817 -f 1570/2014/8818 1575/2010/8819 1582/2009/8820 -f 1588/2015/8821 1605/2016/8822 1586/2017/8823 -f 1586/2017/8824 1605/2016/8825 1583/2018/8826 -f 1598/2019/8827 1601/2020/8828 1596/2021/8829 -f 1596/2021/8830 1601/2020/8831 1595/2022/8832 -f 1596/2023/8833 1595/2024/8834 1586/2025/8835 -f 1586/2025/8836 1595/2024/8837 1585/2026/8838 -f 1593/2027/8839 1603/2028/8840 1583/2029/8841 -f 1583/2029/8842 1603/2028/8843 1604/2030/8844 -f 1597/2031/8845 1594/2032/8846 1587/2033/8847 -f 1587/2033/8848 1594/2032/8849 1584/2034/8850 -f 1600/2035/8851 1597/2031/8852 1590/2036/8853 -f 1590/2036/8854 1597/2031/8855 1587/2033/8856 -f 1602/2037/8857 1600/2035/8858 1592/2038/8859 -f 1592/2038/8860 1600/2035/8861 1590/2036/8862 -f 1599/2039/8863 1602/2037/8864 1589/2040/8865 -f 1589/2040/8866 1602/2037/8867 1592/2038/8868 -f 1598/2041/8869 1599/2039/8870 1588/2042/8871 -f 1588/2042/8872 1599/2039/8873 1589/2040/8874 -f 1598/2041/8875 1588/2042/8876 1601/2043/8877 -f 1601/2043/8878 1588/2042/8879 1591/2044/8880 -f 1595/2024/8881 1601/2043/8882 1585/2026/8883 -f 1585/2026/8884 1601/2043/8885 1591/2044/8886 -f 1593/2045/8887 1596/2021/8888 1603/2046/8889 -f 1596/2023/8890 1586/2025/8891 1603/2028/8892 -f 1603/2028/8893 1586/2025/8894 1604/2030/8895 -f 1586/2017/8896 1583/2018/8897 1604/2047/8898 -f 1588/2015/8899 1586/2017/8900 1591/2048/8901 -f 1591/2048/8902 1586/2017/8903 1585/2049/8904 -f 1605/2016/8905 1589/2050/8906 1584/2051/8907 -f 1584/2051/8908 1589/2050/8909 1587/2052/8910 -f 1605/2016/8911 1588/2015/8912 1589/2050/8913 -f 1589/2050/8914 1592/2053/8915 1587/2052/8916 -f 1587/2052/8917 1592/2053/8918 1590/2054/8919 -f 1606/2055/8920 1599/2056/8921 1598/2019/8922 -f 1598/2019/8923 1596/2021/8924 1606/2055/8925 -f 1606/2055/8926 1596/2021/8927 1593/2045/8928 -f 1600/2057/8929 1602/2058/8930 1597/2059/8931 -f 1597/2059/8932 1602/2058/8933 1599/2056/8934 -f 1597/2059/8935 1599/2056/8936 1594/2060/8937 -f 1594/2060/8938 1599/2056/8939 1606/2055/8940 -f 1616/2061/8941 1615/2062/8942 1608/2063/8943 -f 1608/2063/8944 1615/2062/8945 1607/2064/8946 -f 1618/2065/8947 1617/2066/8948 1610/2067/8949 -f 1610/2067/8950 1617/2066/8951 1609/2068/8952 -f 1621/2069/8953 1618/2065/8954 1613/2070/8955 -f 1613/2070/8956 1618/2065/8957 1610/2067/8958 -f 1622/2071/8959 1621/2069/8960 1614/2072/8961 -f 1614/2072/8962 1621/2069/8963 1613/2070/8964 -f 1619/2073/8965 1620/2074/8966 1611/2075/8967 -f 1611/2075/8968 1620/2074/8969 1612/2076/8970 -f 1615/2062/8971 1619/2073/8972 1607/2064/8973 -f 1607/2064/8974 1619/2073/8975 1611/2075/8976 -f 1616/2061/8977 1608/2063/8978 1624/2077/8979 -f 1624/2077/8980 1608/2063/8981 1623/2078/8982 -f 1612/2079/8983 1608/2080/8984 1611/2081/8985 -f 1611/2081/8986 1608/2080/8987 1607/2082/8988 -f 1624/2083/8989 1626/2084/8990 1616/2085/8991 -f 1616/2085/8992 1626/2084/8993 1620/2086/8994 -f 1620/2074/8995 1626/2087/8996 1612/2076/8997 -f 1612/2076/8998 1626/2087/8999 1625/2088/9000 -f 1622/2071/9001 1614/2072/9002 1629/2089/9003 -f 1629/2089/9004 1614/2072/9005 1627/2090/9006 -f 1628/2091/9007 1627/2092/9008 1609/2093/9009 -f 1609/2093/9010 1627/2092/9011 1614/2094/9012 -f 1617/2095/9013 1618/2096/9014 1622/2097/9015 -f 1622/2097/9016 1618/2096/9017 1621/2098/9018 -f 1617/2066/9019 1630/2099/9020 1609/2068/9021 -f 1609/2068/9022 1630/2099/9023 1628/2100/9024 -f 1636/2101/9025 1653/2102/9026 1634/2103/9027 -f 1634/2103/9028 1653/2102/9029 1631/2104/9030 -f 1646/2105/9031 1649/2106/9032 1644/2107/9033 -f 1644/2107/9034 1649/2106/9035 1643/2108/9036 -f 1644/2109/9037 1643/2110/9038 1634/2111/9039 -f 1634/2111/9040 1643/2110/9041 1633/2112/9042 -f 1641/2113/9043 1651/2114/9044 1631/2115/9045 -f 1631/2115/9046 1651/2114/9047 1652/2116/9048 -f 1645/2117/9049 1642/2118/9050 1635/2119/9051 -f 1635/2119/9052 1642/2118/9053 1632/2120/9054 -f 1648/2121/9055 1645/2117/9056 1638/2122/9057 -f 1638/2122/9058 1645/2117/9059 1635/2119/9060 -f 1650/2123/9061 1648/2121/9062 1640/2124/9063 -f 1640/2124/9064 1648/2121/9065 1638/2122/9066 -f 1647/2125/9067 1650/2123/9068 1637/2126/9069 -f 1637/2126/9070 1650/2123/9071 1640/2124/9072 -f 1646/2127/9073 1647/2125/9074 1636/2128/9075 -f 1636/2128/9076 1647/2125/9077 1637/2126/9078 -f 1646/2127/9079 1636/2128/9080 1649/2129/9081 -f 1649/2129/9082 1636/2128/9083 1639/2130/9084 -f 1643/2110/9085 1649/2129/9086 1633/2112/9087 -f 1633/2112/9088 1649/2129/9089 1639/2130/9090 -f 1641/2131/9091 1644/2107/9092 1651/2132/9093 -f 1644/2109/9094 1634/2111/9095 1651/2114/9096 -f 1651/2114/9097 1634/2111/9098 1652/2116/9099 -f 1634/2103/9100 1631/2104/9101 1652/2133/9102 -f 1636/2101/9103 1634/2103/9104 1639/2134/9105 -f 1639/2134/9106 1634/2103/9107 1633/2135/9108 -f 1653/2102/9109 1637/2136/9110 1632/2137/9111 -f 1632/2137/9112 1637/2136/9113 1635/2138/9114 -f 1653/2102/9115 1636/2101/9116 1637/2136/9117 -f 1637/2136/9118 1640/2139/9119 1635/2138/9120 -f 1635/2138/9121 1640/2139/9122 1638/2140/9123 -f 1654/2141/9124 1647/2142/9125 1646/2105/9126 -f 1646/2105/9127 1644/2107/9128 1654/2141/9129 -f 1654/2141/9130 1644/2107/9131 1641/2131/9132 -f 1648/2143/9133 1650/2144/9134 1645/2145/9135 -f 1645/2145/9136 1650/2144/9137 1647/2142/9138 -f 1645/2145/9139 1647/2142/9140 1642/2146/9141 -f 1642/2146/9142 1647/2142/9143 1654/2141/9144 -f 1664/2147/9145 1663/2148/9146 1656/2149/9147 -f 1656/2149/9148 1663/2148/9149 1655/2150/9150 -f 1666/2151/9151 1665/2152/9152 1658/2153/9153 -f 1658/2153/9154 1665/2152/9155 1657/2154/9156 -f 1669/2155/9157 1666/2151/9158 1661/2156/9159 -f 1661/2156/9160 1666/2151/9161 1658/2153/9162 -f 1670/2157/9163 1669/2155/9164 1662/2158/9165 -f 1662/2158/9166 1669/2155/9167 1661/2156/9168 -f 1667/2159/9169 1668/2160/9170 1659/2161/9171 -f 1659/2161/9172 1668/2160/9173 1660/2162/9174 -f 1663/2148/9175 1667/2159/9176 1655/2150/9177 -f 1655/2150/9178 1667/2159/9179 1659/2161/9180 -f 1664/2147/9181 1656/2149/9182 1672/2163/9183 -f 1672/2163/9184 1656/2149/9185 1671/2164/9186 -f 1660/2165/9187 1656/2166/9188 1659/2167/9189 -f 1659/2167/9190 1656/2166/9191 1655/2168/9192 -f 1672/2169/9193 1674/2170/9194 1664/2171/9195 -f 1664/2171/9196 1674/2170/9197 1668/2172/9198 -f 1668/2160/9199 1674/2173/9200 1660/2162/9201 -f 1660/2162/9202 1674/2173/9203 1673/2174/9204 -f 1670/2157/9205 1662/2158/9206 1677/2175/9207 -f 1677/2175/9208 1662/2158/9209 1675/2176/9210 -f 1657/2177/9211 1662/2178/9212 1658/2179/9213 -f 1658/2179/9214 1662/2178/9215 1661/2180/9216 -f 1665/2181/9217 1666/2182/9218 1670/2183/9219 -f 1670/2183/9220 1666/2182/9221 1669/2184/9222 -f 1665/2152/9223 1678/2185/9224 1657/2154/9225 -f 1657/2154/9226 1678/2185/9227 1676/2186/9228 -f 1684/2187/9229 1701/2188/9230 1682/2189/9231 -f 1682/2189/9232 1701/2188/9233 1679/2190/9234 -f 1694/2191/9235 1697/2192/9236 1692/2193/9237 -f 1692/2193/9238 1697/2192/9239 1691/2194/9240 -f 1692/2195/9241 1691/2196/9242 1682/2197/9243 -f 1682/2197/9244 1691/2196/9245 1681/2198/9246 -f 1689/2199/9247 1699/2200/9248 1679/2201/9249 -f 1679/2201/9250 1699/2200/9251 1700/2202/9252 -f 1693/2203/9253 1690/2204/9254 1683/2205/9255 -f 1683/2205/9256 1690/2204/9257 1680/2206/9258 -f 1696/2207/9259 1693/2203/9260 1686/2208/9261 -f 1686/2208/9262 1693/2203/9263 1683/2205/9264 -f 1698/2209/9265 1696/2207/9266 1688/2210/9267 -f 1688/2210/9268 1696/2207/9269 1686/2208/9270 -f 1695/2211/9271 1698/2209/9272 1685/2212/9273 -f 1685/2212/9274 1698/2209/9275 1688/2210/9276 -f 1694/2213/9277 1695/2211/9278 1684/2214/9279 -f 1684/2214/9280 1695/2211/9281 1685/2212/9282 -f 1694/2213/9283 1684/2214/9284 1697/2215/9285 -f 1697/2215/9286 1684/2214/9287 1687/2216/9288 -f 1691/2196/9289 1697/2215/9290 1681/2198/9291 -f 1681/2198/9292 1697/2215/9293 1687/2216/9294 -f 1689/2217/9295 1692/2193/9296 1699/2218/9297 -f 1692/2195/9298 1682/2197/9299 1699/2200/9300 -f 1699/2200/9301 1682/2197/9302 1700/2202/9303 -f 1682/2189/9304 1679/2190/9305 1700/2219/9306 -f 1684/2187/9307 1682/2189/9308 1687/2220/9309 -f 1687/2220/9310 1682/2189/9311 1681/2221/9312 -f 1701/2188/9313 1685/2222/9314 1680/2223/9315 -f 1680/2223/9316 1685/2222/9317 1683/2224/9318 -f 1701/2188/9319 1684/2187/9320 1685/2222/9321 -f 1685/2222/9322 1688/2225/9323 1683/2224/9324 -f 1683/2224/9325 1688/2225/9326 1686/2226/9327 -f 1702/2227/9328 1695/2228/9329 1694/2191/9330 -f 1694/2191/9331 1692/2193/9332 1702/2227/9333 -f 1702/2227/9334 1692/2193/9335 1689/2217/9336 -f 1696/2229/9337 1698/2230/9338 1693/2231/9339 -f 1693/2231/9340 1698/2230/9341 1695/2228/9342 -f 1693/2231/9343 1695/2228/9344 1690/2232/9345 -f 1690/2232/9346 1695/2228/9347 1702/2227/9348 -f 1723/2233/9349 1708/2234/9350 1709/2235/9351 -f 1718/2236/9352 1721/2237/9353 1716/2238/9354 -f 1716/2238/9355 1721/2237/9356 1715/2239/9357 -f 1716/2240/9358 1715/2241/9359 1706/2242/9360 -f 1706/2242/9361 1715/2241/9362 1705/2243/9363 -f 1713/2244/9364 1716/2240/9365 1703/2245/9366 -f 1703/2245/9367 1716/2240/9368 1706/2242/9369 -f 1717/2246/9370 1714/2247/9371 1707/2248/9372 -f 1707/2248/9373 1714/2247/9374 1704/2249/9375 -f 1720/2250/9376 1717/2246/9377 1710/2251/9378 -f 1710/2251/9379 1717/2246/9380 1707/2248/9381 -f 1722/2252/9382 1720/2250/9383 1712/2253/9384 -f 1712/2253/9385 1720/2250/9386 1710/2251/9387 -f 1719/2254/9388 1722/2252/9389 1709/2255/9390 -f 1709/2255/9391 1722/2252/9392 1712/2253/9393 -f 1718/2256/9394 1719/2254/9395 1708/2257/9396 -f 1708/2257/9397 1719/2254/9398 1709/2255/9399 -f 1718/2256/9400 1708/2257/9401 1721/2258/9402 -f 1721/2258/9403 1708/2257/9404 1711/2259/9405 -f 1715/2241/9406 1721/2258/9407 1705/2243/9408 -f 1705/2243/9409 1721/2258/9410 1711/2259/9411 -f 1708/2234/9412 1706/2260/9413 1711/2261/9414 -f 1711/2261/9415 1706/2260/9416 1705/2262/9417 -f 1709/2235/9418 1712/2263/9419 1707/2264/9420 -f 1707/2264/9421 1712/2263/9422 1710/2265/9423 -f 1723/2233/9424 1709/2235/9425 1704/2266/9426 -f 1704/2266/9427 1709/2235/9428 1707/2264/9429 -f 1708/2234/9430 1723/2233/9431 1706/2260/9432 -f 1706/2260/9433 1723/2233/9434 1703/2267/9435 -f 1724/2268/9436 1719/2269/9437 1718/2236/9438 -f 1718/2236/9439 1716/2238/9440 1724/2268/9441 -f 1724/2268/9442 1716/2238/9443 1713/2270/9444 -f 1720/2271/9445 1722/2272/9446 1717/2273/9447 -f 1717/2273/9448 1722/2272/9449 1719/2269/9450 -f 1717/2273/9451 1719/2269/9452 1714/2274/9453 -f 1714/2274/9454 1719/2269/9455 1724/2268/9456 -f 1730/2275/9457 1729/2276/9458 1726/2277/9459 -f 1726/2277/9460 1729/2276/9461 1725/2278/9462 -f 1731/2279/9463 1730/2275/9464 1727/2280/9465 -f 1727/2280/9466 1730/2275/9467 1726/2277/9468 -f 1732/2281/9469 1731/2279/9470 1728/2282/9471 -f 1728/2282/9472 1731/2279/9473 1727/2280/9474 -f 1729/2283/9475 1732/2281/9476 1725/2284/9477 -f 1725/2284/9478 1732/2281/9479 1728/2282/9480 -f 1738/2285/9481 1737/2286/9482 1734/2287/9483 -f 1734/2287/9484 1737/2286/9485 1733/2288/9486 -f 1739/2289/9487 1738/2285/9488 1735/2290/9489 -f 1735/2290/9490 1738/2285/9491 1734/2287/9492 -f 1740/2291/9493 1739/2289/9494 1736/2292/9495 -f 1736/2292/9496 1739/2289/9497 1735/2290/9498 -f 1737/2293/9499 1740/2291/9500 1733/2294/9501 -f 1733/2294/9502 1740/2291/9503 1736/2292/9504 -f 1746/2295/9505 1745/2296/9506 1742/2297/9507 -f 1742/2297/9508 1745/2296/9509 1741/2298/9510 -f 1747/2299/9511 1746/2295/9512 1743/2300/9513 -f 1743/2300/9514 1746/2295/9515 1742/2297/9516 -f 1748/2301/9517 1747/2299/9518 1744/2302/9519 -f 1744/2302/9520 1747/2299/9521 1743/2300/9522 -f 1745/2303/9523 1748/2301/9524 1741/2304/9525 -f 1741/2304/9526 1748/2301/9527 1744/2302/9528 -f 1676/2305/9529 1675/2306/9530 1657/2177/9531 -f 1657/2177/9532 1675/2306/9533 1662/2178/9534 -f 1673/2307/9535 1671/2308/9536 1660/2165/9537 -f 1660/2165/9538 1671/2308/9539 1656/2166/9540 -f 1668/2172/9541 1667/2309/9542 1664/2171/9543 -f 1664/2171/9544 1667/2309/9545 1663/2310/9546 -f 1677/2311/9547 1678/2312/9548 1670/2183/9549 -f 1670/2183/9550 1678/2312/9551 1665/2181/9552 -f 1625/2313/9553 1623/2314/9554 1612/2079/9555 -f 1612/2079/9556 1623/2314/9557 1608/2080/9558 -f 1609/2093/9559 1614/2094/9560 1610/2315/9561 -f 1610/2315/9562 1614/2094/9563 1613/2316/9564 -f 1629/2317/9565 1630/2318/9566 1622/2097/9567 -f 1622/2097/9568 1630/2318/9569 1617/2095/9570 -f 1620/2086/9571 1619/2319/9572 1616/2085/9573 -f 1616/2085/9574 1619/2319/9575 1615/2320/9576 -f 1551/1949/9577 1552/2321/9578 1554/1950/9579 -f 1554/1950/9580 1552/2321/9581 1553/2322/9582 -f 1494/1853/9583 1497/2323/9584 1491/1851/9585 -f 1491/1851/9586 1497/2323/9587 1498/2324/9588 -f 1496/2325/9589 1495/2326/9590 1487/1865/9591 -f 1487/1865/9592 1495/2326/9593 1490/1866/9594 -f 1547/1965/9595 1550/1966/9596 1548/2327/9597 -f 1548/2327/9598 1550/1966/9599 1549/2328/9600 -f 1544/2329/9601 1536/2330/9602 1535/2331/9603 -f 1544/2329/9604 1543/1945/9605 1537/1944/9606 -f 1544/2329/9607 1537/1944/9608 1536/2330/9609 -f 1546/2332/9610 1540/2333/9611 1541/1932/9612 -f 1546/2332/9613 1541/1932/9614 1545/1931/9615 -f 1539/2334/9616 1540/2333/9617 1546/2332/9618 -f 1523/1927/9619 1526/1928/9620 1524/2335/9621 -f 1524/2335/9622 1526/1928/9623 1525/2336/9624 -f 1511/1907/9625 1514/1908/9626 1512/2337/9627 -f 1512/2337/9628 1514/1908/9629 1513/2338/9630 -f 1499/1887/9631 1502/1888/9632 1500/2339/9633 -f 1500/2339/9634 1502/1888/9635 1501/2340/9636 -f 1506/1873/9637 1509/2341/9638 1503/1871/9639 -f 1503/1871/9640 1509/2341/9641 1510/2342/9642 -f 1515/1891/9643 1518/1893/9644 1522/2343/9645 -f 1522/2343/9646 1518/1893/9647 1521/2344/9648 -f 1527/1911/9649 1530/1913/9650 1534/2345/9651 -f 1534/2345/9652 1530/1913/9653 1533/2346/9654 -f 1758/2347/9655 1805/2348/9656 1756/2349/9657 -f 1752/2350/9658 1749/2351/9659 1755/2352/9660 -f 1782/2353/9661 1765/2354/9662 1766/2355/9663 -f 1766/2356/9664 1765/2357/9665 1752/2358/9666 -f 1752/2358/9667 1765/2357/9668 1751/2359/9669 -f 1767/2360/9670 1766/2356/9671 1753/2361/9672 -f 1753/2361/9673 1766/2356/9674 1752/2358/9675 -f 1769/2362/9676 1767/2360/9677 1755/2363/9678 -f 1755/2363/9679 1767/2360/9680 1753/2361/9681 -f 1763/2364/9682 1769/2362/9683 1749/2365/9684 -f 1749/2365/9685 1769/2362/9686 1755/2363/9687 -f 1768/2366/9688 1764/2367/9689 1754/2368/9690 -f 1754/2368/9691 1764/2367/9692 1750/2369/9693 -f 1773/2370/9694 1768/2366/9695 1759/2371/9696 -f 1759/2371/9697 1768/2366/9698 1754/2368/9699 -f 1775/2372/9700 1773/2370/9701 1761/2373/9702 -f 1761/2373/9703 1773/2370/9704 1759/2371/9705 -f 1776/2374/9706 1775/2372/9707 1762/2375/9708 -f 1762/2375/9709 1775/2372/9710 1761/2373/9711 -f 1762/2375/9712 1757/2376/9713 1776/2374/9714 -f 1776/2374/9715 1757/2376/9716 1771/2377/9717 -f 1772/2378/9718 1771/2377/9719 1758/2379/9720 -f 1758/2379/9721 1771/2377/9722 1757/2376/9723 -f 1770/2380/9724 1772/2378/9725 1756/2381/9726 -f 1756/2381/9727 1772/2378/9728 1758/2379/9729 -f 1774/2382/9730 1770/2380/9731 1760/2383/9732 -f 1760/2383/9733 1770/2380/9734 1756/2381/9735 -f 1765/2357/9736 1782/2384/9737 1751/2359/9738 -f 1751/2359/9739 1782/2384/9740 1779/2385/9741 -f 1772/2386/9742 1776/2387/9743 1771/2388/9744 -f 1779/2385/9745 1778/2389/9746 1760/2383/9747 -f 1760/2383/9748 1778/2389/9749 1774/2382/9750 -f 1779/2385/9751 1782/2384/9752 1778/2389/9753 -f 1784/2390/9754 1777/2391/9755 1786/2392/9756 -f 1786/2392/9757 1777/2391/9758 1778/2393/9759 -f 1785/2394/9760 1782/2353/9761 1783/2395/9762 -f 1783/2395/9763 1782/2353/9764 1781/2396/9765 -f 1778/2389/9766 1782/2384/9767 1786/2397/9768 -f 1786/2397/9769 1782/2384/9770 1785/2398/9771 -f 1788/2399/9772 1784/2390/9773 1786/2392/9774 -f 1783/2395/9775 1787/2400/9776 1785/2394/9777 -f 1786/2397/9778 1785/2398/9779 1788/2401/9780 -f 1788/2401/9781 1785/2398/9782 1787/2402/9783 -f 1789/2403/9784 1790/2404/9785 1791/2405/9786 -f 1791/2405/9787 1790/2404/9788 1792/2406/9789 -f 1795/2407/9790 1796/2408/9791 1789/2403/9792 -f 1789/2403/9793 1796/2408/9794 1790/2404/9795 -f 1790/2404/9796 1796/2409/9797 1792/2406/9798 -f 1792/2406/9799 1796/2409/9800 1794/2410/9801 -f 1793/2411/9802 1795/2412/9803 1791/2405/9804 -f 1791/2405/9805 1795/2412/9806 1789/2403/9807 -f 1797/2413/9808 1798/2414/9809 1799/2415/9810 -f 1799/2415/9811 1798/2414/9812 1800/2416/9813 -f 1803/2417/9814 1804/2418/9815 1797/2413/9816 -f 1797/2413/9817 1804/2418/9818 1798/2414/9819 -f 1798/2414/9820 1804/2419/9821 1800/2416/9822 -f 1800/2416/9823 1804/2419/9824 1802/2420/9825 -f 1801/2421/9826 1803/2422/9827 1799/2415/9828 -f 1799/2415/9829 1803/2422/9830 1797/2413/9831 -f 1779/2423/9832 1752/2350/9833 1751/2424/9834 -f 1756/2349/9835 1779/2423/9836 1760/2425/9837 -f 1779/2423/9838 1780/2426/9839 1752/2350/9840 -f 1752/2350/9841 1780/2426/9842 1749/2351/9843 -f 1752/2350/9844 1755/2352/9845 1753/2427/9846 -f 1762/2428/9847 1758/2347/9848 1757/2429/9849 -f 1754/2430/9850 1762/2428/9851 1759/2431/9852 -f 1759/2431/9853 1762/2428/9854 1761/2432/9855 -f 1754/2430/9856 1750/2433/9857 1762/2428/9858 -f 1750/2433/9859 1805/2348/9860 1762/2428/9861 -f 1762/2428/9862 1805/2348/9863 1758/2347/9864 -f 1805/2348/9865 1780/2426/9866 1756/2349/9867 -f 1756/2349/9868 1780/2426/9869 1779/2423/9870 -f 1806/2434/9871 1770/2435/9872 1777/2391/9873 -f 1777/2391/9874 1770/2435/9875 1778/2393/9876 -f 1770/2435/9877 1806/2434/9878 1772/2386/9879 -f 1768/2436/9880 1773/2437/9881 1776/2387/9882 -f 1776/2387/9883 1773/2437/9884 1775/2438/9885 -f 1806/2434/9886 1764/2439/9887 1772/2386/9888 -f 1772/2386/9889 1764/2439/9890 1776/2387/9891 -f 1764/2439/9892 1768/2436/9893 1776/2387/9894 -f 1778/2393/9895 1770/2435/9896 1774/2440/9897 -f 1782/2353/9898 1766/2355/9899 1781/2396/9900 -f 1769/2441/9901 1766/2355/9902 1767/2442/9903 -f 1763/2443/9904 1766/2355/9905 1769/2441/9906 -f 1781/2396/9907 1766/2355/9908 1763/2443/9909 -f 1809/2444/9910 1808/2445/9911 1818/2446/9912 -f 1818/2446/9913 1808/2445/9914 1819/2447/9915 -f 1832/2448/9916 1831/2449/9917 1833/2450/9918 -f 1833/2450/9919 1831/2449/9920 1823/2451/9921 -f 1831/2449/9922 1830/2452/9923 1823/2451/9924 -f 1830/2452/9925 1838/2453/9926 1823/2451/9927 -f 1823/2451/9928 1838/2453/9929 1824/2454/9930 -f 1824/2454/9931 1838/2453/9932 1825/2455/9933 -f 1825/2455/9934 1838/2453/9935 1826/2456/9936 -f 1838/2453/9937 1829/2457/9938 1826/2456/9939 -f 1829/2457/9940 1828/2458/9941 1826/2456/9942 -f 1828/2458/9943 1827/2459/9944 1826/2456/9945 -f 1825/2455/9946 1834/2460/9947 1824/2454/9948 -f 1824/2454/9949 1834/2460/9950 1835/2461/9951 -f 1807/2462/9952 1823/2463/9953 1808/2445/9954 -f 1808/2445/9955 1823/2463/9956 1824/2464/9957 -f 1807/2462/9958 1817/2465/9959 1823/2463/9960 -f 1823/2463/9961 1817/2465/9962 1833/2466/9963 -f 1817/2465/9964 1816/2467/9965 1833/2466/9966 -f 1833/2466/9967 1816/2467/9968 1832/2468/9969 -f 1816/2467/9970 1815/2469/9971 1832/2468/9972 -f 1832/2468/9973 1815/2469/9974 1831/2470/9975 -f 1814/2471/9976 1830/2472/9977 1815/2469/9978 -f 1815/2469/9979 1830/2472/9980 1831/2470/9981 -f 1814/2471/9982 1820/2473/9983 1830/2472/9984 -f 1830/2472/9985 1820/2473/9986 1836/2474/9987 -f 1820/2473/9988 1821/2475/9989 1836/2476/9990 -f 1836/2476/9991 1821/2475/9992 1837/2477/9993 -f 1822/2478/9994 1838/2479/9995 1821/2475/9996 -f 1821/2475/9997 1838/2479/9998 1837/2480/9999 -f 1813/2481/10000 1829/2482/10001 1822/2478/10002 -f 1822/2478/10003 1829/2482/10004 1838/2479/10005 -f 1813/2481/10006 1812/2483/10007 1829/2482/10008 -f 1829/2482/10009 1812/2483/10010 1828/2484/10011 -f 1812/2483/10012 1811/2485/10013 1828/2484/10014 -f 1828/2484/10015 1811/2485/10016 1827/2486/10017 -f 1811/2485/10018 1810/2487/10019 1827/2486/10020 -f 1827/2486/10021 1810/2487/10022 1826/2488/10023 -f 1810/2487/10024 1809/2444/10025 1826/2488/10026 -f 1826/2488/10027 1809/2444/10028 1825/2489/10029 -f 1809/2444/10030 1818/2446/10031 1825/2489/10032 -f 1825/2489/10033 1818/2446/10034 1834/2490/10035 -f 1818/2446/10036 1819/2447/10037 1834/2491/10038 -f 1834/2491/10039 1819/2447/10040 1835/2492/10041 -f 1835/2493/10042 1819/2447/10043 1824/2464/10044 -f 1824/2464/10045 1819/2447/10046 1808/2445/10047 -f 1814/2471/10048 1822/2478/10049 1820/2473/10050 -f 1820/2473/10051 1822/2478/10052 1821/2475/10053 -f 1816/2467/10054 1817/2465/10055 1815/2469/10056 -f 1817/2465/10057 1807/2462/10058 1815/2469/10059 -f 1815/2469/10060 1807/2462/10061 1814/2471/10062 -f 1814/2471/10063 1807/2462/10064 1822/2478/10065 -f 1807/2462/10066 1808/2445/10067 1822/2478/10068 -f 1808/2445/10069 1809/2444/10070 1822/2478/10071 -f 1809/2444/10072 1810/2487/10073 1822/2478/10074 -f 1822/2478/10075 1810/2487/10076 1813/2481/10077 -f 1810/2487/10078 1811/2485/10079 1813/2481/10080 -f 1811/2485/10081 1812/2483/10082 1813/2481/10083 -f 1830/2452/10084 1836/2494/10085 1838/2453/10086 -f 1838/2453/10087 1836/2494/10088 1837/2495/10089 -f 1841/2496/10090 1840/2497/10091 1850/2498/10092 -f 1850/2498/10093 1840/2497/10094 1851/2499/10095 -f 1864/2500/10096 1863/2501/10097 1865/2502/10098 -f 1865/2502/10099 1863/2501/10100 1855/2503/10101 -f 1863/2501/10102 1862/2504/10103 1855/2503/10104 -f 1862/2504/10105 1870/2505/10106 1855/2503/10107 -f 1855/2503/10108 1870/2505/10109 1856/2506/10110 -f 1856/2506/10111 1870/2505/10112 1857/2507/10113 -f 1857/2507/10114 1870/2505/10115 1858/2508/10116 -f 1870/2505/10117 1861/2509/10118 1858/2508/10119 -f 1861/2509/10120 1860/2510/10121 1858/2508/10122 -f 1860/2510/10123 1859/2511/10124 1858/2508/10125 -f 1857/2507/10126 1866/2512/10127 1856/2506/10128 -f 1856/2506/10129 1866/2512/10130 1867/2513/10131 -f 1840/2497/10132 1839/2514/10133 1856/2515/10134 -f 1856/2515/10135 1839/2514/10136 1855/2516/10137 -f 1839/2514/10138 1849/2517/10139 1855/2516/10140 -f 1855/2516/10141 1849/2517/10142 1865/2518/10143 -f 1848/2519/10144 1864/2520/10145 1849/2517/10146 -f 1849/2517/10147 1864/2520/10148 1865/2518/10149 -f 1847/2521/10150 1863/2522/10151 1848/2519/10152 -f 1848/2519/10153 1863/2522/10154 1864/2520/10155 -f 1846/2523/10156 1862/2524/10157 1847/2521/10158 -f 1847/2521/10159 1862/2524/10160 1863/2522/10161 -f 1846/2523/10162 1852/2525/10163 1862/2524/10164 -f 1862/2524/10165 1852/2525/10166 1868/2526/10167 -f 1852/2525/10168 1853/2527/10169 1868/2528/10170 -f 1868/2528/10171 1853/2527/10172 1869/2529/10173 -f 1854/2530/10174 1870/2531/10175 1853/2527/10176 -f 1853/2527/10177 1870/2531/10178 1869/2532/10179 -f 1854/2530/10180 1845/2533/10181 1870/2531/10182 -f 1870/2531/10183 1845/2533/10184 1861/2534/10185 -f 1845/2533/10186 1844/2535/10187 1861/2534/10188 -f 1861/2534/10189 1844/2535/10190 1860/2536/10191 -f 1843/2537/10192 1859/2538/10193 1844/2535/10194 -f 1844/2535/10195 1859/2538/10196 1860/2536/10197 -f 1842/2539/10198 1858/2540/10199 1843/2537/10200 -f 1843/2537/10201 1858/2540/10202 1859/2538/10203 -f 1858/2540/10204 1842/2539/10205 1857/2541/10206 -f 1857/2541/10207 1842/2539/10208 1841/2496/10209 -f 1841/2496/10210 1850/2498/10211 1857/2541/10212 -f 1857/2541/10213 1850/2498/10214 1866/2542/10215 -f 1850/2498/10216 1851/2499/10217 1866/2543/10218 -f 1866/2543/10219 1851/2499/10220 1867/2544/10221 -f 1867/2545/10222 1851/2499/10223 1856/2515/10224 -f 1856/2515/10225 1851/2499/10226 1840/2497/10227 -f 1846/2523/10228 1854/2530/10229 1852/2525/10230 -f 1852/2525/10231 1854/2530/10232 1853/2527/10233 -f 1848/2519/10234 1849/2517/10235 1847/2521/10236 -f 1849/2517/10237 1839/2514/10238 1847/2521/10239 -f 1847/2521/10240 1839/2514/10241 1846/2523/10242 -f 1846/2523/10243 1839/2514/10244 1854/2530/10245 -f 1839/2514/10246 1840/2497/10247 1854/2530/10248 -f 1840/2497/10249 1841/2496/10250 1854/2530/10251 -f 1841/2496/10252 1842/2539/10253 1854/2530/10254 -f 1854/2530/10255 1842/2539/10256 1845/2533/10257 -f 1842/2539/10258 1843/2537/10259 1845/2533/10260 -f 1843/2537/10261 1844/2535/10262 1845/2533/10263 -f 1862/2504/10264 1868/2546/10265 1870/2505/10266 -f 1870/2505/10267 1868/2546/10268 1869/2547/10269 -f 1871/1652/10270 1872/1660/10271 1888/2548/10272 -f 1888/2548/10273 1887/2549/10274 1871/1652/10275 -f 1872/1660/10276 1873/1658/10277 1889/2550/10278 -f 1889/2550/10279 1888/2548/10280 1872/1660/10281 -f 1873/1658/10282 1874/1664/10283 1890/2551/10284 -f 1890/2551/10285 1889/2550/10286 1873/1658/10287 -f 1874/1664/10288 1875/1662/10289 1891/2552/10290 -f 1891/2552/10291 1890/2551/10292 1874/1664/10293 -f 1875/1662/10294 1876/1668/10295 1892/2553/10296 -f 1892/2553/10297 1891/2552/10298 1875/1662/10299 -f 1876/1668/10300 1877/1666/10301 1893/2554/10302 -f 1893/2554/10303 1892/2553/10304 1876/1668/10305 -f 1877/1666/10306 1878/1672/10307 1894/2555/10308 -f 1894/2555/10309 1893/2554/10310 1877/1666/10311 -f 1878/1672/10312 1879/1670/10313 1895/2556/10314 -f 1895/2556/10315 1894/2555/10316 1878/1672/10317 -f 1879/1670/10318 1880/1676/10319 1896/2557/10320 -f 1896/2557/10321 1895/2556/10322 1879/1670/10323 -f 1880/1676/10324 1881/1674/10325 1897/2558/10326 -f 1897/2558/10327 1896/2557/10328 1880/1676/10329 -f 1881/1674/10330 1882/1680/10331 1898/2559/10332 -f 1898/2559/10333 1897/2558/10334 1881/1674/10335 -f 1882/1680/10336 1883/1678/10337 1899/2560/10338 -f 1899/2560/10339 1898/2559/10340 1882/1680/10341 -f 1883/1678/10342 1884/1682/10343 1900/2561/10344 -f 1900/2561/10345 1899/2560/10346 1883/1678/10347 -f 1884/1682/10348 1885/1656/10349 1901/2562/10350 -f 1901/2562/10351 1900/2561/10352 1884/1682/10353 -f 1885/1656/10354 1886/1654/10355 1902/408/10356 -f 1902/408/10357 1901/2562/10358 1885/1656/10359 -f 1886/1654/10360 1871/1652/10361 1887/2549/10362 -f 1887/2549/10363 1902/408/10364 1886/1654/10365 -# 3455 faces - diff --git a/showcase/original/models/resources/pbr/trooper_albedo.png b/showcase/original/models/resources/pbr/trooper_albedo.png deleted file mode 100644 index 9ba0f5a6..00000000 Binary files a/showcase/original/models/resources/pbr/trooper_albedo.png and /dev/null differ diff --git a/showcase/original/models/resources/pbr/trooper_ao.png b/showcase/original/models/resources/pbr/trooper_ao.png deleted file mode 100644 index 442dd7fb..00000000 Binary files a/showcase/original/models/resources/pbr/trooper_ao.png and /dev/null differ diff --git a/showcase/original/models/resources/pbr/trooper_metalness.png b/showcase/original/models/resources/pbr/trooper_metalness.png deleted file mode 100644 index 6c212a00..00000000 Binary files a/showcase/original/models/resources/pbr/trooper_metalness.png and /dev/null differ diff --git a/showcase/original/models/resources/pbr/trooper_normals.png b/showcase/original/models/resources/pbr/trooper_normals.png deleted file mode 100644 index e04be883..00000000 Binary files a/showcase/original/models/resources/pbr/trooper_normals.png and /dev/null differ diff --git a/showcase/original/models/resources/pbr/trooper_roughness.png b/showcase/original/models/resources/pbr/trooper_roughness.png deleted file mode 100644 index 29f418f7..00000000 Binary files a/showcase/original/models/resources/pbr/trooper_roughness.png and /dev/null differ diff --git a/showcase/original/models/resources/pitch.png b/showcase/original/models/resources/pitch.png deleted file mode 100644 index 6d7a2336..00000000 Binary files a/showcase/original/models/resources/pitch.png and /dev/null differ diff --git a/showcase/original/models/resources/plane.obj b/showcase/original/models/resources/plane.obj deleted file mode 100644 index e9100a42..00000000 --- a/showcase/original/models/resources/plane.obj +++ /dev/null @@ -1,10700 +0,0 @@ -# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware -# File Created: 23.07.2017 19:55:30 - -# -# object P_51_Mustang_Proppeler -# - -v 6.98 -5.85 40.44 -v 7.18 -5.71 40.16 -v 7.46 -5.54 40.90 -v 7.65 -5.40 40.61 -v -1.06 6.70 43.10 -v -0.66 7.22 43.05 -v -2.20 7.04 41.37 -v -1.32 8.19 41.26 -v -0.05 7.42 43.02 -v 0.03 8.62 41.20 -v 0.55 7.21 43.04 -v 1.34 8.17 41.23 -v 0.89 6.69 43.08 -v 2.11 7.01 41.33 -v 0.86 6.04 43.14 -v 2.04 5.59 41.46 -v 0.47 5.52 43.19 -v 1.16 4.45 41.57 -v -0.15 5.33 43.22 -v -0.19 4.02 41.63 -v -0.74 5.53 43.20 -v -1.50 4.47 41.60 -v -1.09 6.06 43.16 -v -2.27 5.62 41.50 -v -0.20 3.16 38.93 -v -1.94 3.76 38.90 -v -2.97 5.30 38.76 -v -2.88 7.20 38.59 -v -1.71 8.72 38.44 -v 0.10 9.29 38.37 -v 1.84 8.70 38.40 -v 2.87 7.15 38.54 -v 2.78 5.26 38.71 -v 1.61 3.73 38.86 -v -0.11 6.40 43.97 -v 2.25 5.68 40.33 -v 0.23 3.72 40.34 -v 7.55 -5.03 41.18 -v 6.53 -5.89 40.11 -v -2.39 6.87 40.27 -v -0.36 8.83 39.88 -v -7.68 17.58 39.26 -v -6.63 18.36 38.02 -v -7.10 18.35 38.37 -v -7.59 18.07 38.89 -v -11.88 -2.05 40.51 -v -12.14 -1.59 39.98 -v -11.39 -2.12 40.84 -v -12.14 -1.14 39.60 -v -2.58 5.85 39.82 -v -0.73 3.87 40.17 -v -0.75 3.90 40.52 -v -2.60 5.87 40.18 -v -11.53 -1.92 41.09 -v -12.28 -0.94 39.85 -v -12.28 -1.40 40.23 -v -12.02 -1.86 40.76 -v 7.74 -4.89 40.89 -v 2.27 5.69 39.97 -v 0.25 3.72 39.99 -v 6.72 -5.74 39.83 -v 12.03 14.07 38.30 -v 12.17 13.89 38.58 -v 12.04 13.60 38.00 -v 12.18 13.42 38.29 -v 11.76 14.57 38.74 -v 11.89 14.39 39.03 -v 11.40 14.47 39.35 -v 11.26 14.65 39.07 -v 0.60 8.66 39.71 -v 0.62 8.66 40.07 -v 2.45 6.68 39.69 -v 2.47 6.67 40.05 -v -7.29 18.19 38.11 -v -6.82 18.20 37.77 -v -7.77 17.91 38.63 -v -7.87 17.42 39.01 -v -2.40 6.84 39.91 -v -0.37 8.80 39.53 -# 79 vertices - -vn 0.56 -0.83 -0.03 -vn -0.69 0.31 0.65 -vn -0.42 0.65 0.63 -vn -0.85 0.35 0.40 -vn -0.51 0.77 0.38 -vn 0.01 0.77 0.63 -vn 0.01 0.92 0.38 -vn 0.44 0.62 0.65 -vn 0.55 0.74 0.40 -vn 0.70 0.25 0.66 -vn 0.87 0.27 0.42 -vn 0.70 -0.20 0.68 -vn 0.86 -0.28 0.43 -vn 0.44 -0.56 0.71 -vn 0.53 -0.72 0.45 -vn -0.00 -0.69 0.72 -vn -0.01 -0.88 0.47 -vn -0.45 -0.53 0.72 -vn -0.56 -0.69 0.46 -vn -0.71 -0.14 0.69 -vn -0.88 -0.21 0.43 -vn -0.01 -0.95 0.30 -vn -0.60 -0.75 0.29 -vn -0.94 -0.23 0.27 -vn -0.90 0.36 0.24 -vn -0.54 0.81 0.23 -vn 0.02 0.97 0.23 -vn 0.58 0.78 0.25 -vn 0.92 0.29 0.27 -vn 0.91 -0.30 0.28 -vn 0.57 -0.77 0.30 -vn 0.00 0.07 1.00 -vn -0.01 -0.09 -1.00 -vn -0.05 0.06 1.00 -vn -0.09 0.02 1.00 -vn -0.48 -0.32 0.82 -vn -0.52 -0.35 0.78 -vn -0.53 -0.33 0.78 -vn 0.07 0.13 0.99 -vn 0.11 0.16 0.98 -vn 0.47 0.44 0.76 -vn 0.51 0.47 0.72 -vn 0.52 0.45 0.73 -vn 0.40 -0.58 -0.71 -vn 0.39 -0.54 -0.75 -vn 0.42 -0.57 -0.71 -vn 0.06 -0.19 -0.98 -vn 0.02 -0.15 -0.99 -vn -0.03 0.15 0.99 -vn -0.06 0.19 0.98 -vn -0.39 0.54 0.75 -vn -0.42 0.57 0.71 -vn -0.40 0.58 0.71 -vn 0.84 -0.36 0.40 -vn 0.88 0.46 0.06 -vn 0.88 0.46 0.07 -vn 0.67 0.38 0.64 -vn 0.66 0.38 0.65 -vn -0.70 0.72 -0.02 -vn -0.63 -0.42 -0.65 -vn -0.64 -0.43 -0.64 -vn -0.83 -0.55 -0.07 -vn -0.84 -0.55 -0.06 -vn 0.53 0.33 -0.78 -vn 0.48 0.32 -0.82 -vn 0.52 0.35 -0.78 -vn 0.09 -0.03 -1.00 -vn 0.05 -0.06 -1.00 -vn 0.92 0.21 -0.32 -vn 0.84 0.53 -0.08 -vn 0.38 0.85 0.36 -vn -0.49 0.87 0.03 -vn -0.49 0.87 0.04 -vn -0.34 0.71 0.61 -vn -0.34 0.71 0.62 -vn -0.73 -0.68 0.03 -vn 0.38 -0.68 -0.62 -vn 0.39 -0.69 -0.61 -vn 0.57 -0.82 -0.04 -vn 0.57 -0.82 -0.03 -vn -0.43 0.46 -0.77 -vn -0.42 0.41 -0.81 -vn -0.45 0.45 -0.77 -vn -0.08 0.01 -1.00 -vn -0.04 -0.03 -1.00 -vn 0.05 0.03 1.00 -vn 0.08 -0.00 1.00 -vn 0.42 -0.41 0.81 -vn 0.45 -0.45 0.77 -vn 0.43 -0.46 0.77 -vn -0.29 0.89 -0.35 -vn -0.57 0.82 -0.10 -vn -0.83 0.43 0.35 -vn -0.89 -0.45 0.07 -vn -0.89 -0.45 0.08 -vn -0.69 -0.28 0.67 -vn -0.68 -0.27 0.68 -vn 0.70 -0.72 0.04 -vn 0.65 0.32 -0.69 -vn 0.66 0.32 -0.68 -vn 0.84 0.54 -0.08 -vn 0.84 0.54 -0.07 -vn -0.52 -0.45 -0.73 -vn -0.47 -0.44 -0.77 -vn -0.50 -0.47 -0.72 -vn -0.11 -0.15 -0.98 -vn -0.07 -0.12 -0.99 -vn -0.91 -0.27 -0.32 -vn -0.84 -0.54 -0.06 -vn -0.39 -0.82 0.42 -vn 0.49 -0.87 0.10 -vn 0.49 -0.86 0.11 -vn 0.37 -0.62 0.69 -vn 0.37 -0.62 0.70 -vn 0.73 0.68 -0.00 -vn -0.41 0.59 -0.70 -vn -0.42 0.59 -0.69 -vn -0.57 0.81 -0.11 -vn 0.27 -0.92 -0.28 -# 119 vertex normals - -vt 0.04 0.85 0.00 -vt 0.03 0.85 0.00 -vt 0.92 0.13 0.00 -vt 0.92 0.12 0.00 -vt 0.96 0.13 0.00 -vt 0.96 0.11 0.00 -vt 0.96 0.10 0.00 -vt 0.92 0.14 0.00 -vt 0.96 0.14 0.00 -vt 0.92 0.15 0.00 -vt 0.96 0.16 0.00 -vt 0.96 0.17 0.00 -vt 0.96 0.15 0.00 -vt 1.00 0.18 0.00 -vt 1.00 0.16 0.00 -vt 1.00 0.15 0.00 -vt 1.00 0.13 0.00 -vt 1.00 0.11 0.00 -vt 1.00 0.09 0.00 -vt 0.91 0.13 0.00 -vt 0.80 0.95 0.00 -vt 0.81 0.94 0.00 -vt 0.81 0.96 0.00 -vt 0.82 0.95 0.00 -vt 0.82 0.96 0.00 -vt 0.80 0.96 0.00 -vt 0.38 0.65 0.00 -vt 0.37 0.68 0.00 -vt 0.23 0.65 0.00 -vt 0.23 0.67 0.00 -vt 0.23 0.66 0.00 -vt 0.37 0.66 0.00 -vt 0.37 0.67 0.00 -vt 0.35 0.66 0.00 -vt 0.35 0.67 0.00 -vt 0.06 0.85 0.00 -vt 0.05 0.85 0.00 -# 37 texture coords - -g P_51_Mustang_Proppeler -f 1/1/1 2/1/1 3/2/1 -f 4/2/1 3/2/1 2/1/1 -f 5/3/2 6/4/3 7/5/4 -f 8/6/5 7/5/4 6/4/3 -f 6/4/3 9/4/6 8/6/5 -f 10/7/7 8/6/5 9/4/6 -f 9/4/6 11/4/8 10/7/7 -f 12/6/9 10/7/7 11/4/8 -f 11/4/8 13/3/10 12/6/9 -f 14/5/11 12/6/9 13/3/10 -f 13/3/10 15/8/12 14/5/11 -f 16/9/13 14/5/11 15/8/12 -f 15/8/12 17/10/14 16/9/13 -f 18/11/15 16/9/13 17/10/14 -f 17/10/14 19/10/16 18/11/15 -f 20/12/17 18/11/15 19/10/16 -f 19/10/16 21/10/18 20/12/17 -f 22/11/19 20/12/17 21/10/18 -f 21/10/18 23/8/20 22/11/19 -f 24/13/21 22/11/19 23/8/20 -f 20/12/17 22/11/19 25/14/22 -f 26/15/23 25/14/22 22/11/19 -f 22/11/19 24/13/21 26/15/23 -f 27/16/24 26/15/23 24/13/21 -f 23/8/20 5/3/2 24/13/21 -f 7/5/4 24/13/21 5/3/2 -f 24/13/21 7/5/4 27/16/24 -f 28/17/25 27/16/24 7/5/4 -f 7/5/4 8/6/5 28/17/25 -f 29/18/26 28/17/25 8/6/5 -f 8/6/5 10/7/7 29/18/26 -f 30/19/27 29/18/26 10/7/7 -f 10/7/7 12/6/9 30/19/27 -f 31/18/28 30/19/27 12/6/9 -f 12/6/9 14/5/11 31/18/28 -f 32/17/29 31/18/28 14/5/11 -f 14/5/11 16/9/13 32/17/29 -f 33/16/30 32/17/29 16/9/13 -f 16/9/13 18/11/15 33/16/30 -f 34/15/31 33/16/30 18/11/15 -f 18/11/15 20/12/17 34/15/31 -f 25/14/22 34/15/31 20/12/17 -f 35/20/32 21/10/18 19/10/16 -f 35/20/32 23/8/20 21/10/18 -f 35/20/32 5/3/2 23/8/20 -f 35/20/32 6/4/3 5/3/2 -f 35/20/32 9/4/6 6/4/3 -f 35/20/32 11/4/8 9/4/6 -f 35/20/32 13/3/10 11/4/8 -f 35/20/32 15/8/12 13/3/10 -f 35/20/32 17/10/14 15/8/12 -f 35/20/32 19/10/16 17/10/14 -f 31/21/33 32/22/33 30/21/33 -f 32/22/33 28/23/33 30/21/33 -f 34/24/33 28/23/33 32/22/33 -f 26/25/33 28/23/33 34/24/33 -f 25/24/33 26/25/33 34/24/33 -f 30/21/33 28/23/33 29/26/33 -f 27/23/33 28/23/33 26/25/33 -f 36/27/34 37/28/35 38/29/36 -f 37/28/35 39/30/37 38/29/36 -f 39/30/37 1/31/38 38/29/36 -f 1/31/38 3/31/38 38/29/36 -f 40/27/39 41/28/40 42/29/41 -f 41/28/40 43/30/42 42/29/41 -f 43/30/42 44/31/43 42/29/41 -f 44/31/43 45/31/43 42/29/41 -f 46/31/44 47/31/44 48/29/45 -f 47/31/44 49/30/46 48/29/45 -f 49/30/46 50/28/47 48/29/45 -f 50/28/47 51/27/48 48/29/45 -f 52/27/49 53/28/50 54/29/51 -f 53/28/50 55/30/52 54/29/51 -f 55/30/52 56/31/53 54/29/51 -f 56/31/53 57/31/53 54/29/51 -f 3/30/54 4/31/54 38/30/54 -f 58/31/54 38/30/54 4/31/54 -f 59/32/55 36/33/56 58/31/57 -f 38/30/58 58/31/57 36/33/56 -f 60/34/59 37/35/59 59/32/59 -f 36/33/59 59/32/59 37/35/59 -f 61/31/60 39/30/61 60/34/62 -f 39/30/61 37/35/63 60/34/62 -f 4/31/64 2/31/64 58/29/65 -f 2/31/64 61/30/66 58/29/65 -f 61/30/66 60/28/67 58/29/65 -f 60/28/67 59/27/68 58/29/65 -f 62/1/69 63/1/69 64/36/69 -f 65/37/69 64/36/69 63/1/69 -f 66/2/70 67/2/70 62/1/70 -f 63/1/70 62/1/70 67/2/70 -f 67/30/71 66/31/71 68/30/71 -f 69/31/71 68/30/71 66/31/71 -f 70/32/72 71/33/73 69/31/74 -f 68/30/75 69/31/74 71/33/73 -f 72/34/76 73/35/76 70/32/76 -f 71/33/76 70/32/76 73/35/76 -f 64/31/77 65/30/78 72/34/79 -f 65/30/78 73/35/80 72/34/79 -f 66/31/81 62/31/81 69/29/82 -f 62/31/81 64/30/83 69/29/82 -f 64/30/83 72/28/84 69/29/82 -f 72/28/84 70/27/85 69/29/82 -f 71/27/86 73/28/87 68/29/88 -f 73/28/87 65/30/89 68/29/88 -f 65/30/89 63/31/90 68/29/88 -f 63/31/90 67/31/90 68/29/88 -f 74/1/91 44/1/91 75/2/91 -f 43/2/91 75/2/91 44/1/91 -f 76/37/92 45/36/92 74/1/92 -f 44/1/92 74/1/92 45/36/92 -f 45/30/93 76/31/93 42/30/93 -f 77/31/93 42/30/93 76/31/93 -f 78/32/94 40/33/95 77/31/96 -f 42/30/97 77/31/96 40/33/95 -f 79/34/98 41/35/98 78/32/98 -f 40/33/98 78/32/98 41/35/98 -f 75/31/99 43/30/100 79/34/101 -f 43/30/100 41/35/102 79/34/101 -f 76/31/103 74/31/103 77/29/104 -f 74/31/103 75/30/105 77/29/104 -f 75/30/105 79/28/106 77/29/104 -f 79/28/106 78/27/107 77/29/104 -f 47/1/108 56/1/108 49/2/108 -f 55/2/108 49/2/108 56/1/108 -f 46/37/109 57/37/109 47/1/109 -f 56/1/109 47/1/109 57/37/109 -f 57/30/110 46/31/110 54/30/110 -f 48/31/110 54/30/110 46/31/110 -f 51/32/111 52/33/112 48/31/113 -f 54/30/114 48/31/113 52/33/112 -f 50/34/115 53/35/115 51/32/115 -f 52/33/115 51/32/115 53/35/115 -f 49/31/116 55/30/117 50/34/118 -f 55/30/117 53/35/92 50/34/118 -f 33/22/33 34/24/33 32/22/33 -f 2/1/119 1/1/119 61/36/119 -f 39/37/119 61/36/119 1/1/119 -# 138 faces - -# -# object P_51_Mustang_Right_Rockets -# - -v -34.05 -4.42 7.01 -v -33.98 -4.35 7.01 -v -34.09 -4.33 9.68 -v -34.02 -4.26 9.67 -v -35.60 -3.83 7.68 -v -35.21 -3.94 7.69 -v -35.84 -3.60 19.17 -v -36.18 -3.24 19.14 -v -35.88 -3.53 7.66 -v -36.29 -2.75 19.10 -v -36.09 -2.72 20.16 -v -36.01 -3.10 20.20 -v -35.35 -2.67 21.77 -v -35.74 -3.38 20.22 -v -35.37 -3.49 20.23 -v -35.37 -3.74 19.18 -v -34.88 -3.61 19.16 -v -34.81 -3.84 7.67 -v -34.50 -3.54 7.65 -v -34.50 -3.25 19.13 -v -34.37 -3.14 7.61 -v -34.35 -2.76 19.08 -v -34.46 -2.73 7.57 -v -34.46 -2.27 19.04 -v -34.74 -2.43 7.55 -v -34.79 -1.91 19.01 -v -35.13 -2.32 7.54 -v -35.27 -1.77 19.00 -v -35.54 -2.43 7.55 -v -35.76 -1.90 19.01 -v -35.84 -2.72 7.58 -v -36.13 -2.26 19.05 -v -35.97 -3.13 7.62 -v -35.97 -2.33 20.13 -v -35.68 -2.05 20.10 -v -35.30 -1.95 20.08 -v -34.92 -2.06 20.09 -v -34.66 -2.34 20.12 -v -34.58 -2.73 20.15 -v -34.70 -3.11 20.19 -v -34.99 -3.39 20.21 -v -36.27 -1.89 6.80 -v -35.13 -3.10 7.59 -v -36.34 -1.96 6.81 -v -35.20 -3.17 7.60 -v -36.30 -1.80 9.47 -v -36.38 -1.87 9.47 -v -35.16 -3.02 10.26 -v -35.24 -3.08 10.27 -v -33.90 -1.89 9.45 -v -33.97 -1.82 9.45 -v -35.18 -3.09 10.27 -v -35.25 -3.01 10.26 -v -36.43 -4.31 9.70 -v -36.49 -4.24 9.69 -v -33.87 -1.98 6.79 -v -35.15 -3.17 7.60 -v -36.39 -4.40 7.03 -v -36.46 -4.33 7.02 -v -35.21 -3.10 7.59 -v -33.93 -1.90 6.78 -v -31.30 -4.44 6.99 -v -31.23 -4.37 6.98 -v -31.34 -4.35 9.66 -v -31.26 -4.28 9.65 -v -32.85 -3.85 7.66 -v -32.46 -3.96 7.67 -v -33.09 -3.63 19.15 -v -33.43 -3.26 19.12 -v -33.13 -3.55 7.63 -v -33.53 -2.77 19.08 -v -33.34 -2.74 20.14 -v -33.25 -3.12 20.17 -v -32.60 -2.69 21.75 -v -32.99 -3.41 20.20 -v -32.62 -3.51 20.21 -v -32.61 -3.76 19.16 -v -32.12 -3.63 19.14 -v -32.05 -3.86 7.65 -v -31.75 -3.56 7.62 -v -31.75 -3.28 19.11 -v -31.62 -3.16 7.59 -v -31.60 -2.78 19.06 -v -31.71 -2.75 7.55 -v -31.71 -2.29 19.02 -v -31.99 -2.45 7.52 -v -32.04 -1.93 18.99 -v -32.38 -2.34 7.52 -v -32.52 -1.79 18.98 -v -32.78 -2.45 7.53 -v -33.01 -1.92 18.99 -v -33.09 -2.74 7.56 -v -33.38 -2.28 19.03 -v -33.22 -3.15 7.60 -v -33.22 -2.35 20.10 -v -32.93 -2.07 20.08 -v -32.54 -1.97 20.06 -v -32.17 -2.08 20.07 -v -31.91 -2.36 20.09 -v -31.82 -2.75 20.13 -v -31.94 -3.13 20.16 -v -32.23 -3.41 20.19 -v -33.52 -1.91 6.78 -v -32.38 -3.12 7.57 -v -33.59 -1.98 6.78 -v -32.45 -3.19 7.58 -v -33.55 -1.82 9.44 -v -33.63 -1.89 9.45 -v -32.41 -3.04 10.24 -v -32.48 -3.11 10.25 -v -31.15 -1.91 9.43 -v -31.22 -1.84 9.43 -v -32.43 -3.11 10.24 -v -32.49 -3.04 10.24 -v -33.67 -4.33 9.68 -v -33.74 -4.26 9.67 -v -31.12 -2.00 6.77 -v -32.39 -3.19 7.58 -v -33.64 -4.42 7.01 -v -33.70 -4.35 7.00 -v -32.46 -3.12 7.57 -v -31.18 -1.93 6.76 -v -28.67 -4.46 6.97 -v -28.59 -4.39 6.96 -v -28.70 -4.37 9.64 -v -28.63 -4.30 9.63 -v -30.21 -3.87 7.64 -v -29.82 -3.98 7.65 -v -30.45 -3.65 19.13 -v -30.79 -3.28 19.10 -v -30.49 -3.57 7.61 -v -30.90 -2.79 19.06 -v -30.70 -2.76 20.12 -v -30.62 -3.14 20.15 -v -29.96 -2.71 21.73 -v -30.35 -3.43 20.18 -v -29.98 -3.53 20.19 -v -29.98 -3.78 19.14 -v -29.49 -3.65 19.12 -v -29.42 -3.88 7.63 -v -29.11 -3.58 7.60 -v -29.12 -3.30 19.09 -v -28.98 -3.18 7.57 -v -28.96 -2.81 19.04 -v -29.07 -2.77 7.53 -v -29.07 -2.31 19.00 -v -29.35 -2.47 7.50 -v -29.41 -1.95 18.97 -v -29.74 -2.36 7.50 -v -29.88 -1.81 18.96 -v -30.15 -2.47 7.51 -v -30.37 -1.94 18.97 -v -30.45 -2.76 7.54 -v -30.74 -2.30 19.01 -v -30.58 -3.17 7.58 -v -30.58 -2.37 20.08 -v -30.29 -2.09 20.06 -v -29.91 -1.99 20.04 -v -29.53 -2.10 20.05 -v -29.27 -2.38 20.07 -v -29.19 -2.77 20.11 -v -29.31 -3.15 20.14 -v -29.60 -3.43 20.17 -v -30.88 -1.93 6.76 -v -29.74 -3.14 7.55 -v -30.95 -2.00 6.76 -v -29.81 -3.21 7.56 -v -30.92 -1.84 9.42 -v -30.99 -1.91 9.43 -v -29.77 -3.06 10.22 -v -29.85 -3.13 10.22 -v -28.51 -1.93 9.41 -v -28.58 -1.86 9.41 -v -29.79 -3.13 10.22 -v -29.86 -3.06 10.22 -v -31.04 -4.35 9.66 -v -31.10 -4.28 9.65 -v -28.48 -2.02 6.75 -v -29.76 -3.21 7.56 -v -31.00 -4.44 6.99 -v -31.07 -4.37 6.98 -v -29.82 -3.14 7.55 -v -28.54 -1.95 6.74 -# 183 vertices - -vn 0.69 -0.72 0.03 -vn -0.52 -0.85 0.01 -vn -0.01 -1.00 0.02 -vn -0.52 -0.85 0.11 -vn -0.89 -0.45 0.10 -vn -0.89 -0.46 -0.01 -vn -0.98 -0.20 0.08 -vn -0.94 -0.18 0.29 -vn -0.85 -0.42 0.32 -vn 0.32 -0.56 0.77 -vn -0.50 -0.79 0.34 -vn -0.01 -0.94 0.35 -vn -0.01 -0.99 0.12 -vn 0.49 -0.86 0.12 -vn 0.50 -0.87 0.02 -vn 0.86 -0.52 0.01 -vn 0.85 -0.51 0.12 -vn 1.00 -0.04 -0.00 -vn 0.99 -0.04 0.10 -vn 0.88 0.47 -0.02 -vn 0.88 0.47 0.08 -vn 0.52 0.85 -0.04 -vn 0.52 0.85 0.07 -vn 0.01 1.00 -0.05 -vn 0.01 1.00 0.06 -vn -0.48 0.87 -0.05 -vn -0.49 0.87 0.05 -vn -0.85 0.53 -0.04 -vn -0.85 0.53 0.06 -vn -0.95 0.29 -0.04 -vn -0.95 0.30 0.07 -vn -0.81 0.52 0.27 -vn -0.91 0.31 0.28 -vn -0.43 0.79 0.44 -vn -0.46 0.85 0.27 -vn 0.01 0.96 0.27 -vn 0.49 0.82 0.29 -vn 0.83 0.46 0.30 -vn 0.95 -0.02 0.32 -vn 0.82 -0.47 0.33 -vn 0.47 -0.81 0.34 -vn -0.01 -0.09 -1.00 -vn 0.25 -0.35 -0.90 -vn -0.02 -0.08 -1.00 -vn -0.27 0.19 -0.94 -vn -0.25 0.35 0.90 -vn 0.01 0.09 1.00 -vn 0.02 0.08 1.00 -vn 0.27 -0.19 0.94 -vn 0.73 0.68 -0.01 -vn 0.27 0.33 0.91 -vn -0.00 0.08 1.00 -vn -0.27 -0.17 0.95 -vn 0.27 0.17 -0.95 -vn 0.00 -0.08 -1.00 -vn -0.27 -0.33 -0.91 -vn -0.69 0.72 -0.03 -vn -0.73 -0.68 0.01 -vn -0.98 -0.21 -0.02 -vn -0.00 -0.09 -1.00 -vn 0.00 0.09 1.00 -# 61 vertex normals - -vt 0.71 0.65 0.00 -vt 0.81 0.65 0.00 -vt 0.64 0.57 0.00 -vt 0.64 0.58 0.00 -vt 0.83 0.57 0.00 -vt 0.85 0.57 0.00 -vt 0.89 0.58 0.00 -vt 0.85 0.58 0.00 -vt 0.83 0.58 0.00 -vt 0.64 0.59 0.00 -vt 0.83 0.59 0.00 -vt 0.64 0.60 0.00 -vt 0.83 0.60 0.00 -vt 0.64 0.61 0.00 -vt 0.83 0.61 0.00 -vt 0.85 0.60 0.00 -vt 0.85 0.61 0.00 -vt 0.89 0.60 0.00 -vt 0.85 0.59 0.00 -vt 0.39 0.73 0.00 -vt 0.39 0.74 0.00 -vt 0.39 0.72 0.00 -vt 0.37 0.73 0.00 -vt 0.37 0.72 0.00 -vt 0.38 0.71 0.00 -vt 0.75 0.65 0.00 -vt 0.69 0.65 0.00 -vt 0.98 0.63 0.00 -vt 0.91 0.63 0.00 -vt 0.98 0.66 0.00 -vt 0.91 0.66 0.00 -vt 0.98 0.70 0.00 -vt 0.91 0.70 0.00 -vt 0.37 0.74 0.00 -vt 0.38 0.74 0.00 -# 35 texture coords - -g P_51_Mustang_Right_Rockets -f 80/38/120 81/38/120 82/39/120 -f 83/39/120 82/39/120 81/38/120 -f 84/40/121 85/41/122 86/42/123 -f 86/42/123 87/42/124 84/40/121 -f 88/40/125 84/40/121 87/42/124 -f 87/42/124 89/42/126 88/40/125 -f 89/42/126 87/42/124 90/43/127 -f 91/43/128 90/43/127 87/42/124 -f 90/43/127 91/43/128 92/44/129 -f 91/43/128 93/43/130 92/44/129 -f 93/43/130 94/45/131 92/44/129 -f 94/45/131 93/43/130 95/46/132 -f 95/46/132 96/46/133 94/45/131 -f 96/46/133 95/46/132 97/41/134 -f 97/41/134 98/41/135 96/46/133 -f 99/46/136 96/46/133 98/41/135 -f 98/41/135 100/47/137 99/46/136 -f 101/48/138 99/46/136 100/47/137 -f 100/47/137 102/47/139 101/48/138 -f 103/48/140 101/48/138 102/47/139 -f 87/42/124 86/42/123 91/43/128 -f 93/43/130 91/43/128 86/42/123 -f 86/42/123 95/46/132 93/43/130 -f 95/46/132 86/42/123 85/41/122 -f 85/41/122 97/41/134 95/46/132 -f 102/47/139 104/47/141 103/48/140 -f 105/48/142 103/48/140 104/47/141 -f 104/47/141 106/49/143 105/48/142 -f 107/50/144 105/48/142 106/49/143 -f 106/49/143 108/49/145 107/50/144 -f 109/50/146 107/50/144 108/49/145 -f 108/49/145 110/49/147 109/50/146 -f 111/50/148 109/50/146 110/49/147 -f 110/49/147 112/51/149 111/50/148 -f 89/52/150 111/50/148 112/51/149 -f 111/50/148 89/52/150 113/53/151 -f 90/54/152 113/53/151 89/52/150 -f 113/53/151 90/54/152 92/55/153 -f 114/53/154 113/53/151 92/55/153 -f 115/53/155 114/53/154 92/55/153 -f 114/53/154 115/53/155 109/50/146 -f 107/50/144 109/50/146 115/53/155 -f 115/53/155 116/56/156 107/50/144 -f 116/56/156 115/53/155 92/55/153 -f 105/48/142 107/50/144 116/56/156 -f 116/56/156 117/56/157 105/48/142 -f 103/48/140 105/48/142 117/56/157 -f 117/56/157 118/56/158 103/48/140 -f 101/48/138 103/48/140 118/56/158 -f 118/56/158 119/45/159 101/48/138 -f 99/46/136 101/48/138 119/45/159 -f 119/45/159 120/45/160 99/46/136 -f 96/46/133 99/46/136 120/45/160 -f 120/45/160 94/45/131 96/46/133 -f 94/45/131 120/45/160 92/44/129 -f 120/45/160 119/45/159 92/44/129 -f 119/45/159 118/56/158 92/44/129 -f 118/56/158 117/56/157 92/44/129 -f 117/56/157 116/56/156 92/44/129 -f 102/57/161 100/57/161 104/58/161 -f 100/57/161 97/59/161 104/58/161 -f 97/59/161 112/60/161 104/58/161 -f 84/61/161 112/60/161 97/59/161 -f 88/61/161 112/60/161 84/61/161 -f 98/59/161 97/59/161 100/57/161 -f 85/62/161 84/61/161 97/59/161 -f 121/39/162 122/63/161 123/39/162 -f 124/63/163 123/39/162 122/63/161 -f 124/63/163 122/63/161 80/64/164 -f 81/64/164 80/64/164 122/63/161 -f 125/39/165 126/39/165 127/63/166 -f 128/63/167 127/63/166 126/39/165 -f 127/63/166 128/63/167 83/64/168 -f 82/64/168 83/64/168 128/63/167 -f 121/65/169 125/66/169 122/67/169 -f 127/68/169 122/67/169 125/66/169 -f 122/67/169 127/68/169 81/69/169 -f 83/70/169 81/69/169 127/68/169 -f 129/39/170 130/39/170 131/63/171 -f 132/63/166 131/63/171 130/39/170 -f 131/63/171 132/63/166 133/64/172 -f 134/64/172 133/64/172 132/63/166 -f 135/65/120 129/66/120 136/67/120 -f 131/68/120 136/67/120 129/66/120 -f 136/67/120 131/68/120 137/69/120 -f 133/70/120 137/69/120 131/68/120 -f 137/64/173 138/64/173 136/63/174 -f 139/63/161 136/63/174 138/64/173 -f 139/63/161 140/39/175 136/63/174 -f 135/39/175 136/63/174 140/39/175 -f 138/65/176 134/66/176 139/67/176 -f 132/68/176 139/67/176 134/66/176 -f 139/67/176 132/68/176 140/69/176 -f 130/70/176 140/69/176 132/68/176 -f 80/65/177 82/66/177 124/67/177 -f 128/68/177 124/67/177 82/66/177 -f 124/67/177 128/68/177 123/69/177 -f 126/70/177 123/69/177 128/68/177 -f 121/38/176 123/38/176 125/39/176 -f 126/39/176 125/39/176 123/38/176 -f 138/38/177 137/38/177 134/39/177 -f 133/39/177 134/39/177 137/38/177 -f 135/38/169 140/38/169 129/39/169 -f 130/39/169 129/39/169 140/38/169 -f 109/50/146 111/50/148 114/53/154 -f 113/53/151 114/53/154 111/50/148 -f 112/40/178 88/40/125 89/42/126 -f 110/60/161 108/71/161 112/60/161 -f 112/60/161 108/71/161 104/58/161 -f 104/58/161 108/71/161 106/72/161 -f 141/38/120 142/38/120 143/39/120 -f 144/39/120 143/39/120 142/38/120 -f 145/40/121 146/41/122 147/42/123 -f 147/42/123 148/42/124 145/40/121 -f 149/40/125 145/40/121 148/42/124 -f 148/42/124 150/42/126 149/40/125 -f 150/42/126 148/42/124 151/43/127 -f 152/43/128 151/43/127 148/42/124 -f 151/43/127 152/43/128 153/44/129 -f 152/43/128 154/43/130 153/44/129 -f 154/43/130 155/45/131 153/44/129 -f 155/45/131 154/43/130 156/46/132 -f 156/46/132 157/46/133 155/45/131 -f 157/46/133 156/46/132 158/41/134 -f 158/41/134 159/41/135 157/46/133 -f 160/46/136 157/46/133 159/41/135 -f 159/41/135 161/47/137 160/46/136 -f 162/48/138 160/46/136 161/47/137 -f 161/47/137 163/47/139 162/48/138 -f 164/48/140 162/48/138 163/47/139 -f 148/42/124 147/42/123 152/43/128 -f 154/43/130 152/43/128 147/42/123 -f 147/42/123 156/46/132 154/43/130 -f 156/46/132 147/42/123 146/41/122 -f 146/41/122 158/41/134 156/46/132 -f 163/47/139 165/47/141 164/48/140 -f 166/48/142 164/48/140 165/47/141 -f 165/47/141 167/49/143 166/48/142 -f 168/50/144 166/48/142 167/49/143 -f 167/49/143 169/49/145 168/50/144 -f 170/50/146 168/50/144 169/49/145 -f 169/49/145 171/49/147 170/50/146 -f 172/50/148 170/50/146 171/49/147 -f 171/49/147 173/51/149 172/50/148 -f 150/52/150 172/50/148 173/51/149 -f 172/50/148 150/52/150 174/53/151 -f 151/54/152 174/53/151 150/52/150 -f 174/53/151 151/54/152 153/55/153 -f 175/53/154 174/53/151 153/55/153 -f 176/53/155 175/53/154 153/55/153 -f 175/53/154 176/53/155 170/50/146 -f 168/50/144 170/50/146 176/53/155 -f 176/53/155 177/56/156 168/50/144 -f 177/56/156 176/53/155 153/55/153 -f 166/48/142 168/50/144 177/56/156 -f 177/56/156 178/56/157 166/48/142 -f 164/48/140 166/48/142 178/56/157 -f 178/56/157 179/56/158 164/48/140 -f 162/48/138 164/48/140 179/56/158 -f 179/56/158 180/45/159 162/48/138 -f 160/46/136 162/48/138 180/45/159 -f 180/45/159 181/45/160 160/46/136 -f 157/46/133 160/46/136 181/45/160 -f 181/45/160 155/45/131 157/46/133 -f 155/45/131 181/45/160 153/44/129 -f 181/45/160 180/45/159 153/44/129 -f 180/45/159 179/56/158 153/44/129 -f 179/56/158 178/56/157 153/44/129 -f 178/56/157 177/56/156 153/44/129 -f 163/57/161 161/57/161 165/58/161 -f 161/57/161 158/59/161 165/58/161 -f 158/59/161 173/60/161 165/58/161 -f 145/61/161 173/60/161 158/59/161 -f 149/61/161 173/60/161 145/61/161 -f 159/59/161 158/59/161 161/57/161 -f 146/62/161 145/61/161 158/59/161 -f 182/39/162 183/63/161 184/39/162 -f 185/63/163 184/39/162 183/63/161 -f 185/63/163 183/63/161 141/64/164 -f 142/64/164 141/64/164 183/63/161 -f 186/39/165 187/39/165 188/63/166 -f 189/63/167 188/63/166 187/39/165 -f 188/63/166 189/63/167 144/64/168 -f 143/64/168 144/64/168 189/63/167 -f 182/65/169 186/66/169 183/67/169 -f 188/68/169 183/67/169 186/66/169 -f 183/67/169 188/68/169 142/69/169 -f 144/70/169 142/69/169 188/68/169 -f 190/39/170 191/39/170 192/63/171 -f 193/63/166 192/63/171 191/39/170 -f 192/63/171 193/63/166 194/64/172 -f 195/64/172 194/64/172 193/63/166 -f 196/65/120 190/66/120 197/67/120 -f 192/68/120 197/67/120 190/66/120 -f 197/67/120 192/68/120 198/69/120 -f 194/70/120 198/69/120 192/68/120 -f 198/64/173 199/64/173 197/63/174 -f 200/63/179 197/63/174 199/64/173 -f 200/63/179 201/39/175 197/63/174 -f 196/39/175 197/63/174 201/39/175 -f 199/65/176 195/66/176 200/67/176 -f 193/68/176 200/67/176 195/66/176 -f 200/67/176 193/68/176 201/69/176 -f 191/70/176 201/69/176 193/68/176 -f 141/65/177 143/66/177 185/67/177 -f 189/68/177 185/67/177 143/66/177 -f 185/67/177 189/68/177 184/69/177 -f 187/70/177 184/69/177 189/68/177 -f 182/38/176 184/38/176 186/39/176 -f 187/39/176 186/39/176 184/38/176 -f 199/38/177 198/38/177 195/39/177 -f 194/39/177 195/39/177 198/38/177 -f 196/38/169 201/38/169 190/39/169 -f 191/39/169 190/39/169 201/38/169 -f 170/50/146 172/50/148 175/53/154 -f 174/53/151 175/53/154 172/50/148 -f 173/40/178 149/40/125 150/42/126 -f 171/60/161 169/71/161 173/60/161 -f 173/60/161 169/71/161 165/58/161 -f 165/58/161 169/71/161 167/72/161 -f 202/38/120 203/38/120 204/39/120 -f 205/39/120 204/39/120 203/38/120 -f 206/40/121 207/41/122 208/42/123 -f 208/42/123 209/42/124 206/40/121 -f 210/40/125 206/40/121 209/42/124 -f 209/42/124 211/42/126 210/40/125 -f 211/42/126 209/42/124 212/43/127 -f 213/43/128 212/43/127 209/42/124 -f 212/43/127 213/43/128 214/44/129 -f 213/43/128 215/43/130 214/44/129 -f 215/43/130 216/45/131 214/44/129 -f 216/45/131 215/43/130 217/46/132 -f 217/46/132 218/46/133 216/45/131 -f 218/46/133 217/46/132 219/41/134 -f 219/41/134 220/41/135 218/46/133 -f 221/46/136 218/46/133 220/41/135 -f 220/41/135 222/47/137 221/46/136 -f 223/48/138 221/46/136 222/47/137 -f 222/47/137 224/47/139 223/48/138 -f 225/48/140 223/48/138 224/47/139 -f 209/42/124 208/42/123 213/43/128 -f 215/43/130 213/43/128 208/42/123 -f 208/42/123 217/46/132 215/43/130 -f 217/46/132 208/42/123 207/41/122 -f 207/41/122 219/41/134 217/46/132 -f 224/47/139 226/47/141 225/48/140 -f 227/48/142 225/48/140 226/47/141 -f 226/47/141 228/49/143 227/48/142 -f 229/50/144 227/48/142 228/49/143 -f 228/49/143 230/49/145 229/50/144 -f 231/50/146 229/50/144 230/49/145 -f 230/49/145 232/49/147 231/50/146 -f 233/50/148 231/50/146 232/49/147 -f 232/49/147 234/51/149 233/50/148 -f 211/52/150 233/50/148 234/51/149 -f 233/50/148 211/52/150 235/53/151 -f 212/54/152 235/53/151 211/52/150 -f 235/53/151 212/54/152 214/55/153 -f 236/53/154 235/53/151 214/55/153 -f 237/53/155 236/53/154 214/55/153 -f 236/53/154 237/53/155 231/50/146 -f 229/50/144 231/50/146 237/53/155 -f 237/53/155 238/56/156 229/50/144 -f 238/56/156 237/53/155 214/55/153 -f 227/48/142 229/50/144 238/56/156 -f 238/56/156 239/56/157 227/48/142 -f 225/48/140 227/48/142 239/56/157 -f 239/56/157 240/56/158 225/48/140 -f 223/48/138 225/48/140 240/56/158 -f 240/56/158 241/45/159 223/48/138 -f 221/46/136 223/48/138 241/45/159 -f 241/45/159 242/45/160 221/46/136 -f 218/46/133 221/46/136 242/45/160 -f 242/45/160 216/45/131 218/46/133 -f 216/45/131 242/45/160 214/44/129 -f 242/45/160 241/45/159 214/44/129 -f 241/45/159 240/56/158 214/44/129 -f 240/56/158 239/56/157 214/44/129 -f 239/56/157 238/56/156 214/44/129 -f 224/57/161 222/57/161 226/58/161 -f 222/57/161 219/59/161 226/58/161 -f 219/59/161 234/60/161 226/58/161 -f 206/61/161 234/60/161 219/59/161 -f 210/61/161 234/60/161 206/61/161 -f 220/59/161 219/59/161 222/57/161 -f 207/62/161 206/61/161 219/59/161 -f 243/39/162 244/63/161 245/39/162 -f 246/63/163 245/39/162 244/63/161 -f 246/63/163 244/63/161 202/64/164 -f 203/64/164 202/64/164 244/63/161 -f 247/39/165 248/39/165 249/63/166 -f 250/63/167 249/63/166 248/39/165 -f 249/63/166 250/63/167 205/64/168 -f 204/64/168 205/64/168 250/63/167 -f 243/65/169 247/66/169 244/67/169 -f 249/68/169 244/67/169 247/66/169 -f 244/67/169 249/68/169 203/69/169 -f 205/70/169 203/69/169 249/68/169 -f 251/39/170 252/39/170 253/63/171 -f 254/63/180 253/63/171 252/39/170 -f 253/63/171 254/63/180 255/64/172 -f 256/64/172 255/64/172 254/63/180 -f 257/65/120 251/66/120 258/67/120 -f 253/68/120 258/67/120 251/66/120 -f 258/67/120 253/68/120 259/69/120 -f 255/70/120 259/69/120 253/68/120 -f 259/64/173 260/64/173 258/63/174 -f 261/63/161 258/63/174 260/64/173 -f 261/63/161 262/39/175 258/63/174 -f 257/39/175 258/63/174 262/39/175 -f 260/65/176 256/66/176 261/67/176 -f 254/68/176 261/67/176 256/66/176 -f 261/67/176 254/68/176 262/69/176 -f 252/70/176 262/69/176 254/68/176 -f 202/65/177 204/66/177 246/67/177 -f 250/68/177 246/67/177 204/66/177 -f 246/67/177 250/68/177 245/69/177 -f 248/70/177 245/69/177 250/68/177 -f 243/38/176 245/38/176 247/39/176 -f 248/39/176 247/39/176 245/38/176 -f 260/38/177 259/38/177 256/39/177 -f 255/39/177 256/39/177 259/38/177 -f 257/38/169 262/38/169 251/39/169 -f 252/39/169 251/39/169 262/38/169 -f 231/50/146 233/50/148 236/53/154 -f 235/53/151 236/53/154 233/50/148 -f 234/40/178 210/40/125 211/42/126 -f 232/60/161 230/71/161 234/60/161 -f 234/60/161 230/71/161 226/58/161 -f 226/58/161 230/71/161 228/72/161 -# 330 faces - -# -# object P_51_Mustang_Right_Wing -# - -v -48.14 -0.16 8.05 -v -48.99 -0.03 6.01 -v -48.12 0.14 8.01 -v -29.31 0.19 6.44 -v -37.50 0.25 7.12 -v -30.21 0.47 8.72 -v -37.42 0.46 8.93 -v -44.57 0.16 7.71 -v -44.63 0.35 8.79 -v -47.59 0.24 8.96 -v -44.79 0.51 12.04 -v -47.99 0.25 12.03 -v -45.36 0.48 14.13 -v -48.50 0.36 13.97 -v -48.43 0.22 15.21 -v -49.84 0.07 14.16 -v -49.74 -0.04 15.39 -v -50.25 -0.08 14.12 -v -50.04 -0.09 15.40 -v -49.58 -0.10 16.12 -v -48.28 -0.12 16.74 -v -45.18 0.20 15.46 -v -29.52 0.68 12.85 -v -45.01 -0.15 17.06 -v -37.84 0.31 16.08 -v -37.82 -0.24 17.66 -v -30.95 -0.31 18.28 -v -29.88 0.43 16.64 -v -30.50 0.73 14.92 -v -37.93 0.62 14.50 -v -37.87 0.66 12.48 -v -37.95 -1.08 12.58 -v -38.02 -1.05 14.59 -v -44.85 -0.90 12.10 -v -29.86 -1.33 15.03 -v -37.90 -0.94 16.16 -v -29.38 -1.15 16.73 -v -44.96 -0.79 15.49 -v -48.45 -0.33 15.36 -v -45.08 -0.88 14.18 -v -48.53 -0.34 14.14 -v -48.02 -0.34 12.18 -v -49.75 -0.18 12.22 -v -49.14 -0.12 8.71 -v -47.61 -0.23 9.09 -v -44.67 -0.62 8.83 -v -44.59 -0.38 7.72 -v -37.48 -0.85 9.01 -v -37.54 -0.59 7.18 -v -30.23 -1.03 8.80 -v -29.34 -0.65 6.49 -v -29.61 -1.28 12.96 -v -49.23 0.13 8.56 -v -49.74 0.14 12.03 -v -50.13 -0.08 12.02 -v -49.58 -0.07 8.63 -v -49.75 -0.17 15.42 -v -49.85 -0.23 14.35 -v -29.74 -1.25 16.26 -v -29.78 -2.23 16.37 -v -29.67 -1.06 11.16 -v -29.74 -2.36 12.28 -v -29.92 -2.36 12.29 -v -29.96 -2.23 16.38 -v -29.85 -1.06 11.16 -v -29.92 -1.24 16.26 -v -32.53 -1.18 16.28 -v -32.58 -2.21 16.40 -v -32.35 -1.18 16.27 -v -32.40 -2.21 16.39 -v -32.54 -2.34 12.31 -v -32.36 -2.34 12.30 -v -32.46 -0.98 11.17 -v -32.28 -0.98 11.17 -v -35.27 -1.05 16.29 -v -35.32 -2.19 16.42 -v -35.09 -1.06 16.29 -v -35.15 -2.19 16.42 -v -35.28 -2.32 12.33 -v -35.11 -2.32 12.33 -v -35.21 -0.94 11.19 -v -35.03 -0.95 11.19 -v -29.68 -0.25 3.04 -v -21.55 0.05 5.47 -v -22.30 -1.51 12.76 -v -22.41 -1.49 15.29 -v -22.62 -1.36 17.25 -v -23.33 -0.39 18.94 -v -19.50 -0.44 19.26 -v -19.00 -1.50 17.12 -v -14.13 -0.49 20.28 -v -13.50 -1.56 17.59 -v -14.82 -1.75 15.41 -v -18.80 -1.58 15.14 -v -18.58 -1.57 12.58 -v -22.41 -1.16 8.70 -v -21.59 -0.77 5.53 -v -18.71 -1.36 9.03 -v -18.35 -1.00 6.58 -v -14.07 -1.37 9.24 -v -12.73 -0.99 6.36 -v -18.23 -0.74 5.10 -v -12.47 -0.77 4.38 -v -12.44 -0.05 4.34 -v -18.19 -0.02 5.06 -v -12.67 0.19 6.29 -v -18.29 0.22 6.52 -v -14.04 0.46 9.14 -v -18.63 0.56 8.92 -v -13.44 0.66 12.23 -v -18.47 0.74 12.46 -v -22.34 0.49 8.60 -v -22.20 0.75 12.64 -v -22.31 0.72 15.17 -v -22.53 0.53 17.14 -v -18.91 0.57 17.52 -v -13.40 0.59 18.05 -v -14.35 0.80 15.32 -v -18.69 0.73 15.02 -v -18.32 -0.76 20.39 -v -18.70 -0.53 20.37 -v -18.30 -0.83 18.46 -v -18.68 -0.59 18.44 -v -18.68 -0.07 20.33 -v -18.66 -0.13 18.40 -v -18.28 0.16 20.30 -v -18.26 0.10 18.37 -v -17.89 -0.08 20.32 -v -17.87 -0.14 18.39 -v -17.92 -0.54 20.36 -v -17.90 -0.60 18.43 -v -13.54 -1.60 12.35 -v -19.63 -0.07 20.24 -v -20.01 0.17 20.22 -v -19.65 -0.53 20.28 -v -20.44 -0.52 20.29 -v -20.05 -0.75 20.31 -v -20.41 -0.06 20.25 -v -21.96 -0.75 20.15 -v -22.34 -0.51 20.13 -v -21.94 -0.81 18.22 -v -22.32 -0.57 18.21 -v -22.32 -0.05 20.09 -v -22.30 -0.11 18.16 -v -21.92 0.18 20.07 -v -21.90 0.11 18.14 -v -21.53 -0.06 20.08 -v -21.51 -0.12 18.16 -v -21.56 -0.52 20.13 -v -21.54 -0.58 18.20 -v -26.32 -1.30 15.42 -v -26.39 -2.57 15.66 -v -26.01 -1.30 15.43 -v -26.08 -2.57 15.66 -v -26.38 -2.72 15.16 -v -26.07 -2.72 15.16 -v -25.97 -2.76 11.48 -v -26.29 -2.76 11.48 -v -26.19 -1.32 10.34 -v -25.88 -1.32 10.34 -v -20.03 -0.82 18.38 -v -20.42 -0.58 18.36 -v -20.39 -0.12 18.32 -v -19.99 0.11 18.29 -v -19.61 -0.13 18.31 -v -19.63 -0.59 18.35 -v -24.91 -3.09 9.88 -v -26.21 -2.73 9.87 -v -24.99 -3.07 16.55 -v -26.29 -2.70 16.54 -v -27.54 -3.07 9.90 -v -27.63 -3.05 16.58 -v -28.55 -4.05 9.98 -v -28.64 -4.02 16.65 -v -28.97 -5.38 10.07 -v -29.05 -5.36 16.74 -v -28.68 -6.73 10.15 -v -28.76 -6.70 16.82 -v -27.76 -7.71 10.20 -v -27.85 -7.69 16.87 -v -26.46 -8.08 10.21 -v -26.54 -8.06 16.88 -v -25.13 -7.74 10.18 -v -25.21 -7.71 16.85 -v -24.11 -6.76 10.11 -v -24.20 -6.73 16.78 -v -23.70 -5.42 10.02 -v -23.78 -5.40 16.69 -v -23.99 -4.08 9.93 -v -24.07 -4.06 16.60 -v -28.86 -5.35 18.00 -v -28.59 -6.59 18.07 -v -27.75 -7.50 18.12 -v -26.55 -7.84 18.13 -v -25.32 -7.52 18.10 -v -24.39 -6.62 18.03 -v -24.00 -5.39 17.95 -v -24.27 -4.15 17.87 -v -25.12 -3.24 17.82 -v -26.32 -2.90 17.81 -v -28.10 -6.30 19.61 -v -27.46 -6.99 19.65 -v -27.36 -5.86 20.77 -v -27.47 -5.35 20.74 -v -28.31 -5.35 19.56 -v -27.55 -3.23 17.85 -v -28.48 -4.12 17.91 -v -28.01 -4.41 19.49 -v -27.31 -4.84 20.70 -v -26.47 -5.36 21.07 -v -27.01 -6.24 20.79 -v -26.54 -7.25 19.66 -v -25.60 -7.01 19.63 -v -24.89 -6.32 19.58 -v -24.60 -5.38 19.52 -v -24.80 -4.44 19.46 -v -25.45 -3.74 19.42 -v -26.36 -3.48 19.42 -v -27.30 -3.73 19.44 -v -26.93 -4.47 20.68 -v -26.42 -4.34 20.66 -v -25.92 -4.48 20.67 -v -25.57 -4.86 20.69 -v -25.46 -5.37 20.72 -v -25.62 -5.88 20.75 -v -26.01 -6.25 20.78 -v -26.52 -6.38 20.79 -v -27.02 -4.02 6.72 -v -26.22 -3.82 6.70 -v -25.44 -4.04 6.71 -v -24.89 -4.63 6.74 -v -24.72 -5.43 6.79 -v -24.97 -6.23 6.84 -v -25.57 -6.81 6.89 -v -26.37 -7.02 6.91 -v -27.15 -6.80 6.90 -v -27.70 -6.21 6.87 -v -26.53 -4.91 4.15 -v -26.23 -4.84 4.15 -v -27.87 -5.41 6.82 -v -27.62 -4.61 6.77 -v -26.75 -5.13 4.17 -v -26.26 -5.43 3.93 -v -25.95 -4.92 4.15 -v -25.74 -5.14 4.16 -v -25.68 -5.43 4.18 -v -25.77 -5.73 4.20 -v -25.99 -5.94 4.21 -v -26.29 -6.02 4.22 -v -26.58 -5.94 4.22 -v -26.78 -5.72 4.21 -v -26.85 -5.42 4.19 -# 252 vertices - -vn 0.92 -0.09 -0.39 -vn -0.00 0.99 -0.12 -vn -0.01 0.99 -0.11 -vn -0.00 1.00 -0.09 -vn -0.01 1.00 -0.09 -vn -0.03 0.99 -0.17 -vn -0.03 0.99 -0.12 -vn -0.04 1.00 -0.06 -vn -0.04 1.00 -0.02 -vn -0.06 1.00 -0.03 -vn -0.03 1.00 0.09 -vn -0.11 0.99 0.03 -vn -0.09 0.98 0.16 -vn -0.28 0.96 0.07 -vn -0.18 0.98 0.09 -vn -0.34 0.94 0.05 -vn -0.16 0.99 0.06 -vn -0.14 0.98 0.16 -vn -0.04 0.97 0.22 -vn -0.02 0.98 0.21 -vn -0.01 1.00 -0.04 -vn -0.02 0.97 0.22 -vn -0.02 0.96 0.26 -vn -0.02 0.94 0.34 -vn -0.04 0.92 0.38 -vn -0.03 0.96 0.28 -vn -0.02 1.00 0.08 -vn -0.02 0.99 0.10 -vn -0.01 1.00 -0.02 -vn -0.03 -1.00 -0.03 -vn -0.03 -1.00 0.04 -vn -0.09 -0.99 -0.04 -vn -0.03 -1.00 0.05 -vn -0.04 -0.97 0.25 -vn -0.05 -0.90 0.43 -vn -0.05 -0.91 0.42 -vn -0.05 -0.93 0.38 -vn -0.07 -0.97 0.21 -vn -0.11 -0.97 0.22 -vn -0.13 -0.99 0.07 -vn -0.09 -1.00 0.03 -vn -0.12 -0.99 -0.01 -vn -0.13 -0.99 -0.04 -vn -0.09 -1.00 -0.03 -vn -0.06 -1.00 -0.04 -vn -0.11 -0.99 -0.04 -vn -0.08 -1.00 -0.04 -vn -0.07 -0.99 -0.14 -vn -0.05 -0.98 -0.21 -vn -0.03 -0.99 -0.10 -vn -0.03 -0.99 -0.14 -vn -0.02 -0.99 -0.11 -vn -0.02 -0.99 -0.17 -vn -0.02 -1.00 -0.04 -vn -0.28 0.96 -0.07 -vn -0.29 0.96 -0.04 -vn -0.47 0.88 -0.05 -vn -0.51 0.86 -0.09 -vn -0.15 0.99 -0.08 -vn -0.04 1.00 -0.08 -vn -0.09 -0.98 0.16 -vn -0.13 -0.98 0.15 -vn -0.10 -0.98 0.15 -vn -0.24 -0.96 0.12 -vn -0.28 -0.96 0.08 -vn -0.33 -0.94 0.00 -vn -0.37 -0.93 0.04 -vn -0.26 -0.97 -0.03 -vn -0.11 -0.99 0.06 -vn -0.09 -1.00 0.01 -vn 1.00 -0.05 0.01 -vn -1.00 0.05 -0.01 -vn 0.02 0.12 0.99 -vn -0.01 -1.00 0.03 -vn -0.02 -0.64 -0.77 -vn 0.02 0.11 0.99 -vn -0.08 -0.05 -1.00 -vn -0.08 0.09 -0.99 -vn 1.00 0.02 -0.07 -vn -0.08 -0.06 -0.99 -vn -0.08 -0.08 -0.99 -vn -0.08 0.03 -1.00 -vn -0.10 -0.12 -0.99 -vn 0.93 0.01 0.36 -vn 0.93 -0.02 0.37 -vn 0.99 -0.05 -0.15 -vn 0.99 -0.02 -0.17 -vn 0.87 0.29 0.40 -vn 0.99 -0.04 0.12 -vn 0.92 0.27 -0.29 -vn 0.75 0.27 0.61 -vn -0.02 -0.66 -0.75 -vn 0.99 -0.05 -0.10 -vn -0.02 -1.00 -0.06 -vn -0.03 -0.99 -0.11 -vn -0.04 -0.99 -0.11 -vn -0.01 0.99 -0.13 -vn -0.01 1.00 -0.08 -vn -0.92 0.09 0.39 -vn 0.08 0.12 0.99 -vn 0.08 0.06 0.99 -vn -0.12 -0.06 -0.99 -vn -0.03 -1.00 -0.04 -vn -0.03 -1.00 0.03 -vn -0.02 -1.00 0.04 -vn -0.04 -0.96 0.29 -vn -0.04 -0.96 0.28 -vn -0.06 -0.88 0.47 -vn -0.06 -0.90 0.44 -vn -0.04 -0.97 0.23 -vn -0.05 -0.92 0.38 -vn -0.03 -0.96 0.26 -vn -0.02 -1.00 0.03 -vn -0.03 -1.00 0.01 -vn -0.02 -0.99 -0.16 -vn -0.02 -0.99 -0.10 -vn -0.01 -0.99 -0.16 -vn -0.00 -0.99 -0.11 -vn -0.01 -0.99 -0.13 -vn -0.01 -0.99 -0.17 -vn -0.01 0.99 -0.12 -vn -0.00 0.99 -0.16 -vn 0.00 0.99 -0.14 -vn 0.02 1.00 -0.09 -vn 0.01 1.00 -0.10 -vn 0.02 1.00 -0.05 -vn 0.00 1.00 -0.03 -vn -0.00 1.00 -0.10 -vn -0.01 1.00 -0.03 -vn -0.00 1.00 -0.03 -vn -0.01 1.00 0.05 -vn -0.00 1.00 0.08 -vn -0.02 0.96 0.29 -vn -0.03 0.96 0.27 -vn -0.03 0.90 0.44 -vn -0.07 0.88 0.47 -vn -0.04 0.96 0.28 -vn -0.05 0.90 0.43 -vn -0.01 1.00 0.03 -vn -0.88 -0.48 0.01 -vn -0.89 -0.46 0.01 -vn -0.86 0.51 -0.03 -vn -0.84 0.54 -0.03 -vn 0.01 1.00 -0.03 -vn 0.02 1.00 -0.03 -vn 0.89 0.46 -0.01 -vn 0.88 0.48 -0.01 -vn 0.84 -0.54 0.03 -vn 0.86 -0.51 0.03 -vn -0.00 0.99 -0.14 -vn -0.00 0.99 -0.13 -vn -0.00 1.00 -0.08 -vn -0.01 -1.00 -0.06 -vn 0.01 0.09 1.00 -vn -0.00 0.18 0.98 -vn -0.01 -0.96 0.29 -vn -0.01 -1.00 0.01 -vn -0.00 -0.62 -0.78 -vn -0.02 0.92 0.40 -vn -0.05 -0.90 0.44 -vn 1.00 -0.05 0.03 -vn -1.00 0.05 -0.03 -vn 0.99 -0.04 0.13 -vn 0.98 -0.05 -0.17 -vn 0.98 -0.02 -0.19 -vn 0.91 0.01 0.42 -vn 0.90 -0.02 0.43 -vn 0.91 -0.15 0.37 -vn 0.96 -0.03 0.29 -vn 0.94 0.03 -0.33 -vn 0.85 -0.17 -0.50 -vn 0.96 -0.10 0.27 -vn -0.75 -0.27 -0.61 -vn -0.93 0.02 -0.37 -vn -0.93 -0.01 -0.36 -vn -0.99 0.02 0.15 -vn -0.99 0.05 0.16 -vn -0.99 0.04 -0.12 -vn -0.87 -0.29 -0.40 -vn -0.92 -0.27 0.29 -vn 0.52 0.85 0.00 -vn 0.01 1.00 -0.00 -vn -0.48 0.88 -0.01 -vn -0.50 0.87 -0.01 -vn -0.85 0.53 -0.01 -vn -0.86 0.52 -0.01 -vn -1.00 0.03 -0.01 -vn -0.89 -0.46 -0.01 -vn -0.88 -0.47 -0.01 -vn -0.52 -0.85 -0.00 -vn -0.01 -1.00 0.00 -vn 0.50 -0.87 0.01 -vn 0.48 -0.88 0.01 -vn 0.86 -0.52 0.01 -vn 0.85 -0.53 0.01 -vn 1.00 -0.03 0.01 -vn 0.88 0.47 0.01 -vn 0.89 0.46 0.01 -vn -0.99 0.06 0.15 -vn -0.88 -0.44 0.16 -vn -0.97 0.06 0.24 -vn -0.86 -0.44 0.25 -vn -0.52 -0.84 0.17 -vn -0.51 -0.82 0.26 -vn -0.01 -0.99 0.17 -vn -0.01 -0.96 0.26 -vn 0.49 -0.85 0.17 -vn 0.48 -0.84 0.26 -vn 0.85 -0.50 0.17 -vn 0.83 -0.50 0.26 -vn 0.98 -0.02 0.17 -vn 0.96 -0.03 0.26 -vn 0.87 0.47 0.17 -vn 0.85 0.46 0.26 -vn 0.51 0.84 0.17 -vn 0.50 0.83 0.26 -vn 0.02 0.99 0.16 -vn 0.01 0.97 0.25 -vn -0.79 -0.39 0.47 -vn -0.47 -0.74 0.48 -vn -0.55 -0.24 0.80 -vn -0.62 0.08 0.78 -vn -0.89 0.07 0.45 -vn -0.47 0.87 0.15 -vn -0.47 0.85 0.24 -vn -0.83 0.54 0.15 -vn -0.82 0.52 0.23 -vn -0.75 0.49 0.44 -vn -0.53 0.37 0.76 -vn 0.01 0.06 1.00 -vn -0.32 -0.49 0.81 -vn -0.01 -0.88 0.48 -vn 0.45 -0.76 0.47 -vn 0.76 -0.44 0.47 -vn 0.89 -0.01 0.46 -vn 0.78 0.43 0.46 -vn 0.45 0.76 0.46 -vn 0.01 0.89 0.45 -vn -0.43 0.79 0.44 -vn -0.30 0.58 0.76 -vn 0.01 0.65 0.76 -vn 0.32 0.56 0.76 -vn 0.55 0.33 0.77 -vn 0.63 0.02 0.78 -vn 0.54 -0.29 0.79 -vn 0.32 -0.51 0.80 -vn 0.00 -0.59 0.81 -vn -0.48 0.82 -0.32 -vn 0.01 0.95 -0.33 -vn -0.47 0.81 -0.34 -vn 0.01 0.94 -0.35 -vn 0.50 0.80 -0.32 -vn 0.50 0.80 -0.34 -vn 0.85 0.42 -0.31 -vn 0.84 0.42 -0.33 -vn 0.95 -0.07 -0.30 -vn 0.94 -0.06 -0.32 -vn 0.80 -0.52 -0.29 -vn 0.80 -0.51 -0.31 -vn 0.45 -0.84 -0.30 -vn 0.45 -0.83 -0.32 -vn -0.02 -0.95 -0.31 -vn -0.01 -0.95 -0.33 -vn -0.49 -0.81 -0.32 -vn -0.48 -0.81 -0.34 -vn -0.83 -0.46 -0.32 -vn -0.83 -0.45 -0.34 -vn -0.38 0.63 -0.68 -vn 0.00 0.73 -0.69 -vn -0.95 0.01 -0.32 -vn -0.94 0.02 -0.34 -vn -0.82 0.47 -0.32 -vn -0.81 0.48 -0.34 -vn -0.65 0.36 -0.67 -vn -0.01 -0.05 -1.00 -vn 0.39 0.61 -0.68 -vn 0.67 0.31 -0.67 -vn 0.75 -0.07 -0.65 -vn 0.64 -0.43 -0.64 -vn 0.36 -0.68 -0.63 -vn -0.01 -0.77 -0.64 -vn -0.39 -0.66 -0.64 -vn -0.66 -0.38 -0.65 -vn -0.75 -0.00 -0.66 -# 284 vertex normals - -vt 0.50 0.03 0.00 -vt 0.49 0.03 0.00 -vt 0.71 0.21 0.00 -vt 0.82 0.22 0.00 -vt 0.73 0.24 0.00 -vt 0.82 0.24 0.00 -vt 0.92 0.23 0.00 -vt 0.92 0.25 0.00 -vt 0.96 0.24 0.00 -vt 0.92 0.29 0.00 -vt 0.96 0.29 0.00 -vt 0.93 0.32 0.00 -vt 0.97 0.32 0.00 -vt 0.97 0.34 0.00 -vt 0.99 0.32 0.00 -vt 0.99 0.34 0.00 -vt 0.98 0.35 0.00 -vt 0.97 0.37 0.00 -vt 0.92 0.35 0.00 -vt 0.72 0.31 0.00 -vt 0.92 0.37 0.00 -vt 0.83 0.36 0.00 -vt 0.83 0.38 0.00 -vt 0.73 0.40 0.00 -vt 0.72 0.37 0.00 -vt 0.73 0.34 0.00 -vt 0.83 0.33 0.00 -vt 0.83 0.30 0.00 -vt 0.12 0.42 0.00 -vt 0.14 0.43 0.00 -vt 0.10 0.50 0.00 -vt 0.16 0.34 0.00 -vt 0.16 0.43 0.00 -vt 0.19 0.34 0.00 -vt 0.20 0.36 0.00 -vt 0.18 0.43 0.00 -vt 0.16 0.51 0.00 -vt 0.14 0.50 0.00 -vt 0.15 0.54 0.00 -vt 0.13 0.54 0.00 -vt 0.12 0.50 0.00 -vt 0.12 0.54 0.00 -vt 0.09 0.53 0.00 -vt 0.09 0.55 0.00 -vt 0.05 0.54 0.00 -vt 0.05 0.52 0.00 -vt 0.04 0.52 0.00 -vt 0.06 0.49 0.00 -vt 0.01 0.53 0.00 -vt 0.04 0.49 0.00 -vt 0.07 0.41 0.00 -vt 0.05 0.41 0.00 -vt 0.08 0.33 0.00 -vt 0.05 0.32 0.00 -vt 0.14 0.33 0.00 -vt 0.98 0.23 0.00 -vt 0.99 0.29 0.00 -vt 0.98 0.19 0.00 -vt 0.96 0.23 0.00 -vt 0.14 0.56 0.00 -vt 0.13 0.56 0.00 -vt 0.11 0.56 0.00 -vt 0.12 0.55 0.00 -vt 0.04 0.54 0.00 -vt 0.77 0.13 0.00 -vt 0.77 0.11 0.00 -vt 0.87 0.13 0.00 -vt 0.85 0.11 0.00 -vt 0.01 0.74 0.00 -vt 0.52 0.02 0.00 -vt 0.65 0.02 0.00 -vt 0.52 0.01 0.00 -vt 0.65 0.01 0.00 -vt 0.03 0.73 0.00 -vt 0.04 0.73 0.00 -vt 0.56 0.01 0.00 -vt 0.49 0.01 0.00 -vt 0.47 0.01 0.00 -vt 0.56 0.02 0.00 -vt 0.19 0.51 0.00 -vt 0.20 0.49 0.00 -vt 0.22 0.51 0.00 -vt 0.21 0.49 0.00 -vt 0.20 0.55 0.00 -vt 0.23 0.54 0.00 -vt 0.24 0.56 0.00 -vt 0.20 0.56 0.00 -vt 0.20 0.58 0.00 -vt 0.23 0.57 0.00 -vt 0.22 0.59 0.00 -vt 0.51 0.02 0.00 -vt 0.51 0.03 0.00 -vt 0.48 0.02 0.00 -vt 0.01 0.32 0.00 -vt 0.72 0.15 0.00 -vt 0.96 0.22 0.00 -vt 0.48 0.03 0.00 -vt 0.48 0.01 0.00 -vt 0.59 0.01 0.00 -vt 0.15 0.26 0.00 -vt 0.18 0.26 0.00 -vt 0.21 0.27 0.00 -vt 0.23 0.28 0.00 -vt 0.24 0.24 0.00 -vt 0.21 0.23 0.00 -vt 0.26 0.18 0.00 -vt 0.23 0.17 0.00 -vt 0.20 0.18 0.00 -vt 0.19 0.22 0.00 -vt 0.15 0.22 0.00 -vt 0.09 0.25 0.00 -vt 0.06 0.24 0.00 -vt 0.11 0.21 0.00 -vt 0.07 0.20 0.00 -vt 0.12 0.16 0.00 -vt 0.08 0.14 0.00 -vt 0.06 0.20 0.00 -vt 0.06 0.14 0.00 -vt 0.49 0.18 0.00 -vt 0.56 0.19 0.00 -vt 0.49 0.21 0.00 -vt 0.57 0.21 0.00 -vt 0.51 0.26 0.00 -vt 0.57 0.25 0.00 -vt 0.50 0.31 0.00 -vt 0.57 0.31 0.00 -vt 0.62 0.24 0.00 -vt 0.62 0.31 0.00 -vt 0.62 0.35 0.00 -vt 0.62 0.38 0.00 -vt 0.63 0.41 0.00 -vt 0.58 0.42 0.00 -vt 0.57 0.39 0.00 -vt 0.51 0.43 0.00 -vt 0.50 0.40 0.00 -vt 0.51 0.36 0.00 -vt 0.57 0.35 0.00 -vt 0.25 0.71 0.00 -vt 0.25 0.70 0.00 -vt 0.39 0.71 0.00 -vt 0.39 0.70 0.00 -vt 0.25 0.69 0.00 -vt 0.39 0.69 0.00 -vt 0.25 0.68 0.00 -vt 0.39 0.68 0.00 -vt 0.61 0.19 0.00 -vt 0.16 0.16 0.00 -vt 0.39 0.72 0.00 -vt 0.38 0.71 0.00 -vt 0.39 0.73 0.00 -vt 0.37 0.73 0.00 -vt 0.37 0.72 0.00 -vt 0.38 0.74 0.00 -vt 0.60 0.01 0.00 -vt 0.59 0.02 0.00 -vt 0.02 0.73 0.00 -vt 0.63 0.02 0.00 -vt 0.60 0.02 0.00 -vt 0.63 0.01 0.00 -vt 0.78 0.11 0.00 -vt 0.21 0.50 0.00 -vt 0.20 0.50 0.00 -vt 0.24 0.54 0.00 -vt 0.23 0.52 0.00 -vt 0.19 0.54 0.00 -vt 0.19 0.52 0.00 -vt 0.19 0.56 0.00 -vt 0.24 0.57 0.00 -vt 0.22 0.49 0.00 -vt 0.20 0.51 0.00 -vt 0.23 0.51 0.00 -vt 0.88 0.10 0.00 -vt 0.88 0.11 0.00 -vt 0.75 0.09 0.00 -vt 0.75 0.10 0.00 -vt 0.88 0.08 0.00 -vt 0.75 0.08 0.00 -vt 0.88 0.06 0.00 -vt 0.75 0.05 0.00 -vt 0.88 0.03 0.00 -vt 0.75 0.03 0.00 -vt 0.88 0.02 0.00 -vt 0.75 0.01 0.00 -vt 0.88 0.01 0.00 -vt 0.75 0.00 0.00 -vt 0.73 0.05 0.00 -vt 0.73 0.03 0.00 -vt 0.73 0.02 0.00 -vt 0.73 0.01 0.00 -vt 0.73 0.08 0.00 -vt 0.73 0.09 0.00 -vt 0.73 0.10 0.00 -vt 0.70 0.03 0.00 -vt 0.70 0.02 0.00 -vt 0.68 0.04 0.00 -vt 0.68 0.05 0.00 -vt 0.70 0.05 0.00 -vt 0.70 0.07 0.00 -vt 0.67 0.06 0.00 -vt 0.67 0.05 0.00 -vt 0.70 0.08 0.00 -vt 0.70 0.09 0.00 -vt 0.67 0.07 0.00 -vt 0.68 0.03 0.00 -vt 0.94 0.08 0.00 -vt 0.94 0.09 0.00 -vt 0.94 0.07 0.00 -vt 0.94 0.06 0.00 -vt 0.94 0.04 0.00 -vt 0.94 0.03 0.00 -vt 0.99 0.07 0.00 -vt 0.99 0.06 0.00 -vt 0.99 0.05 0.00 -# 213 texture coords - -g P_51_Mustang_Right_Wing -f 263/73/181 264/74/181 265/73/181 -f 266/75/182 267/76/183 268/77/184 -f 269/78/185 268/77/184 267/76/183 -f 267/76/183 270/79/186 269/78/185 -f 271/80/187 269/78/185 270/79/186 -f 271/80/187 270/79/186 272/81/188 -f 271/80/187 272/81/188 273/82/189 -f 274/83/190 273/82/189 272/81/188 -f 273/82/189 274/83/190 275/84/191 -f 276/85/192 275/84/191 274/83/190 -f 276/85/192 277/86/193 275/84/191 -f 276/85/192 278/87/194 277/86/193 -f 279/88/195 277/86/193 278/87/194 -f 278/87/194 280/87/196 279/88/195 -f 281/88/197 279/88/195 280/87/196 -f 279/88/195 281/88/197 282/89/198 -f 279/88/195 282/89/198 277/86/193 -f 283/90/199 277/86/193 282/89/198 -f 277/86/193 283/90/199 284/91/200 -f 268/77/184 269/78/185 285/92/201 -f 286/93/202 284/91/200 283/90/199 -f 284/91/200 286/93/202 287/94/203 -f 288/95/204 287/94/203 286/93/202 -f 288/95/204 289/96/205 287/94/203 -f 290/97/206 287/94/203 289/96/205 -f 290/97/206 291/98/207 287/94/203 -f 292/99/208 287/94/203 291/98/207 -f 291/98/207 285/92/201 292/99/208 -f 293/100/209 292/99/208 285/92/201 -f 293/100/209 285/92/201 269/78/185 -f 269/78/185 271/80/187 293/100/209 -f 273/82/189 293/100/209 271/80/187 -f 293/100/209 273/82/189 292/99/208 -f 275/84/191 292/99/208 273/82/189 -f 275/84/191 284/91/200 292/99/208 -f 284/91/200 275/84/191 277/86/193 -f 287/94/203 292/99/208 284/91/200 -f 294/101/210 295/102/211 296/103/212 -f 295/102/211 294/101/210 297/104/213 -f 295/102/211 297/104/213 298/105/214 -f 299/106/214 298/105/214 297/104/213 -f 299/106/214 289/107/215 298/105/214 -f 288/108/216 298/105/214 289/107/215 -f 288/108/216 286/109/217 298/105/214 -f 300/110/218 298/105/214 286/109/217 -f 286/109/217 283/111/219 300/110/218 -f 301/112/220 300/110/218 283/111/219 -f 300/110/218 301/112/220 302/113/221 -f 303/114/222 302/113/221 301/112/220 -f 303/114/222 304/115/223 302/113/221 -f 304/115/223 303/114/222 305/116/224 -f 305/116/224 306/117/225 304/115/223 -f 307/118/226 304/115/223 306/117/225 -f 263/119/227 307/118/226 306/117/225 -f 307/118/226 263/119/227 308/120/228 -f 264/121/225 263/119/227 306/117/225 -f 309/122/229 308/120/228 263/119/227 -f 308/120/228 309/122/229 310/123/230 -f 311/124/231 310/123/230 309/122/229 -f 310/123/230 311/124/231 312/125/232 -f 313/126/233 312/125/232 311/124/231 -f 312/125/232 314/127/234 310/123/230 -f 294/101/210 310/123/230 314/127/234 -f 310/123/230 294/101/210 308/120/228 -f 296/103/212 308/120/228 294/101/210 -f 308/120/228 296/103/212 307/118/226 -f 304/115/223 307/118/226 296/103/212 -f 296/103/212 302/113/221 304/115/223 -f 302/113/221 296/103/212 295/102/211 -f 302/113/221 295/102/211 300/110/218 -f 298/105/214 300/110/218 295/102/211 -f 314/127/234 297/104/213 294/101/210 -f 272/81/188 315/128/235 274/83/190 -f 316/129/236 274/83/190 315/128/235 -f 274/83/190 316/129/236 276/85/192 -f 278/87/194 276/85/192 316/129/236 -f 278/87/194 316/129/236 280/87/196 -f 317/129/237 280/87/196 316/129/236 -f 317/129/237 316/129/236 318/128/238 -f 315/128/235 318/128/238 316/129/236 -f 264/130/239 318/128/238 315/128/235 -f 264/130/239 315/128/235 265/131/240 -f 272/81/188 265/131/240 315/128/235 -f 265/131/240 272/81/188 270/79/186 -f 283/111/241 282/132/242 301/112/243 -f 319/133/244 301/112/243 282/132/242 -f 281/133/245 319/133/244 282/132/242 -f 281/133/245 280/134/246 319/133/244 -f 320/135/247 319/133/244 280/134/246 -f 320/135/247 280/134/246 305/116/248 -f 317/116/248 305/116/248 280/134/246 -f 317/116/248 318/136/223 305/116/248 -f 306/117/223 305/116/248 318/136/223 -f 264/121/223 306/117/223 318/136/223 -f 319/133/249 320/135/250 301/112/220 -f 303/114/222 301/112/220 320/135/250 -f 320/135/250 305/116/224 303/114/222 -f 321/137/251 322/138/251 323/139/251 -f 324/140/251 323/139/251 322/138/251 -f 325/140/252 326/138/252 327/139/252 -f 328/137/252 327/139/252 326/138/252 -f 329/141/253 330/141/253 331/141/253 -f 332/141/253 331/141/253 330/141/253 -f 330/142/254 333/143/254 332/144/254 -f 334/145/254 332/144/254 333/143/254 -f 333/146/255 335/147/255 334/146/255 -f 336/147/255 334/146/255 335/147/255 -f 334/140/251 336/139/251 332/138/251 -f 331/137/251 332/138/251 336/139/251 -f 333/140/252 330/138/252 335/139/252 -f 329/137/252 335/139/252 330/138/252 -f 337/141/256 338/141/256 339/141/256 -f 340/141/256 339/141/256 338/141/256 -f 338/142/254 341/143/254 340/144/254 -f 342/145/254 340/144/254 341/143/254 -f 341/146/255 343/147/255 342/146/255 -f 344/147/255 342/146/255 343/147/255 -f 342/140/251 344/139/251 340/138/251 -f 339/137/251 340/138/251 344/139/251 -f 341/140/252 338/138/252 343/139/252 -f 337/137/252 343/139/252 338/138/252 -f 267/144/257 266/148/257 270/149/257 -f 270/149/258 266/148/259 265/150/258 -f 313/151/260 311/142/260 266/148/260 -f 266/148/261 311/142/261 265/150/261 -f 311/142/262 309/149/262 265/150/262 -f 309/149/263 263/150/263 265/150/263 -f 312/152/264 313/153/264 268/154/264 -f 266/155/265 268/154/265 313/153/265 -f 314/156/266 312/152/266 285/157/266 -f 268/154/267 285/157/267 312/152/267 -f 291/158/268 297/159/268 285/157/268 -f 314/156/269 285/157/269 297/159/269 -f 299/160/270 297/159/270 290/161/270 -f 291/158/270 290/161/270 297/159/270 -f 289/162/271 299/160/271 290/161/271 -f 328/141/253 326/141/253 321/141/253 -f 322/141/253 321/141/253 326/141/253 -f 326/142/254 325/143/254 322/144/254 -f 324/145/254 322/144/254 325/143/254 -f 325/146/272 327/147/272 324/146/272 -f 323/147/272 324/146/272 327/147/272 -f 266/163/273 313/164/273 345/165/273 -f 264/121/274 345/166/275 263/119/274 -f 313/126/276 263/119/274 345/166/275 -f 345/167/277 264/130/185 266/75/277 -f 265/168/278 266/75/277 264/130/185 -f 264/73/279 263/169/279 265/169/279 -f 263/143/280 313/165/280 265/145/280 -f 266/170/281 265/145/281 313/165/281 -f 266/148/282 346/171/282 313/151/282 -f 347/172/283 348/173/284 314/127/234 -f 297/104/285 314/127/234 348/173/284 -f 297/104/285 348/173/284 299/106/286 -f 349/174/287 299/106/286 348/173/284 -f 349/174/287 350/175/288 299/106/286 -f 350/175/288 349/174/287 351/176/289 -f 352/177/290 351/176/289 349/174/287 -f 351/176/289 352/177/290 353/178/291 -f 354/179/292 353/178/291 352/177/290 -f 354/179/292 352/177/290 355/180/293 -f 356/181/294 355/180/293 352/177/290 -f 356/181/294 357/182/234 355/180/293 -f 357/182/234 356/181/294 347/172/283 -f 347/172/283 358/183/230 357/182/234 -f 347/172/283 314/127/234 358/183/230 -f 312/125/232 358/183/230 314/127/234 -f 312/125/232 313/126/295 358/183/230 -f 359/184/231 358/183/230 313/126/295 -f 349/174/287 348/173/284 352/177/290 -f 356/181/294 352/177/290 348/173/284 -f 348/173/284 347/172/283 356/181/294 -f 358/183/230 359/184/231 360/185/296 -f 361/186/297 360/185/296 359/184/231 -f 360/185/296 361/186/297 362/187/298 -f 363/188/299 362/187/298 361/186/297 -f 361/186/297 364/189/300 363/188/299 -f 365/190/232 363/188/299 364/189/300 -f 364/189/300 361/186/297 359/184/231 -f 366/191/301 367/192/302 368/193/182 -f 369/194/303 368/193/182 367/192/302 -f 368/193/182 369/194/303 370/195/304 -f 371/196/305 370/195/304 369/194/303 -f 370/195/304 371/196/305 372/197/306 -f 373/198/307 372/197/306 371/196/305 -f 371/196/305 374/199/308 373/198/307 -f 375/200/309 373/198/307 374/199/308 -f 375/200/309 374/199/308 285/92/310 -f 375/200/309 285/92/310 376/201/311 -f 291/98/312 376/201/311 285/92/310 -f 291/98/312 290/97/313 376/201/311 -f 377/202/314 376/201/311 290/97/313 -f 377/202/314 290/97/313 350/203/315 -f 350/203/315 351/204/316 377/202/314 -f 378/205/317 377/202/314 351/204/316 -f 351/204/316 353/206/318 378/205/317 -f 379/207/314 378/205/317 353/206/318 -f 372/197/306 373/198/307 380/208/319 -f 379/207/314 380/208/319 378/205/317 -f 381/209/319 378/205/317 380/208/319 -f 381/209/319 380/208/319 373/198/307 -f 373/198/307 375/200/309 381/209/319 -f 376/201/311 381/209/319 375/200/309 -f 381/209/319 376/201/311 378/205/317 -f 377/202/314 378/205/317 376/201/311 -f 382/210/293 383/211/320 384/212/254 -f 385/213/321 384/212/254 383/211/320 -f 383/211/320 386/214/322 385/213/321 -f 387/215/323 385/213/321 386/214/322 -f 386/214/322 388/216/324 387/215/323 -f 389/217/325 387/215/323 388/216/324 -f 388/216/324 390/214/326 389/217/325 -f 391/215/327 389/217/325 390/214/326 -f 390/214/326 392/211/328 391/215/327 -f 393/213/329 391/215/327 392/211/328 -f 392/211/328 382/210/293 393/213/329 -f 384/212/254 393/213/329 382/210/293 -f 367/192/302 346/218/330 369/194/303 -f 369/194/303 346/218/330 371/196/305 -f 374/199/308 371/196/305 346/218/330 -f 346/218/330 266/75/331 374/199/308 -f 268/77/332 374/199/308 266/75/331 -f 268/77/332 285/92/310 374/199/308 -f 362/187/298 394/219/333 360/185/296 -f 357/182/234 360/185/296 394/219/333 -f 360/185/296 357/182/234 358/183/230 -f 394/219/333 355/180/293 357/182/234 -f 390/220/334 388/221/334 392/222/334 -f 388/221/334 383/223/334 392/222/334 -f 386/224/334 383/223/334 388/221/334 -f 392/222/334 383/223/334 382/225/334 -f 395/220/334 396/221/334 397/222/334 -f 396/221/334 398/223/334 397/222/334 -f 397/222/334 398/223/334 399/225/334 -f 400/224/334 398/223/334 396/221/334 -f 401/210/293 402/211/320 403/212/254 -f 404/213/321 403/212/254 402/211/320 -f 402/211/320 405/214/322 404/213/321 -f 406/215/323 404/213/321 405/214/322 -f 405/214/322 407/216/324 406/215/323 -f 408/217/325 406/215/323 407/216/324 -f 407/216/324 409/214/326 408/217/325 -f 410/215/327 408/217/325 409/214/326 -f 409/214/326 411/211/328 410/215/327 -f 412/213/329 410/215/327 411/211/328 -f 411/211/328 401/210/293 412/213/329 -f 403/212/254 412/213/329 401/210/293 -f 409/220/334 407/221/334 411/222/334 -f 407/221/334 402/223/334 411/222/334 -f 405/224/334 402/223/334 407/221/334 -f 411/222/334 402/223/334 401/225/334 -f 367/226/282 359/227/282 346/171/282 -f 346/171/282 359/227/282 313/151/282 -f 413/141/335 414/141/335 415/141/335 -f 416/141/335 415/141/335 414/141/335 -f 414/228/336 417/228/336 416/228/336 -f 418/228/336 416/228/336 417/228/336 -f 419/147/337 418/228/337 420/147/337 -f 417/228/337 420/147/337 418/228/337 -f 420/146/338 421/147/338 419/146/338 -f 422/147/338 419/146/338 421/147/338 -f 289/96/339 350/203/315 290/97/313 -f 289/107/340 299/106/286 350/175/288 -f 365/229/282 364/230/282 366/231/282 -f 367/226/282 366/231/282 364/230/282 -f 364/230/282 359/227/282 367/226/282 -f 415/137/341 416/138/341 422/139/341 -f 422/139/341 418/232/341 419/140/341 -f 416/138/341 418/232/341 422/139/341 -f 413/137/342 421/139/342 414/138/342 -f 421/139/342 420/140/342 414/138/342 -f 414/138/342 420/140/342 417/232/342 -f 399/210/293 398/211/320 423/212/254 -f 424/213/321 423/212/254 398/211/320 -f 398/211/320 400/214/322 424/213/321 -f 425/215/323 424/213/321 400/214/322 -f 400/214/322 396/216/324 425/215/323 -f 426/217/325 425/215/323 396/216/324 -f 396/216/324 395/214/326 426/217/325 -f 427/215/327 426/217/325 395/214/326 -f 395/214/326 397/211/328 427/215/327 -f 428/213/329 427/215/327 397/211/328 -f 397/211/328 399/210/293 428/213/329 -f 423/212/254 428/213/329 399/210/293 -f 363/154/343 365/233/343 368/152/343 -f 366/234/269 368/152/269 365/233/269 -f 394/235/344 362/236/344 372/237/344 -f 370/238/345 372/237/345 362/236/345 -f 362/236/346 363/154/346 370/238/346 -f 368/152/347 370/238/347 363/154/347 -f 355/158/348 394/235/348 380/239/348 -f 372/237/349 380/239/349 394/235/349 -f 379/160/350 354/240/350 380/239/350 -f 355/158/351 380/239/351 354/240/351 -f 353/162/352 354/240/352 379/160/352 -f 290/160/353 299/240/353 289/162/353 -f 266/153/354 313/241/354 268/242/354 -f 312/243/355 268/242/355 313/241/355 -f 312/243/356 314/235/356 268/242/356 -f 285/156/357 268/242/357 314/235/357 -f 314/235/358 297/158/358 285/156/358 -f 291/159/359 285/156/359 297/158/359 -f 291/159/360 297/158/360 290/160/360 -f 299/240/360 290/160/360 297/158/360 -f 429/244/361 430/245/362 431/246/361 -f 432/247/362 431/246/361 430/245/362 -f 430/245/362 433/244/363 432/247/362 -f 434/246/364 432/247/362 433/244/363 -f 433/244/363 435/248/365 434/246/364 -f 436/249/366 434/246/364 435/248/365 -f 435/248/365 437/250/252 436/249/366 -f 438/251/367 436/249/366 437/250/252 -f 437/250/252 439/252/368 438/251/367 -f 440/253/369 438/251/367 439/252/368 -f 439/252/368 441/254/370 440/253/369 -f 442/255/370 440/253/369 441/254/370 -f 441/254/370 443/256/371 442/255/370 -f 444/257/371 442/255/370 443/256/371 -f 443/256/371 445/254/372 444/257/371 -f 446/255/373 444/257/371 445/254/372 -f 445/254/372 447/252/374 446/255/373 -f 448/253/375 446/255/373 447/252/374 -f 447/252/374 449/250/376 448/253/375 -f 450/251/251 448/253/375 449/250/376 -f 449/250/376 451/248/377 450/251/251 -f 452/249/378 450/251/251 451/248/377 -f 451/248/377 429/244/361 452/249/378 -f 431/246/361 452/249/378 429/244/361 -f 438/251/379 440/253/380 453/258/381 -f 454/259/382 453/258/381 440/253/380 -f 440/253/380 442/255/383 454/259/382 -f 455/260/384 454/259/382 442/255/383 -f 442/255/383 444/257/385 455/260/384 -f 456/261/386 455/260/384 444/257/385 -f 444/257/385 446/255/387 456/261/386 -f 457/260/388 456/261/386 446/255/387 -f 446/255/387 448/253/389 457/260/388 -f 458/259/390 457/260/388 448/253/389 -f 448/253/389 450/251/391 458/259/390 -f 459/258/392 458/259/390 450/251/391 -f 450/251/391 452/249/393 459/258/392 -f 460/262/394 459/258/392 452/249/393 -f 452/249/393 431/246/395 460/262/394 -f 461/263/396 460/262/394 431/246/395 -f 431/246/395 432/247/397 461/263/396 -f 462/264/398 461/263/396 432/247/397 -f 454/259/382 455/260/384 463/265/399 -f 455/260/384 456/261/386 464/266/400 -f 464/266/400 463/265/399 455/260/384 -f 463/265/399 464/266/400 465/267/401 -f 465/267/401 466/268/402 463/265/399 -f 467/269/403 463/265/399 466/268/402 -f 463/265/399 467/269/403 454/259/382 -f 453/258/381 454/259/382 467/269/403 -f 432/247/397 434/246/404 462/264/398 -f 468/263/405 462/264/398 434/246/404 -f 434/246/404 436/249/406 468/263/405 -f 469/262/407 468/263/405 436/249/406 -f 436/249/406 438/251/379 469/262/407 -f 453/258/381 469/262/407 438/251/379 -f 469/262/407 453/258/381 470/270/408 -f 467/269/403 470/270/408 453/258/381 -f 470/270/408 467/269/403 471/271/409 -f 466/268/402 471/271/409 467/269/403 -f 472/272/410 471/271/409 466/268/402 -f 472/272/410 466/268/402 465/267/401 -f 472/272/410 465/267/401 473/267/411 -f 473/267/411 465/267/401 464/266/400 -f 464/266/400 474/266/412 473/267/411 -f 474/266/412 464/266/400 456/261/386 -f 456/261/386 457/260/388 474/266/412 -f 475/266/413 474/266/412 457/260/388 -f 457/260/388 458/259/390 475/266/413 -f 476/265/414 475/266/413 458/259/390 -f 458/259/390 459/258/392 476/265/414 -f 477/269/415 476/265/414 459/258/392 -f 459/258/392 460/262/394 477/269/415 -f 478/270/416 477/269/415 460/262/394 -f 460/262/394 461/263/396 478/270/416 -f 479/273/417 478/270/416 461/263/396 -f 461/263/396 462/264/398 479/273/417 -f 480/274/418 479/273/417 462/264/398 -f 462/264/398 468/263/405 480/274/418 -f 481/273/419 480/274/418 468/263/405 -f 468/263/405 469/262/407 481/273/419 -f 470/270/408 481/273/419 469/262/407 -f 481/273/419 470/270/408 482/275/420 -f 471/271/409 482/275/420 470/270/408 -f 472/272/410 482/275/420 471/271/409 -f 472/272/410 483/275/421 482/275/420 -f 480/274/418 481/273/419 483/275/421 -f 482/275/420 483/275/421 481/273/419 -f 472/272/410 484/275/422 483/275/421 -f 483/275/421 484/275/422 480/274/418 -f 479/273/417 480/274/418 484/275/422 -f 484/275/422 485/271/423 479/273/417 -f 478/270/416 479/273/417 485/271/423 -f 485/271/423 486/268/424 478/270/416 -f 477/269/415 478/270/416 486/268/424 -f 486/268/424 487/267/425 477/269/415 -f 476/265/414 477/269/415 487/267/425 -f 487/267/425 488/267/426 476/265/414 -f 475/266/413 476/265/414 488/267/426 -f 488/267/426 489/276/427 475/266/413 -f 474/266/412 475/266/413 489/276/427 -f 489/276/427 473/267/411 474/266/412 -f 472/272/410 473/267/411 489/276/427 -f 472/272/410 489/276/427 488/267/426 -f 472/272/410 488/267/426 487/267/425 -f 472/272/410 487/267/425 486/268/424 -f 472/272/410 486/268/424 485/271/423 -f 472/272/410 485/271/423 484/275/422 -f 433/244/428 430/245/429 490/277/430 -f 491/278/431 490/277/430 430/245/429 -f 430/245/429 429/244/432 491/278/431 -f 492/277/433 491/278/431 429/244/432 -f 429/244/432 451/248/434 492/277/433 -f 493/279/435 492/277/433 451/248/434 -f 451/248/434 449/250/436 493/279/435 -f 494/280/437 493/279/435 449/250/436 -f 449/250/436 447/252/438 494/280/437 -f 495/281/439 494/280/437 447/252/438 -f 447/252/438 445/254/440 495/281/439 -f 496/282/441 495/281/439 445/254/440 -f 445/254/440 443/256/442 496/282/441 -f 497/282/443 496/282/441 443/256/442 -f 443/256/442 441/254/444 497/282/443 -f 498/282/445 497/282/443 441/254/444 -f 441/254/444 439/252/446 498/282/445 -f 499/281/447 498/282/445 439/252/446 -f 490/277/430 491/278/431 500/283/448 -f 501/283/449 500/283/448 491/278/431 -f 491/278/431 492/277/433 501/283/449 -f 439/252/446 437/250/450 499/281/447 -f 502/280/451 499/281/447 437/250/450 -f 437/250/450 435/248/452 502/280/451 -f 503/279/453 502/280/451 435/248/452 -f 435/248/452 433/244/428 503/279/453 -f 490/277/430 503/279/453 433/244/428 -f 503/279/453 490/277/430 504/284/454 -f 500/283/448 504/284/454 490/277/430 -f 504/284/454 500/283/448 505/284/455 -f 500/283/448 501/283/449 505/284/455 -f 501/283/449 506/283/456 505/284/455 -f 506/283/456 501/283/449 492/277/433 -f 492/277/433 493/279/435 506/283/456 -f 507/284/457 506/283/456 493/279/435 -f 493/279/435 494/280/437 507/284/457 -f 508/284/458 507/284/457 494/280/437 -f 494/280/437 495/281/439 508/284/458 -f 509/285/459 508/284/458 495/281/439 -f 495/281/439 496/282/441 509/285/459 -f 510/285/460 509/285/459 496/282/441 -f 496/282/441 497/282/443 510/285/460 -f 511/285/461 510/285/460 497/282/443 -f 497/282/443 498/282/445 511/285/461 -f 512/285/462 511/285/461 498/282/445 -f 498/282/445 499/281/447 512/285/462 -f 513/285/463 512/285/462 499/281/447 -f 499/281/447 502/280/451 513/285/463 -f 514/284/464 513/285/463 502/280/451 -f 502/280/451 503/279/453 514/284/464 -f 504/284/454 514/284/464 503/279/453 -f 514/284/464 504/284/454 505/284/455 -f 513/285/463 514/284/464 505/284/455 -f 512/285/462 513/285/463 505/284/455 -f 511/285/461 512/285/462 505/284/455 -f 510/285/460 511/285/461 505/284/455 -f 509/285/459 510/285/460 505/284/455 -f 508/284/458 509/285/459 505/284/455 -f 507/284/457 508/284/458 505/284/455 -f 506/283/456 507/284/457 505/284/455 -# 472 faces - -# -# object P_51_Mustang_Right_Landing_Wheel -# - -v -21.65 -7.03 18.48 -v -20.12 -7.12 18.43 -v -21.65 -7.03 18.62 -v -20.12 -7.12 18.57 -v -20.72 -9.30 17.99 -v -20.96 -9.30 18.00 -v -20.29 -0.52 17.44 -v -20.54 -0.52 17.45 -v -21.12 -9.30 18.19 -v -20.70 -0.51 17.64 -v -21.11 -9.30 18.43 -v -20.69 -0.51 17.88 -v -20.93 -9.30 18.59 -v -20.51 -0.51 18.04 -v -20.69 -9.30 18.58 -v -20.27 -0.52 18.03 -v -20.53 -9.30 18.39 -v -20.10 -0.52 17.84 -v -20.54 -9.30 18.15 -v -20.11 -0.52 17.60 -v -20.33 -12.95 18.23 -v -20.20 -10.30 18.07 -v -20.11 -12.93 18.22 -v -19.87 -10.28 18.05 -v -20.30 -9.53 18.02 -v -20.07 -9.01 17.98 -v -20.64 -9.29 18.02 -v -20.61 -8.74 17.98 -v -20.32 -12.95 18.73 -v -20.01 -12.93 18.71 -v -20.20 -10.30 18.56 -v -19.86 -10.28 18.55 -v -20.30 -9.53 18.52 -v -20.07 -9.01 18.48 -v -20.63 -9.29 18.51 -v -20.60 -8.73 18.48 -v -21.23 -1.10 17.16 -v -22.09 -3.52 17.35 -v -21.15 -1.12 18.27 -v -24.19 -9.64 18.88 -v -24.42 -9.57 15.50 -v -24.22 -9.64 15.49 -v -21.89 -3.59 17.34 -v -23.98 -9.71 18.87 -v -20.95 -1.19 18.26 -v -21.02 -1.16 17.16 -v -21.65 -6.86 18.47 -v -21.64 -6.86 18.61 -v -20.11 -6.80 18.41 -v -20.11 -6.80 18.55 -v -20.12 -6.80 17.67 -v -20.13 -7.12 17.69 -v -21.65 -6.86 17.72 -v -21.66 -7.04 17.74 -v -21.66 -7.04 17.88 -v -20.13 -7.12 17.83 -v -21.65 -6.86 17.87 -v -20.11 -6.80 17.81 -v -20.14 -11.43 20.48 -v -20.18 -12.67 20.94 -v -20.12 -10.55 19.48 -v -20.30 -15.29 18.74 -v -20.31 -15.01 17.47 -v -20.27 -14.90 19.94 -v -20.15 -10.67 17.01 -v -20.12 -10.27 18.21 -v -20.23 -13.94 20.74 -v -20.89 -10.51 16.93 -v -20.86 -10.09 18.22 -v -20.86 -10.40 19.58 -v -20.88 -11.34 20.66 -v -20.92 -12.66 21.15 -v -20.97 -14.03 20.94 -v -21.02 -15.05 20.07 -v -21.05 -15.47 18.78 -v -21.06 -15.17 17.42 -v -20.29 -14.13 16.47 -v -21.04 -14.23 16.35 -v -20.25 -12.89 16.01 -v -20.99 -12.90 15.85 -v -20.20 -11.62 16.21 -v -20.94 -11.54 16.07 -v -21.69 -11.63 16.26 -v -21.64 -10.67 17.07 -v -21.61 -10.28 18.27 -v -21.61 -10.56 19.54 -v -21.63 -11.44 20.54 -v -21.67 -12.68 21.00 -v -21.72 -13.94 20.80 -v -21.76 -14.90 19.99 -v -21.79 -15.29 18.79 -v -21.80 -15.01 17.52 -v -21.78 -14.14 16.52 -v -21.74 -12.90 16.06 -# 94 vertices - -vn -0.05 -1.00 0.00 -vn 0.32 -0.07 -0.95 -vn -0.45 -0.03 -0.89 -vn 0.33 -0.07 -0.94 -vn -0.43 -0.04 -0.90 -vn -0.95 0.03 -0.32 -vn -0.94 0.02 -0.35 -vn -0.90 0.07 0.44 -vn -0.90 0.07 0.42 -vn -0.33 0.07 0.94 -vn -0.32 0.07 0.95 -vn 0.43 0.04 0.90 -vn 0.45 0.03 0.89 -vn 0.94 -0.02 0.35 -vn 0.95 -0.03 0.32 -vn 0.90 -0.07 -0.42 -vn 0.90 -0.07 -0.44 -vn -0.03 -0.06 -1.00 -vn 0.03 0.06 1.00 -vn -0.01 -1.00 0.00 -vn 0.01 1.00 -0.00 -vn -0.94 0.34 0.07 -vn 0.94 -0.34 -0.07 -vn -1.00 0.05 0.01 -vn -0.04 1.00 -0.00 -vn 1.00 -0.05 -0.01 -vn 0.46 0.89 -0.01 -vn 0.99 0.16 -0.01 -vn 0.97 -0.10 -0.20 -vn 1.00 -0.06 -0.04 -vn 0.98 -0.10 -0.18 -vn 1.00 -0.06 -0.01 -vn 0.07 -1.00 0.00 -vn 0.06 -1.00 -0.00 -vn 0.05 -1.00 -0.01 -vn -0.99 -0.13 0.01 -vn -0.59 -0.81 0.01 -vn 0.32 0.95 -0.00 -vn 0.06 0.05 1.00 -vn -0.32 -0.95 0.00 -vn 0.05 0.27 -0.96 -vn -0.06 -0.05 -1.00 -vn 1.00 -0.04 -0.01 -vn 0.22 0.81 -0.55 -vn -0.02 0.83 -0.56 -vn 0.24 0.97 -0.05 -vn -0.00 1.00 -0.05 -vn 0.25 0.87 0.44 -vn 0.01 0.89 0.45 -vn 0.26 0.55 0.79 -vn 0.03 0.57 0.82 -vn 0.27 0.10 0.96 -vn 0.03 0.10 0.99 -vn 0.27 -0.40 0.87 -vn 0.03 -0.42 0.91 -vn 0.26 -0.80 0.53 -vn 0.02 -0.83 0.56 -vn 0.24 -0.97 0.04 -vn 0.00 -1.00 0.05 -vn 0.22 -0.87 -0.45 -vn -0.01 -0.89 -0.45 -vn 0.20 -0.55 -0.81 -vn -0.03 -0.57 -0.82 -vn 0.20 -0.10 -0.97 -vn -0.03 -0.10 -0.99 -vn 0.21 0.40 -0.89 -vn -0.03 0.42 -0.91 -vn -0.27 0.40 -0.87 -vn -0.26 0.80 -0.53 -vn -0.24 0.97 -0.04 -vn -0.22 0.87 0.45 -vn -0.20 0.55 0.81 -vn -0.20 0.10 0.97 -vn -0.21 -0.40 0.89 -vn -0.22 -0.81 0.55 -vn -0.24 -0.97 0.05 -vn -0.25 -0.87 -0.44 -vn -0.26 -0.55 -0.79 -vn -0.27 -0.10 -0.96 -vn -1.00 0.04 0.01 -# 80 vertex normals - -vt 0.07 0.76 0.00 -vt 0.30 0.92 0.00 -vt 0.09 0.92 0.00 -vt 0.30 0.93 0.00 -vt 0.09 0.93 0.00 -vt 0.30 0.94 0.00 -vt 0.09 0.94 0.00 -vt 0.44 0.70 0.00 -vt 0.44 0.73 0.00 -vt 0.44 0.74 0.00 -vt 0.43 0.74 0.00 -vt 0.43 0.75 0.00 -vt 0.32 0.98 0.00 -vt 0.31 0.98 0.00 -vt 0.33 0.98 0.00 -vt 0.33 0.99 0.00 -vt 0.32 1.00 0.00 -vt 0.33 1.00 0.00 -vt 0.47 0.08 0.00 -vt 0.53 0.08 0.00 -vt 0.47 0.11 0.00 -vt 0.67 0.11 0.00 -vt 0.66 0.03 0.00 -vt 0.61 0.03 0.00 -vt 0.47 0.00 0.00 -vt 0.66 0.00 0.00 -vt 0.08 0.75 0.00 -vt 0.09 0.75 0.00 -vt 0.07 0.75 0.00 -vt 0.04 0.84 0.00 -vt 0.04 0.85 0.00 -vt 0.03 0.84 0.00 -vt 0.03 0.85 0.00 -vt 0.08 0.76 0.00 -vt 0.09 0.74 0.00 -vt 0.43 0.73 0.00 -vt 0.42 0.73 0.00 -vt 0.42 0.74 0.00 -vt 0.43 0.72 0.00 -vt 0.42 0.72 0.00 -vt 0.46 0.72 0.00 -vt 0.46 0.73 0.00 -vt 0.45 0.73 0.00 -vt 0.03 0.68 0.00 -vt 0.05 0.68 0.00 -vt 0.16 0.67 0.00 -vt 0.03 0.67 0.00 -vt 0.08 0.67 0.00 -vt 0.08 0.68 0.00 -vt 0.07 0.67 0.00 -vt 0.07 0.66 0.00 -vt 0.16 0.66 0.00 -vt 0.03 0.66 0.00 -vt 0.31 0.99 0.00 -vt 0.85 0.94 0.00 -vt 0.85 0.96 0.00 -vt 0.84 0.93 0.00 -vt 0.80 0.99 0.00 -vt 0.78 0.98 0.00 -vt 0.82 0.99 0.00 -vt 0.80 0.92 0.00 -vt 0.82 0.92 0.00 -vt 0.84 0.98 0.00 -vt 0.32 0.78 0.00 -vt 0.32 0.76 0.00 -vt 0.34 0.78 0.00 -vt 0.34 0.76 0.00 -vt 0.36 0.78 0.00 -vt 0.36 0.76 0.00 -vt 0.38 0.78 0.00 -vt 0.38 0.76 0.00 -vt 0.39 0.78 0.00 -vt 0.39 0.76 0.00 -vt 0.31 0.78 0.00 -vt 0.31 0.76 0.00 -vt 0.29 0.78 0.00 -vt 0.29 0.76 0.00 -vt 0.31 0.75 0.00 -vt 0.32 0.75 0.00 -vt 0.34 0.75 0.00 -vt 0.36 0.75 0.00 -vt 0.38 0.75 0.00 -vt 0.39 0.75 0.00 -vt 0.29 0.75 0.00 -vt 0.78 0.96 0.00 -vt 0.78 0.94 0.00 -vt 0.79 0.93 0.00 -# 87 texture coords - -g P_51_Mustang_Right_Landing_Wheel -f 515/286/465 516/286/465 517/286/465 -f 518/286/465 517/286/465 516/286/465 -f 519/287/466 520/287/467 521/288/468 -f 522/288/469 521/288/468 520/287/467 -f 520/287/467 523/289/470 522/288/469 -f 524/290/471 522/288/469 523/289/470 -f 523/289/470 525/291/472 524/290/471 -f 526/292/473 524/290/471 525/291/472 -f 525/291/472 527/291/474 526/292/473 -f 528/292/475 526/292/473 527/291/474 -f 527/291/474 529/291/476 528/292/475 -f 530/292/477 528/292/475 529/291/476 -f 529/291/476 531/291/478 530/292/477 -f 532/292/479 530/292/477 531/291/478 -f 531/291/478 533/289/480 532/292/479 -f 534/290/481 532/292/479 533/289/480 -f 533/289/480 519/287/466 534/290/481 -f 521/288/468 534/290/481 519/287/466 -f 535/293/482 536/294/482 537/293/482 -f 537/293/482 536/294/482 538/294/482 -f 536/294/482 539/295/482 538/294/482 -f 538/294/482 539/295/482 540/295/482 -f 540/295/482 539/295/482 541/296/482 -f 542/297/482 540/295/482 541/296/482 -f 543/293/483 544/293/483 545/294/483 -f 544/293/483 546/294/483 545/294/483 -f 545/294/483 546/294/483 547/295/483 -f 546/294/483 548/295/483 547/295/483 -f 547/295/483 548/295/483 549/296/483 -f 548/295/483 550/297/483 549/296/483 -f 533/298/484 531/299/484 519/300/484 -f 519/300/484 531/299/484 523/301/484 -f 531/299/484 527/302/484 523/301/484 -f 523/301/484 527/302/484 525/303/484 -f 520/300/484 519/300/484 523/301/484 -f 530/303/485 532/301/485 528/302/485 -f 532/301/485 521/300/485 528/302/485 -f 521/300/485 524/299/485 528/302/485 -f 522/298/485 524/299/485 521/300/485 -f 534/300/485 521/300/485 532/301/485 -f 551/304/486 552/305/486 553/306/486 -f 552/305/486 554/307/486 553/306/486 -f 555/308/486 554/307/486 552/305/486 -f 556/304/487 557/309/487 558/310/487 -f 558/310/487 557/309/487 559/311/487 -f 557/309/487 560/308/487 559/311/487 -f 561/312/488 515/312/488 562/312/488 -f 517/312/488 562/312/488 515/312/488 -f 563/313/489 561/312/489 564/313/489 -f 562/312/489 564/313/489 561/312/489 -f 516/314/490 563/314/490 518/314/490 -f 564/314/490 518/314/490 563/314/490 -f 565/315/482 566/316/482 567/317/482 -f 568/318/482 567/317/482 566/316/482 -f 569/316/483 570/318/483 571/315/483 -f 572/317/483 571/315/483 570/318/483 -f 568/319/465 566/286/465 569/312/465 -f 570/314/465 569/312/465 566/286/465 -f 567/313/488 568/313/488 571/313/488 -f 569/313/488 571/313/488 568/313/488 -f 565/312/489 567/312/489 572/312/489 -f 571/312/489 572/312/489 567/312/489 -f 566/320/490 565/320/490 570/320/490 -f 572/320/490 570/320/490 565/320/490 -f 540/321/491 542/322/491 548/296/491 -f 550/323/491 548/296/491 542/322/491 -f 538/324/492 540/325/492 546/321/492 -f 548/322/492 546/321/492 540/325/492 -f 537/326/493 538/324/494 544/327/495 -f 546/321/496 544/327/495 538/324/494 -f 535/296/497 537/321/498 543/296/499 -f 544/321/499 543/296/499 537/321/498 -f 536/328/488 535/322/488 545/328/488 -f 543/322/488 545/328/488 535/322/488 -f 539/327/500 536/328/500 547/327/500 -f 545/328/500 547/327/500 536/328/500 -f 541/296/501 539/296/501 549/323/501 -f 547/323/501 549/323/501 539/296/501 -f 559/329/502 560/330/502 553/329/502 -f 551/330/502 553/329/502 560/330/502 -f 553/331/503 554/332/503 559/331/503 -f 558/332/503 559/331/503 554/332/503 -f 554/333/504 555/332/504 558/334/504 -f 556/329/504 558/334/504 555/332/504 -f 557/335/505 556/331/505 552/336/505 -f 555/337/505 552/336/505 556/331/505 -f 552/336/506 551/338/506 557/335/506 -f 560/332/506 557/335/506 551/338/506 -f 528/302/485 524/299/485 526/339/485 -f 563/315/482 516/316/482 561/317/482 -f 515/318/482 561/317/482 516/316/482 -f 517/316/483 518/318/483 562/315/483 -f 564/317/483 562/315/483 518/318/483 -f 529/339/484 527/302/484 531/299/484 -f 573/340/507 574/341/507 575/342/507 -f 576/343/507 577/344/507 578/345/507 -f 577/344/507 574/341/507 578/345/507 -f 579/346/507 574/341/507 577/344/507 -f 575/342/507 574/341/507 579/346/507 -f 580/347/507 575/342/507 579/346/507 -f 578/345/507 574/341/507 581/348/507 -f 579/349/508 582/350/509 580/351/510 -f 583/352/511 580/351/510 582/350/509 -f 580/351/510 583/352/511 575/353/512 -f 584/354/513 575/353/512 583/352/511 -f 575/353/512 584/354/513 573/355/514 -f 585/356/515 573/355/514 584/354/513 -f 573/355/514 585/356/515 574/357/516 -f 586/358/517 574/357/516 585/356/515 -f 574/357/516 586/358/517 581/355/518 -f 587/356/519 581/355/518 586/358/517 -f 581/355/518 587/356/519 578/353/520 -f 588/354/521 578/353/520 587/356/519 -f 578/353/520 588/354/521 576/351/522 -f 589/352/523 576/351/522 588/354/521 -f 576/351/522 589/352/523 577/349/524 -f 590/350/525 577/349/524 589/352/523 -f 577/349/524 590/350/525 591/359/526 -f 592/360/527 591/359/526 590/350/525 -f 591/359/526 592/360/527 593/361/528 -f 594/362/529 593/361/528 592/360/527 -f 593/361/528 594/362/529 595/359/530 -f 596/360/531 595/359/530 594/362/529 -f 595/359/530 596/360/531 579/349/508 -f 582/350/509 579/349/508 596/360/531 -f 596/360/531 597/363/532 582/350/509 -f 598/364/533 582/350/509 597/363/532 -f 582/350/509 598/364/533 583/352/511 -f 599/365/534 583/352/511 598/364/533 -f 583/352/511 599/365/534 584/354/513 -f 600/366/535 584/354/513 599/365/534 -f 584/354/513 600/366/535 585/356/515 -f 601/367/536 585/356/515 600/366/535 -f 585/356/515 601/367/536 586/358/517 -f 602/368/537 586/358/517 601/367/536 -f 586/358/517 602/368/537 587/356/519 -f 603/367/538 587/356/519 602/368/537 -f 587/356/519 603/367/538 588/354/521 -f 604/366/539 588/354/521 603/367/538 -f 588/354/521 604/366/539 589/352/523 -f 605/365/540 589/352/523 604/366/539 -f 589/352/523 605/365/540 590/350/525 -f 606/364/541 590/350/525 605/365/540 -f 590/350/525 606/364/541 592/360/527 -f 607/363/542 592/360/527 606/364/541 -f 592/360/527 607/363/542 594/362/529 -f 608/369/543 594/362/529 607/363/542 -f 594/362/529 608/369/543 596/360/531 -f 597/363/532 596/360/531 608/369/543 -f 604/344/544 603/370/544 605/343/544 -f 605/343/544 603/370/544 607/348/544 -f 607/348/544 603/370/544 599/347/544 -f 597/340/544 607/348/544 599/347/544 -f 598/342/544 597/340/544 599/347/544 -f 608/341/544 607/348/544 597/340/544 -f 606/345/544 605/343/544 607/348/544 -f 591/370/507 593/371/507 577/344/507 -f 593/371/507 579/346/507 577/344/507 -f 595/372/507 579/346/507 593/371/507 -f 600/346/544 599/347/544 601/372/544 -f 599/347/544 603/370/544 601/372/544 -f 601/372/544 603/370/544 602/371/544 -# 162 faces - -# -# object P_51_Mustang_Hull -# - -v -2.18 8.58 9.73 -v -2.30 8.86 6.02 -v -2.39 8.59 9.73 -v -3.01 6.76 9.95 -v -3.00 7.11 6.05 -v -2.52 8.87 6.26 -v -3.01 7.30 3.85 -v -2.47 9.05 4.06 -v -2.46 9.23 1.97 -v -2.94 7.47 1.76 -v -2.64 7.71 -0.97 -v -2.18 9.48 -0.86 -v -1.61 9.68 -3.39 -v -2.16 7.97 -4.05 -v -1.03 9.75 -4.33 -v -1.12 8.59 -5.66 -v 0.11 9.80 -4.96 -v -0.16 8.78 -6.15 -v 0.64 8.86 -6.31 -v 0.67 9.81 -5.10 -v 1.22 9.79 -4.97 -v 1.42 8.77 -6.17 -v 2.36 8.56 -5.69 -v 2.34 9.73 -4.36 -v 3.35 7.92 -4.07 -v 2.94 9.65 -3.40 -v 3.68 7.66 -1.02 -v 3.37 9.43 -0.91 -v 3.56 9.19 1.92 -v 3.88 7.42 1.70 -v 3.89 7.24 3.80 -v 3.50 9.01 4.01 -v 3.48 8.82 6.21 -v 3.80 7.05 6.00 -v 3.24 8.55 9.69 -v 3.68 6.70 9.89 -v 3.42 6.70 9.89 -v 3.02 8.54 9.69 -v 3.54 7.05 5.77 -v 3.25 8.81 5.98 -v 3.62 7.24 3.66 -v 3.27 9.00 3.86 -v 3.32 9.19 1.84 -v 3.62 7.42 1.64 -v 3.43 7.66 -0.98 -v 3.15 9.44 -0.88 -v 2.76 9.66 -3.28 -v 3.14 7.93 -3.92 -v 2.21 9.73 -4.21 -v 2.21 8.57 -5.48 -v 1.17 9.80 -4.74 -v 1.35 8.78 -5.89 -v 0.63 8.87 -6.03 -v 0.66 9.82 -4.87 -v 0.14 9.81 -4.73 -v -0.11 8.79 -5.88 -v -1.00 8.60 -5.46 -v -0.91 9.76 -4.19 -v -1.97 7.97 -3.90 -v -1.45 9.69 -3.27 -v -2.41 7.71 -0.94 -v -1.97 9.47 -0.84 -v -2.23 9.23 1.89 -v -2.68 7.47 1.69 -v -2.76 7.29 3.71 -v -2.25 9.05 3.90 -v -2.75 7.10 5.82 -v -2.76 6.75 9.94 -v -2.84 6.73 10.23 -v -0.81 12.12 9.64 -v -3.12 6.71 10.24 -v -1.01 12.45 9.62 -v 2.05 12.10 9.61 -v 2.28 12.42 9.59 -v 3.57 6.66 10.17 -v 3.86 6.66 10.17 -v 3.58 6.71 9.84 -v 2.05 12.09 9.29 -v -0.81 12.12 9.32 -v -2.83 6.78 9.90 -v 3.86 6.71 9.84 -v 2.28 12.42 9.26 -v -1.00 12.44 9.30 -v -3.12 6.76 9.90 -v 4.66 -1.79 -1.03 -v 4.25 -0.21 1.79 -v 5.11 -0.16 2.78 -v -3.87 -3.05 -1.87 -v -4.48 -1.72 -0.95 -v -3.60 -2.34 -4.87 -v -3.65 -3.03 1.13 -v -3.68 -1.87 2.11 -v -2.89 -2.82 3.93 -v -2.58 -1.80 4.33 -v -1.34 -1.85 5.56 -v -1.63 -3.21 5.62 -v -0.01 -1.92 6.45 -v -0.09 -3.54 6.63 -v 1.51 -3.23 5.59 -v 1.35 -1.87 5.53 -v 2.85 -2.86 3.87 -v 2.62 -1.84 4.28 -v 3.78 -1.93 2.04 -v 3.66 -3.09 1.06 -v 3.95 -3.11 -1.94 -v 3.82 -2.40 -4.94 -v 3.26 -4.73 -4.88 -v 3.54 -4.03 -1.52 -v 3.30 -4.95 -1.65 -v 2.58 -5.40 -4.82 -v 3.39 -3.91 1.68 -v 2.74 -3.53 4.26 -v 2.35 -3.57 6.63 -v 3.21 -4.15 4.04 -v 3.01 -4.04 6.65 -v 3.11 -5.17 4.28 -v 2.84 -5.09 6.73 -v 2.20 -5.93 4.14 -v 1.97 -5.61 6.76 -v -0.20 -5.90 6.80 -v 3.21 -5.14 1.70 -v 2.63 -5.80 -1.55 -v 2.42 -5.98 1.71 -v -2.81 -5.76 -1.50 -v -3.47 -4.44 -1.52 -v -2.64 -5.36 -4.77 -v -3.41 -5.09 1.76 -v -2.70 -5.94 1.75 -v -3.37 -5.12 4.34 -v -2.53 -5.90 4.18 -v -3.16 -5.04 6.79 -v -2.34 -5.58 6.80 -v -0.18 -6.23 2.91 -v 1.26 -6.32 1.56 -v 1.15 -6.28 -1.34 -v 1.38 -5.76 -5.00 -v 2.45 -4.83 -8.13 -v -3.37 -4.10 4.10 -v -3.47 -3.86 1.74 -v -2.85 -3.49 4.32 -v -3.10 -2.40 -8.95 -v -2.97 -3.71 -8.45 -v -3.25 -4.68 -4.82 -v -2.52 -3.54 6.68 -v -3.23 -3.99 6.71 -v 2.64 7.92 -7.83 -v 0.66 8.54 -8.04 -v 1.70 8.81 -6.12 -v 0.68 8.16 -10.79 -v -1.38 7.95 -7.79 -v -1.27 7.48 -10.79 -v -1.94 6.54 -10.08 -v -1.76 6.04 -15.12 -v -2.35 4.01 -14.71 -v -2.68 4.18 -10.15 -v -2.65 0.18 -14.70 -v -3.13 0.11 -9.48 -v -2.51 -1.75 -14.35 -v -2.17 -2.56 -13.63 -v -2.37 -4.79 -8.08 -v 0.70 7.68 -15.64 -v -0.96 7.14 -15.33 -v 3.16 -3.76 -8.51 -v 2.57 -2.60 -13.68 -v 0.19 -2.88 -13.74 -v 0.33 -0.98 -18.94 -v -1.92 -1.05 -18.81 -v -2.26 -0.55 -18.26 -v -2.16 1.12 -18.78 -v -1.95 3.55 -18.87 -v -1.41 5.63 -19.24 -v -0.63 6.76 -19.48 -v -1.82 0.96 -23.00 -v -1.73 -0.34 -22.73 -v 0.33 -2.07 -22.55 -v 2.58 -1.08 -18.86 -v 3.00 -1.79 -14.41 -v 3.43 -2.45 -9.01 -v 3.70 0.06 -9.54 -v 3.90 0.33 -5.99 -v 3.73 5.02 -6.62 -v 3.92 4.94 -3.00 -v 3.27 7.20 -5.88 -v 3.38 7.92 -4.06 -v 2.45 8.56 -5.59 -v -1.49 3.34 -25.54 -v -1.66 1.28 -25.54 -v -1.68 3.36 -23.04 -v -1.44 -0.13 -25.65 -v 0.43 -0.87 -25.61 -v 2.56 -0.37 -22.78 -v 2.94 -0.59 -18.32 -v 3.33 0.13 -14.76 -v 3.65 4.13 -10.21 -v 3.13 6.50 -10.13 -v 2.56 7.45 -10.83 -v 3.39 3.96 -14.77 -v 3.02 1.08 -18.84 -v -1.36 0.20 -28.16 -v 0.48 -0.62 -27.84 -v 2.38 -0.16 -25.69 -v 2.79 0.93 -23.05 -v 3.03 3.51 -18.93 -v 3.01 6.01 -15.17 -v 2.31 7.11 -15.36 -v 2.69 5.60 -19.28 -v 2.87 3.33 -23.10 -v 2.72 1.24 -25.59 -v 2.39 0.17 -28.20 -v 0.56 -0.18 -32.31 -v -1.02 0.49 -32.48 -v -1.45 1.45 -28.24 -v -1.11 1.83 -32.23 -v -1.22 3.44 -28.23 -v -0.97 3.60 -32.20 -v -0.54 0.61 -36.78 -v -0.65 1.57 -37.11 -v -0.39 0.69 -37.86 -v -0.54 1.56 -37.94 -v -0.40 3.34 -38.12 -v -0.52 3.41 -37.33 -v -0.81 4.47 -34.00 -v -0.80 3.33 -33.98 -v -1.08 4.53 -32.20 -v -1.18 4.91 -28.36 -v -1.43 5.01 -25.55 -v -1.39 5.21 -23.17 -v -1.29 5.80 -25.86 -v -0.82 5.27 -34.30 -v -1.17 5.60 -32.19 -v -0.67 5.70 -35.24 -v -1.25 5.89 -30.06 -v -0.71 6.30 -31.82 -v -1.23 6.04 -28.10 -v -0.11 6.62 -25.95 -v -0.61 6.31 -23.30 -v -0.34 5.20 -38.31 -v 0.09 7.37 -36.51 -v 0.29 7.13 -38.50 -v 0.20 8.38 -37.33 -v 0.34 8.23 -38.61 -v 0.86 15.56 -39.24 -v 0.26 8.62 -35.31 -v 0.18 7.65 -34.16 -v 0.30 8.02 -31.06 -v 0.74 7.30 -20.27 -v 2.04 6.74 -19.51 -v 1.68 6.61 -25.97 -v 2.08 6.29 -23.33 -v 2.78 5.77 -25.91 -v 2.84 4.97 -25.60 -v 2.67 4.88 -28.41 -v 2.57 3.42 -28.27 -v 2.44 3.57 -32.24 -v 2.41 1.80 -32.27 -v 2.28 1.75 -33.92 -v 2.14 0.64 -33.77 -v 1.86 0.59 -36.81 -v 0.59 -0.02 -33.73 -v 0.65 0.31 -37.01 -v 2.30 3.31 -34.01 -v 2.63 4.50 -32.24 -v 2.42 4.44 -34.04 -v 2.83 5.57 -32.24 -v 1.89 16.66 -36.52 -v 1.85 15.87 -36.07 -v 1.97 16.49 -38.45 -v 1.95 15.68 -38.16 -v 1.92 15.55 -39.26 -v 1.73 8.61 -35.34 -v 1.85 8.37 -37.37 -v 1.68 7.64 -34.19 -v 1.83 7.36 -36.54 -v 2.41 6.27 -31.86 -v 2.42 5.67 -35.28 -v 2.88 5.86 -30.11 -v 2.51 5.25 -34.34 -v 2.12 3.39 -37.36 -v 2.07 1.55 -37.14 -v 2.81 6.01 -28.14 -v 1.48 8.01 -31.09 -v 0.89 8.76 -29.21 -v 1.54 8.93 -32.66 -v 0.96 9.49 -30.87 -v 1.34 15.98 -35.15 -v 0.84 15.88 -36.04 -v 0.90 16.67 -36.50 -v 0.87 16.50 -38.43 -v 0.81 15.69 -38.13 -v 0.92 16.38 -39.42 -v 0.38 8.94 -32.64 -v 0.96 17.20 -36.78 -v 1.38 16.76 -35.70 -v 1.06 16.91 -39.48 -v 1.94 16.37 -39.44 -v 1.94 16.37 -39.43 -v 1.94 16.28 -39.43 -v 1.85 16.90 -39.49 -v 1.89 17.19 -36.80 -v 1.41 17.28 -36.06 -v 1.45 17.57 -37.12 -v 1.48 17.32 -39.52 -v 1.44 17.63 -36.65 -v 1.99 1.54 -37.97 -v 1.75 0.67 -37.88 -v 2.02 3.32 -38.14 -v 2.14 5.18 -38.33 -v 1.69 7.13 -38.52 -v 1.75 8.22 -38.63 -v 0.67 0.46 -37.85 -v 3.86 7.51 0.69 -v 3.95 4.68 1.12 -v 3.90 7.06 5.85 -v 3.95 4.60 6.04 -v 3.79 6.68 10.01 -v 3.87 4.45 9.55 -v 3.70 6.44 11.84 -v 3.81 3.46 11.93 -v 3.68 6.42 15.10 -v 3.73 4.91 15.20 -v 3.73 5.37 19.12 -v 3.69 2.76 19.65 -v 3.60 2.71 23.29 -v 3.53 0.63 23.15 -v 3.34 0.90 26.42 -v 3.07 -0.41 26.45 -v 2.86 1.14 31.85 -v 1.48 -0.38 32.12 -v 3.83 2.01 9.53 -v 3.89 1.66 6.29 -v 4.03 1.15 1.42 -v 4.05 0.52 -2.36 -v 4.15 -0.95 -1.80 -v 4.21 0.67 6.43 -v 4.10 1.18 9.55 -v 4.11 1.23 12.19 -v 3.73 2.28 15.62 -v 0.99 0.57 36.00 -v -0.28 -0.63 32.46 -v -0.28 0.36 36.21 -v -1.53 0.59 36.02 -v -2.00 -0.36 32.15 -v -3.23 1.19 31.90 -v -3.45 -0.36 26.51 -v -3.60 0.95 26.49 -v -3.73 0.69 23.22 -v -3.61 2.76 23.36 -v -3.60 2.82 19.72 -v -3.38 5.42 19.19 -v -3.33 4.97 15.27 -v -3.14 6.47 15.16 -v -3.46 3.51 12.00 -v -3.08 6.49 11.90 -v -3.37 4.51 9.62 -v -3.10 6.74 10.07 -v -2.61 -1.47 26.73 -v -0.26 -1.79 26.94 -v -3.76 -0.41 24.24 -v -3.32 -1.40 24.00 -v -2.16 -1.98 24.36 -v -0.25 -2.12 24.38 -v 2.12 -1.51 26.69 -v 2.91 -1.45 23.95 -v 3.44 -0.47 24.18 -v 1.68 -2.00 24.32 -v -3.35 4.66 6.11 -v -3.06 7.12 5.92 -v -3.22 4.74 1.19 -v -2.85 7.57 0.76 -v -3.06 5.00 -2.93 -v -2.21 7.96 -4.00 -v -2.13 7.24 -5.83 -v -1.19 8.59 -5.55 -v -0.40 8.83 -6.10 -v 0.66 8.89 -6.31 -v -2.77 5.07 -6.56 -v -3.39 0.39 -5.92 -v -3.61 0.58 -2.29 -v -3.64 1.21 1.49 -v -3.57 1.72 6.36 -v -3.56 2.07 9.60 -v -3.87 -0.89 -1.73 -v -3.99 -0.15 1.87 -v -3.99 0.73 6.51 -v -3.91 1.24 9.63 -v -3.98 1.29 12.27 -v -3.58 2.34 15.69 -v 3.48 8.59 10.06 -v 3.42 7.85 11.79 -v 3.40 7.97 12.78 -v 3.48 7.69 15.11 -v 3.72 6.84 18.67 -v 3.66 5.67 23.35 -v 3.50 2.82 26.85 -v 3.33 3.01 31.94 -v 2.17 1.58 35.93 -v 2.97 3.24 35.96 -v 1.87 2.09 38.21 -v 2.20 3.58 38.12 -v 3.30 5.02 36.17 -v 0.83 1.30 38.26 -v 2.01 3.59 38.71 -v 2.70 5.55 38.59 -v 3.26 6.60 35.87 -v 2.69 6.79 38.51 -v 2.56 8.39 35.96 -v 2.08 8.17 38.43 -v 2.14 8.94 35.78 -v 1.33 8.81 38.39 -v 1.17 9.51 35.68 -v 0.66 9.21 38.36 -v 0.16 9.58 35.68 -v 0.11 9.29 38.36 -v -0.45 9.22 38.37 -v -0.86 9.52 35.70 -v -1.16 8.83 38.41 -v -1.88 8.97 35.82 -v -1.96 8.20 38.46 -v -2.36 8.43 36.01 -v -0.94 9.87 31.34 -v -0.99 10.19 26.34 -v 0.31 10.34 26.77 -v 0.24 10.10 31.35 -v 1.40 9.85 31.31 -v 2.43 9.42 31.16 -v 2.98 8.72 31.28 -v 3.55 6.98 31.31 -v 3.30 9.02 26.28 -v 2.49 9.75 26.24 -v 2.79 9.81 22.99 -v 1.60 10.17 26.31 -v 1.80 10.21 23.30 -v 2.05 10.21 20.89 -v 0.35 10.44 23.69 -v 0.39 10.50 21.00 -v 0.42 10.41 17.76 -v 0.46 10.45 15.10 -v -1.03 10.08 15.41 -v -3.29 7.11 21.42 -v -3.28 7.11 23.77 -v -2.82 8.99 21.40 -v -2.82 8.71 18.17 -v -2.21 9.52 17.94 -v -2.03 9.13 15.29 -v -2.22 8.81 13.72 -v -1.24 9.98 14.02 -v 0.48 10.47 13.79 -v 1.91 10.06 15.38 -v 2.10 10.07 18.02 -v 2.87 9.77 21.15 -v 3.35 9.04 23.40 -v 3.64 6.98 26.77 -v -3.23 6.90 18.74 -v -3.39 5.73 23.42 -v -2.82 7.74 15.17 -v -2.65 8.02 12.84 -v -3.59 2.87 26.92 -v -2.66 7.90 11.85 -v -2.61 8.64 10.12 -v -2.70 6.83 38.56 -v -3.20 6.62 35.03 -v -2.83 5.59 38.64 -v -3.42 5.07 36.23 -v -2.33 3.62 38.75 -v -2.50 3.62 38.16 -v -3.25 3.29 36.02 -v -2.32 2.13 38.25 -v -2.60 1.62 35.98 -v -1.35 1.32 38.28 -v -3.53 3.06 32.00 -v -3.56 5.54 26.97 -v -3.59 4.96 32.12 -v -3.34 7.04 26.84 -v -2.77 9.09 23.46 -v -2.17 9.81 21.20 -v -1.29 10.09 18.05 -v -1.30 10.23 20.93 -v -1.11 10.24 23.32 -v -2.80 9.06 26.34 -v -2.13 9.85 23.04 -v -1.92 9.78 26.28 -v -2.63 8.76 31.33 -v -3.37 7.03 31.38 -v -2.01 9.46 31.20 -v 3.57 4.91 32.06 -v 3.72 5.49 26.90 -v 3.66 7.05 23.70 -v 3.73 7.06 21.36 -v 3.44 8.94 21.34 -v 3.50 8.66 18.11 -v 2.97 9.48 17.90 -v 2.82 9.09 15.25 -v 3.02 8.77 13.67 -v 2.14 9.95 13.99 -v -8.03 6.05 -27.42 -v -4.52 6.07 -27.32 -v -8.03 5.97 -28.86 -v -11.48 5.96 -28.73 -v -11.12 5.68 -31.09 -v -13.81 5.66 -30.77 -v -14.13 5.91 -28.57 -v -15.24 5.49 -30.33 -v -15.27 5.57 -28.02 -v -14.18 5.73 -27.39 -v -11.49 6.01 -27.59 -v -11.64 5.76 -26.95 -v -8.48 5.76 -26.64 -v -5.05 5.77 -26.30 -v -2.22 5.77 -26.09 -v -1.90 6.05 -27.63 -v -1.72 5.88 -29.69 -v -4.26 5.97 -29.14 -v -4.42 5.63 -31.75 -v -7.79 5.68 -31.43 -v -1.74 5.55 -32.08 -v 4.34 6.11 32.28 -v 4.06 6.10 32.66 -v 4.63 6.10 32.53 -v 4.17 6.09 33.03 -v 4.75 5.76 32.68 -v 4.21 5.75 33.23 -v 4.60 5.42 32.56 -v 4.14 5.41 33.05 -v 4.31 5.43 32.30 -v 4.02 5.42 32.69 -v 4.19 5.77 32.16 -v 3.98 5.77 32.49 -v 3.79 5.77 32.46 -v 3.80 6.10 32.64 -v 3.78 6.10 33.03 -v 3.75 5.75 33.24 -v 3.74 5.42 33.06 -v 3.76 5.42 32.67 -v 13.07 5.77 -29.01 -v 12.75 5.49 -31.56 -v 9.62 5.83 -29.06 -v 9.43 5.54 -31.80 -v 5.87 5.90 -29.25 -v 6.06 5.54 -32.00 -v 3.33 5.84 -29.75 -v 3.46 6.01 -27.69 -v 3.72 5.73 -26.16 -v 6.08 5.99 -27.44 -v 6.55 5.68 -26.43 -v 9.59 5.91 -27.62 -v 9.99 5.62 -26.85 -v 13.05 5.81 -27.87 -v 13.16 5.56 -27.23 -v 15.71 5.50 -27.73 -v 15.71 5.68 -28.91 -v 3.39 5.51 -32.16 -v 16.80 5.32 -28.38 -v 16.83 5.24 -30.69 -v 15.57 5.42 -31.45 -v 16.72 5.01 -33.40 -v 15.72 4.99 -33.73 -v 2.75 5.18 -23.22 -v 2.74 3.31 -25.59 -v 2.61 1.41 -28.29 -v 2.21 0.46 -32.52 -v -0.90 0.66 -33.74 -v -0.94 1.77 -33.88 -v -3.75 5.44 34.55 -v -3.73 5.78 34.73 -v -4.14 5.45 34.56 -v -4.02 5.45 34.19 -v -4.29 5.46 33.81 -v -4.13 5.81 33.67 -v -3.94 5.80 33.99 -v -4.26 6.14 33.78 -v -3.98 6.13 34.16 -v -4.55 6.14 34.05 -v -4.11 6.13 34.53 -v -4.72 5.80 34.19 -v -4.19 5.78 34.73 -v -4.59 5.46 34.07 -v -3.71 6.12 34.53 -v -3.72 6.13 34.14 -v -3.74 5.80 33.96 -v -3.76 5.45 34.16 -v -4.87 -0.09 2.87 -v -4.96 0.33 6.76 -v -4.97 0.69 9.85 -v -4.97 0.81 12.34 -v -4.02 1.40 15.81 -v -5.09 0.90 16.22 -v -4.95 0.55 19.82 -v -3.90 1.32 19.99 -v -4.83 0.16 22.21 -v -4.59 -0.55 23.22 -v 5.14 0.25 6.67 -v 6.54 -0.19 3.45 -v 6.70 0.02 6.36 -v 5.11 0.61 9.76 -v 6.75 0.38 9.22 -v 5.06 0.73 12.25 -v 6.64 0.56 12.08 -v 5.08 0.82 16.12 -v 6.67 0.70 16.38 -v 6.69 0.53 18.92 -v 4.83 0.58 19.72 -v 5.76 -0.33 22.01 -v 4.60 0.08 22.12 -v 4.27 -0.62 23.14 -v 6.08 -0.69 22.43 -v 8.22 -0.70 21.64 -v -2.94 -4.05 6.84 -v -2.50 -4.14 5.16 -v -2.29 -3.64 6.81 -v -1.95 -3.79 5.13 -v -0.10 -3.68 6.76 -v 2.10 -3.67 6.76 -v 1.79 -3.82 5.09 -v 2.71 -4.09 6.78 -v 2.31 -4.18 5.11 -v -2.69 8.37 10.10 -v -1.01 12.37 9.64 -v -2.40 8.38 10.10 -v -0.82 12.04 9.66 -v 2.27 12.34 9.61 -v 2.05 12.02 9.63 -v 3.51 8.33 10.04 -v 3.22 8.33 10.04 -v 3.84 1.26 19.92 -v 4.07 1.34 15.73 -v -4.70 -0.90 3.35 -v -4.70 -1.20 6.48 -v -6.30 -0.85 3.61 -v -6.56 -1.14 6.50 -v -12.47 -0.77 4.38 -v -12.73 -0.99 6.36 -v -6.67 -1.53 9.41 -v -14.07 -1.37 9.24 -v -6.52 -1.75 12.40 -v -13.54 -1.60 12.35 -v -6.88 -1.99 14.90 -v -14.82 -1.75 15.41 -v -7.22 -1.67 18.64 -v -4.86 -2.15 14.61 -v -4.82 -1.75 19.27 -v -3.62 -2.25 14.45 -v -3.44 -1.80 19.64 -v -1.88 -2.40 14.58 -v -1.67 -2.00 20.13 -v -0.19 -2.16 20.12 -v -3.22 -1.95 12.03 -v -4.78 -1.81 12.13 -v -4.74 -1.59 9.42 -v -2.95 -1.72 9.49 -v -1.52 -2.01 12.24 -v -0.12 -2.14 14.54 -v 1.61 -2.42 14.55 -v 1.30 -2.02 20.10 -v 3.10 -1.85 19.57 -v 3.08 -1.79 21.12 -v 4.47 -1.76 20.56 -v 3.43 -1.11 22.63 -v -0.09 -2.11 12.44 -v -2.90 -1.39 6.33 -v -1.41 -1.87 9.61 -v -0.05 -1.96 9.46 -v 1.31 -1.89 9.58 -v 1.35 -2.03 12.21 -v -1.47 -1.58 6.59 -v 1.48 -1.60 6.57 -v 4.85 -0.98 3.26 -v 6.45 -0.95 3.49 -v 4.75 -1.28 6.39 -v 6.61 -1.24 6.37 -v 4.68 -1.66 9.33 -v 6.61 -1.63 9.28 -v 4.63 -1.88 12.04 -v 6.36 -1.85 12.28 -v 4.61 -2.22 14.52 -v 6.63 -2.09 14.77 -v 6.91 -1.78 18.50 -v 4.50 -1.82 19.18 -v 7.17 -1.73 19.64 -v 3.37 -2.30 14.39 -v 3.06 -1.99 11.97 -v 2.87 -1.77 9.44 -v 2.93 -1.44 6.28 -v -0.21 -2.18 21.60 -v 1.16 -2.18 21.93 -v -13.50 -1.56 17.59 -v -7.50 -1.61 19.78 -v -4.83 -1.69 20.65 -v -3.45 -1.74 21.19 -v -1.59 -2.16 21.95 -v -3.78 -1.05 22.70 -v -14.13 -0.49 20.28 -v -8.50 -0.57 21.80 -v -6.38 -0.59 22.55 -v -6.57 0.66 12.21 -v -6.69 0.77 16.50 -v -13.44 0.66 12.23 -v -14.35 0.80 15.32 -v -6.79 0.64 19.05 -v -13.40 0.59 18.05 -v -6.02 -0.24 22.12 -v -14.04 0.46 9.14 -v -6.62 0.48 9.35 -v -6.54 0.12 6.49 -v -6.32 -0.09 3.57 -v -12.44 -0.05 4.34 -v -12.67 0.19 6.29 -v -2.87 -5.00 6.90 -v -2.45 -4.96 5.21 -v 2.56 -5.05 6.85 -v 2.18 -4.99 5.17 -v 1.76 -5.52 6.88 -v 1.50 -5.39 5.19 -v -0.19 -5.70 6.91 -v -2.13 -5.49 6.92 -v -1.81 -5.37 5.22 -v -3.14 5.42 35.50 -v -3.77 5.43 35.52 -v -3.16 5.24 35.02 -v -3.79 5.24 35.05 -v -3.34 5.42 26.54 -v -3.97 5.42 26.57 -v -3.34 5.62 26.05 -v -3.97 5.63 26.08 -v -3.93 6.43 26.05 -v -3.91 6.61 26.52 -v -3.30 6.42 26.02 -v -3.28 6.61 26.49 -v -3.73 6.43 35.00 -v -3.10 6.43 34.97 -v -3.73 6.23 35.49 -v -3.10 6.22 35.46 -v -3.88 5.93 27.60 -v -3.87 6.28 27.39 -v -4.34 5.93 27.59 -v -4.29 5.60 27.42 -v -4.74 5.61 26.94 -v -4.44 5.61 26.67 -v -4.17 5.60 27.05 -v -4.28 5.96 26.53 -v -4.09 5.95 26.85 -v -4.41 6.30 26.65 -v -4.13 6.29 27.02 -v -4.70 6.29 26.91 -v -4.26 6.28 27.39 -v -4.87 5.95 27.05 -v -3.87 6.28 27.00 -v -3.89 5.95 26.82 -v -3.91 5.60 27.03 -v -3.90 5.59 27.42 -v -1.21 9.64 14.41 -v -0.71 12.35 9.95 -v -1.44 9.65 14.42 -v -1.02 12.35 9.90 -v -1.45 9.34 14.15 -v -1.00 12.00 9.77 -v -1.22 9.34 14.15 -v -0.69 12.00 9.83 -v 2.22 12.32 9.86 -v 1.90 12.33 9.92 -v 2.27 9.62 14.38 -v 2.04 9.62 14.38 -v 2.17 11.98 9.74 -v 2.26 9.31 14.12 -v 1.85 11.98 9.80 -v 2.03 9.31 14.12 -v 0.81 -4.99 -22.81 -v -0.46 -4.98 -22.79 -v 0.82 -4.71 -23.17 -v -0.44 -4.70 -23.15 -v 0.89 -3.01 -22.29 -v -0.38 -3.00 -22.28 -v 0.96 -1.67 -22.95 -v -0.30 -1.66 -22.94 -v 0.96 -1.54 -22.03 -v -0.31 -1.53 -22.02 -v 0.89 -2.88 -21.51 -v -0.38 -2.87 -21.49 -v -1.47 -5.74 -4.97 -v -1.38 -6.26 -1.31 -v -1.57 -6.30 1.58 -v -0.12 -6.30 -1.26 -v -0.03 -5.59 -5.78 -v 0.03 -5.10 -8.16 -v 3.48 5.22 -27.47 -v 3.30 5.03 -29.46 -v 3.33 4.89 -32.33 -v 5.82 5.02 -29.12 -v 6.03 4.88 -32.03 -v 9.40 4.92 -31.81 -v 9.58 5.05 -28.94 -v 12.73 4.96 -31.49 -v 13.03 5.07 -28.91 -v 15.50 5.01 -31.28 -v 15.68 5.13 -28.83 -v 13.02 5.21 -27.78 -v 6.03 5.22 -27.32 -v 9.54 5.21 -27.51 -v -0.26 1.32 38.26 -v -15.08 5.26 -33.04 -v -14.07 5.22 -33.39 -v -14.09 5.21 -32.45 -v -13.95 5.24 -30.69 -v -14.16 5.36 -28.49 -v -11.51 5.26 -28.63 -v -11.52 5.40 -27.50 -v -8.05 5.35 -27.31 -v -4.55 5.31 -27.20 -v -1.99 5.26 -27.41 -v -1.77 5.07 -29.40 -v -1.73 4.93 -32.15 -v -4.31 5.09 -29.00 -v -8.06 5.19 -28.74 -v -4.44 4.96 -31.91 -v -7.82 5.05 -31.65 -v -11.33 5.14 -31.30 -v -1.04 1.63 37.01 -v 0.59 1.62 36.99 -v -1.77 2.24 36.99 -v -1.91 3.36 36.92 -v 1.37 2.21 36.96 -v 1.61 3.33 36.89 -v 2.64 -0.09 1.94 -v 2.34 6.46 -0.67 -v -2.37 -0.05 1.99 -v -1.39 6.49 -0.64 -v 2.56 -0.95 10.54 -v -2.59 -0.91 10.59 -v 2.52 4.84 11.25 -v -2.03 4.88 11.29 -v 2.59 6.63 11.43 -v -1.94 6.67 11.48 -v 0.49 10.12 11.77 -v 2.05 9.05 11.64 -v -1.17 9.07 11.67 -v 1.94 3.49 38.22 -v -2.26 3.52 38.26 -v -2.09 2.18 38.33 -v -1.23 1.46 38.36 -v 0.72 1.45 38.34 -v 1.65 2.15 38.30 -v -3.85 5.90 29.03 -v -3.83 6.25 28.83 -v -4.31 5.90 29.03 -v -4.26 5.57 28.86 -v -4.71 5.58 28.37 -v -4.41 5.58 28.11 -v -4.14 5.57 28.49 -v -4.25 5.93 27.97 -v -4.06 5.92 28.29 -v -4.38 6.27 28.08 -v -4.10 6.26 28.46 -v -4.67 6.26 28.35 -v -4.23 6.25 28.83 -v -4.84 5.92 28.49 -v -3.84 6.25 28.44 -v -3.86 5.92 28.26 -v -3.88 5.57 28.46 -v -3.87 5.56 28.85 -v -3.82 5.87 30.47 -v -3.80 6.22 30.26 -v -4.28 5.87 30.46 -v -4.23 5.54 30.29 -v -4.68 5.55 29.81 -v -4.38 5.55 29.54 -v -4.10 5.54 29.92 -v -4.22 5.90 29.40 -v -4.03 5.89 29.72 -v -4.35 6.24 29.52 -v -4.07 6.23 29.89 -v -4.64 6.23 29.78 -v -4.20 6.22 30.26 -v -4.80 5.89 29.92 -v -3.81 6.22 29.87 -v -3.83 5.89 29.69 -v -3.85 5.54 29.90 -v -3.84 5.53 30.29 -v -3.79 5.84 31.87 -v -3.78 6.19 31.66 -v -4.25 5.84 31.87 -v -4.20 5.51 31.69 -v -4.65 5.52 31.21 -v -4.35 5.52 30.95 -v -4.08 5.51 31.32 -v -4.19 5.87 30.80 -v -4.00 5.86 31.12 -v -4.32 6.21 30.92 -v -4.04 6.20 31.30 -v -4.61 6.20 31.18 -v -4.17 6.19 31.67 -v -4.78 5.86 31.33 -v -3.78 6.19 31.27 -v -3.80 5.86 31.09 -v -3.82 5.51 31.30 -v -3.81 5.50 31.69 -v -3.76 5.81 33.31 -v -3.74 6.16 33.10 -v -4.22 5.81 33.31 -v -4.17 5.48 33.13 -v -4.62 5.49 32.65 -v -4.32 5.49 32.38 -v -4.05 5.48 32.76 -v -4.16 5.84 32.24 -v -3.97 5.83 32.56 -v -4.29 6.17 32.36 -v -4.01 6.16 32.73 -v -4.58 6.17 32.62 -v -4.14 6.16 33.11 -v -4.75 5.83 32.77 -v -3.75 6.16 32.71 -v -3.77 5.83 32.53 -v -3.79 5.48 32.74 -v -3.78 5.47 33.13 -v 4.13 5.56 26.00 -v 4.09 5.36 26.49 -v 3.50 5.57 25.99 -v 3.46 5.36 26.48 -v 3.69 5.18 34.98 -v 3.06 5.19 34.96 -v 3.67 5.37 35.45 -v 3.04 5.37 35.44 -v 3.08 6.18 35.41 -v 3.71 6.17 35.42 -v 3.11 6.38 34.92 -v 3.74 6.38 34.93 -v 3.52 6.56 26.43 -v 4.15 6.55 26.45 -v 3.53 6.37 25.96 -v 4.16 6.37 25.97 -v 4.02 5.53 27.34 -v 4.41 5.53 27.34 -v 4.03 5.87 27.52 -v 4.49 5.87 27.51 -v 4.05 6.21 27.31 -v 4.45 6.21 27.31 -v 4.07 6.22 26.92 -v 4.33 6.22 26.94 -v 4.06 5.89 26.74 -v 4.26 5.88 26.77 -v 4.04 5.54 26.95 -v 4.30 5.54 26.97 -v 4.59 5.54 26.59 -v 4.87 5.54 26.85 -v 5.03 5.87 26.96 -v 4.90 6.22 26.82 -v 4.62 6.23 26.56 -v 4.46 5.89 26.45 -v 3.95 5.50 28.78 -v 4.34 5.50 28.78 -v 3.96 5.84 28.96 -v 4.42 5.84 28.95 -v 3.98 6.19 28.75 -v 4.38 6.18 28.75 -v 4.00 6.19 28.36 -v 4.26 6.19 28.38 -v 4.00 5.86 28.18 -v 4.19 5.85 28.21 -v 3.97 5.51 28.39 -v 4.23 5.51 28.41 -v 4.52 5.52 28.03 -v 4.80 5.51 28.28 -v 4.96 5.84 28.40 -v 4.83 6.19 28.26 -v 4.55 6.20 28.00 -v 4.39 5.86 27.88 -v 3.88 5.47 30.21 -v 4.27 5.47 30.21 -v 3.89 5.81 30.39 -v 4.35 5.81 30.38 -v 3.91 6.16 30.19 -v 4.31 6.15 30.18 -v 3.93 6.16 29.80 -v 4.19 6.16 29.81 -v 3.93 5.83 29.62 -v 4.12 5.82 29.64 -v 3.90 5.48 29.82 -v 4.16 5.48 29.84 -v 4.45 5.49 29.46 -v 4.73 5.48 29.72 -v 4.89 5.81 29.83 -v 4.77 6.16 29.69 -v 4.48 6.17 29.43 -v 4.32 5.83 29.32 -v 3.81 5.45 31.62 -v 4.21 5.44 31.61 -v 3.82 5.78 31.80 -v 4.28 5.78 31.79 -v 3.85 6.13 31.59 -v 4.24 6.12 31.59 -v 3.87 6.13 31.20 -v 4.12 6.13 31.22 -v 3.86 5.80 31.02 -v 4.05 5.80 31.05 -v 3.83 5.45 31.23 -v 4.09 5.45 31.25 -v 4.38 5.46 30.86 -v 4.67 5.45 31.12 -v 4.82 5.79 31.24 -v 4.70 6.13 31.09 -v 4.41 6.14 30.84 -v 4.26 5.80 30.72 -v 3.68 5.39 34.48 -v 4.07 5.38 34.48 -v 3.68 5.72 34.66 -v 4.14 5.72 34.65 -v 3.71 6.07 34.46 -v 4.10 6.06 34.45 -v 3.73 6.08 34.07 -v 3.99 6.07 34.08 -v 3.72 5.74 33.89 -v 3.91 5.74 33.91 -v 3.69 5.39 34.09 -v 3.95 5.39 34.11 -v 4.24 5.40 33.73 -v 4.53 5.39 33.99 -v 4.69 5.73 34.10 -v 4.56 6.07 33.96 -v 4.28 6.08 33.70 -v 4.12 5.74 33.59 -v 2.00 9.86 13.69 -v 0.48 10.50 13.49 -v 2.82 8.80 13.37 -v 3.16 8.00 12.53 -v 3.18 7.88 11.58 -v 3.25 8.63 9.91 -v 3.52 6.72 9.87 -v 3.62 7.10 5.87 -v 3.59 7.56 0.92 -v 3.15 7.97 -3.64 -v 2.31 8.62 -5.12 -v 1.61 8.87 -5.63 -v 0.65 8.95 -5.81 -v -0.32 8.88 -5.61 -v -1.05 8.64 -5.08 -v -1.99 8.01 -3.59 -v -2.58 7.61 0.98 -v -2.78 7.15 5.93 -v -2.82 6.77 9.93 -v -2.37 8.67 9.96 -v -2.41 7.93 11.63 -v -2.41 8.05 12.58 -v -2.01 8.84 13.42 -v -1.11 9.89 13.72 -v 2.65 -0.56 6.70 -v -2.55 -0.52 6.75 -v -2.25 3.17 2.89 -v 2.75 3.13 2.84 -v -1.08 9.58 0.57 -v 2.23 9.55 0.54 -v -2.17 3.24 6.44 -v 2.58 3.21 6.40 -v -2.27 0.09 6.82 -v 2.37 0.05 6.77 -v -1.09 9.25 -0.17 -v 2.22 9.22 -0.20 -v -1.96 -0.05 1.55 -v 2.19 -0.09 1.51 -v 3.50 8.34 10.37 -v 2.27 12.35 9.94 -v -1.02 12.37 9.97 -v -2.69 8.38 10.43 -v 3.22 8.34 10.37 -v 2.04 12.02 9.96 -v -0.82 12.04 9.99 -v -2.41 8.39 10.42 -v 1.01 7.38 -18.16 -v 1.12 12.77 -18.66 -v 0.72 7.40 -17.87 -v 0.98 12.78 -18.51 -v 0.43 7.39 -18.16 -v 0.84 12.77 -18.65 -v 0.72 7.38 -18.45 -v 0.98 12.77 -18.80 -v 15.64 4.97 -32.81 -# 1073 vertices - -vn 0.05 1.00 0.07 -vn -0.95 0.32 0.03 -vn -0.95 0.31 0.03 -vn -0.96 0.27 0.04 -vn -0.96 0.28 0.01 -vn -0.96 0.29 0.01 -vn -0.96 0.27 -0.04 -vn -0.96 0.27 -0.05 -vn -0.95 0.28 -0.12 -vn -0.96 0.26 -0.14 -vn -0.88 0.37 -0.28 -vn -0.88 0.40 -0.26 -vn -0.66 0.56 -0.49 -vn -0.59 0.64 -0.49 -vn -0.29 0.75 -0.59 -vn -0.31 0.76 -0.57 -vn 0.00 0.78 -0.62 -vn 0.00 0.79 -0.62 -vn 0.30 0.74 -0.60 -vn 0.32 0.75 -0.58 -vn 0.60 0.62 -0.50 -vn 0.69 0.52 -0.50 -vn 0.91 0.34 -0.25 -vn 0.91 0.30 -0.27 -vn 0.98 0.19 -0.09 -vn 0.98 0.18 -0.10 -vn 0.98 0.19 -0.01 -vn 0.98 0.18 -0.02 -vn 0.98 0.19 0.03 -vn 0.98 0.21 0.04 -vn 0.98 0.18 0.06 -vn 0.97 0.22 0.06 -vn 0.97 0.24 0.05 -vn -0.97 -0.22 -0.05 -vn -0.98 -0.20 -0.05 -vn -0.98 -0.17 -0.06 -vn -0.98 -0.16 -0.06 -vn -0.98 -0.18 -0.03 -vn -0.98 -0.19 -0.04 -vn -0.99 -0.17 0.01 -vn -0.99 -0.17 0.02 -vn -0.98 -0.18 0.08 -vn -0.98 -0.16 0.10 -vn -0.92 -0.28 0.27 -vn -0.92 -0.31 0.24 -vn -0.69 -0.51 0.51 -vn -0.62 -0.60 0.51 -vn -0.30 -0.73 0.62 -vn -0.33 -0.73 0.60 -vn -0.00 -0.77 0.64 -vn -0.00 -0.78 0.63 -vn 0.29 -0.74 0.61 -vn 0.32 -0.74 0.59 -vn 0.60 -0.62 0.50 -vn 0.67 -0.55 0.50 -vn 0.89 -0.38 0.25 -vn 0.89 -0.35 0.28 -vn 0.96 -0.26 0.11 -vn 0.96 -0.25 0.13 -vn 0.97 -0.26 0.04 -vn 0.97 -0.25 0.04 -vn 0.96 -0.26 -0.01 -vn 0.96 -0.28 -0.01 -vn 0.97 -0.25 -0.03 -vn 0.96 -0.29 -0.03 -vn 0.95 -0.30 -0.02 -vn 0.01 0.11 0.99 -vn 0.03 0.08 1.00 -vn 0.01 0.10 0.99 -vn -0.01 0.08 1.00 -vn -0.96 -0.28 -0.06 -vn -0.62 -0.79 -0.00 -vn -0.59 -0.81 -0.00 -vn 0.59 -0.81 0.01 -vn 0.54 -0.84 0.01 -vn 0.93 -0.36 -0.03 -vn 0.93 -0.36 -0.04 -vn -0.01 -0.10 -0.99 -vn 0.01 -0.08 -1.00 -vn -0.03 -0.08 -1.00 -vn 0.01 1.00 0.09 -vn -0.07 0.99 0.07 -vn -0.01 1.00 0.08 -vn -0.01 1.00 0.09 -vn 0.10 0.99 0.09 -vn 0.25 0.97 0.08 -vn -0.11 0.99 0.08 -vn 0.08 0.99 0.08 -vn -0.03 1.00 0.07 -vn -0.75 0.66 0.05 -vn 0.13 0.99 0.09 -vn 0.20 0.98 0.09 -vn -0.03 1.00 0.08 -vn -0.03 1.00 0.09 -vn 0.05 1.00 0.08 -vn 0.03 1.00 0.05 -vn 0.05 1.00 -0.03 -vn 0.08 0.99 -0.08 -vn 0.06 1.00 0.01 -vn 0.08 1.00 0.03 -vn 0.06 1.00 0.05 -vn -0.01 1.00 0.05 -vn -0.05 1.00 0.04 -vn -0.07 1.00 0.03 -vn -0.04 1.00 0.01 -vn -0.07 0.99 -0.09 -vn -0.04 1.00 -0.03 -vn -0.05 -0.95 -0.32 -vn -0.21 -0.95 -0.25 -vn -0.32 -0.93 -0.19 -vn -0.19 -0.98 -0.10 -vn -0.26 -0.93 0.26 -vn -0.13 -0.99 0.03 -vn 0.11 -0.99 0.04 -vn 0.21 -0.95 -0.25 -vn 0.31 -0.94 -0.16 -vn 0.18 -0.98 -0.08 -vn 0.25 -0.93 0.28 -vn 0.03 -0.95 -0.32 -vn 0.08 -0.99 -0.08 -vn -0.50 -0.86 -0.08 -vn -0.04 -1.00 -0.09 -vn -0.09 -0.99 -0.09 -vn -0.18 -0.98 -0.09 -vn -0.01 -1.00 -0.09 -vn -0.04 -0.99 -0.09 -vn 0.02 -1.00 -0.08 -vn -0.03 -1.00 -0.09 -vn 0.47 -0.88 -0.06 -vn -0.09 -0.99 -0.08 -vn -0.14 -0.99 -0.08 -vn -0.00 -1.00 -0.09 -vn 0.02 -1.00 -0.09 -vn 0.07 -0.99 -0.08 -vn 0.96 0.27 0.06 -vn 0.60 0.80 0.00 -vn 0.62 0.78 0.00 -vn -0.55 0.84 -0.01 -vn -0.59 0.81 -0.01 -vn -0.94 0.35 0.03 -vn -0.94 0.35 0.04 -vn 0.41 0.82 -0.40 -vn -0.95 -0.30 -0.05 -vn -1.00 0.04 -0.08 -vn -0.99 -0.05 -0.12 -vn -0.96 -0.21 0.16 -vn -0.94 -0.19 0.29 -vn -0.89 0.08 0.45 -vn -0.78 -0.00 0.62 -vn -0.65 0.14 0.75 -vn -0.63 0.51 0.59 -vn 0.02 0.13 0.99 -vn -0.01 0.11 0.99 -vn 0.65 0.46 0.61 -vn 0.66 0.08 0.75 -vn 0.89 -0.00 0.46 -vn 0.78 -0.07 0.62 -vn 0.91 -0.27 0.30 -vn 0.94 -0.30 0.18 -vn 1.00 -0.03 -0.06 -vn 0.92 -0.40 -0.02 -vn 0.99 -0.14 -0.10 -vn 0.86 -0.51 -0.10 -vn 0.95 -0.32 0.04 -vn 0.89 -0.45 -0.02 -vn 0.52 -0.85 -0.13 -vn 0.98 -0.12 0.13 -vn 0.84 0.44 0.32 -vn 0.51 0.86 0.05 -vn 0.96 0.25 0.09 -vn 0.91 0.41 0.06 -vn 0.88 -0.46 0.08 -vn 0.82 -0.55 0.13 -vn 0.38 -0.92 0.10 -vn 0.32 -0.94 0.14 -vn -0.01 -0.99 0.11 -vn 0.90 -0.43 0.03 -vn 0.56 -0.82 -0.06 -vn 0.52 -0.86 0.02 -vn -0.65 -0.76 -0.09 -vn -0.94 -0.35 -0.03 -vn -0.56 -0.82 -0.13 -vn -0.93 -0.36 0.00 -vn -0.55 -0.84 0.00 -vn -0.92 -0.40 0.06 -vn -0.41 -0.91 0.09 -vn -0.86 -0.50 0.12 -vn -0.35 -0.93 0.14 -vn -0.01 -1.00 0.08 -vn 0.13 -0.99 0.03 -vn 0.15 -0.99 -0.08 -vn 0.13 -0.98 -0.17 -vn 0.47 -0.84 -0.26 -vn -0.94 0.33 0.07 -vn -0.99 -0.03 0.11 -vn -0.81 0.51 0.29 -vn -0.99 -0.10 -0.13 -vn -0.92 -0.35 -0.19 -vn -0.89 -0.45 -0.10 -vn -0.48 0.87 0.03 -vn -0.89 0.46 0.04 -vn 0.66 0.74 -0.13 -vn 0.01 0.98 -0.20 -vn 0.46 0.85 -0.26 -vn 0.01 0.99 -0.13 -vn -0.62 0.77 -0.14 -vn -0.62 0.77 -0.12 -vn -0.91 0.41 -0.10 -vn -0.90 0.42 -0.10 -vn -0.98 0.17 -0.09 -vn -0.98 0.19 -0.08 -vn -1.00 -0.00 -0.09 -vn -1.00 0.03 -0.09 -vn -0.94 -0.31 -0.14 -vn -0.56 -0.78 -0.29 -vn -0.50 -0.82 -0.28 -vn 0.01 0.99 -0.10 -vn -0.60 0.79 -0.11 -vn 0.89 -0.42 -0.16 -vn 0.52 -0.81 -0.27 -vn -0.01 -0.93 -0.36 -vn -0.01 -1.00 0.00 -vn -0.58 -0.81 -0.14 -vn -0.97 -0.19 -0.14 -vn -0.99 0.05 -0.10 -vn -0.98 0.16 -0.09 -vn -0.91 0.40 -0.09 -vn -0.63 0.77 -0.09 -vn -1.00 -0.02 -0.08 -vn -0.87 -0.47 -0.16 -vn -0.02 -0.99 -0.17 -vn 0.54 -0.83 -0.11 -vn 0.91 -0.39 -0.12 -vn 0.98 -0.19 -0.11 -vn 1.00 -0.06 -0.06 -vn 1.00 -0.02 -0.06 -vn 0.99 0.13 -0.06 -vn 1.00 0.08 -0.05 -vn 0.91 0.39 -0.13 -vn 0.96 0.25 -0.14 -vn -0.99 0.07 -0.07 -vn -1.00 -0.03 -0.07 -vn -0.99 0.11 -0.06 -vn -0.77 -0.62 -0.11 -vn -0.01 -0.99 -0.17 -vn 0.83 -0.54 -0.13 -vn 0.95 -0.28 -0.11 -vn 0.99 -0.09 -0.07 -vn 0.99 0.10 -0.06 -vn 0.94 0.34 -0.08 -vn 0.66 0.74 -0.11 -vn 0.99 0.08 -0.07 -vn 1.00 -0.04 -0.08 -vn -0.81 -0.58 -0.11 -vn -0.01 -0.99 -0.11 -vn 0.74 -0.67 -0.08 -vn 0.99 -0.11 -0.05 -vn 1.00 0.07 -0.07 -vn 0.93 0.35 -0.09 -vn 0.63 0.77 -0.10 -vn 0.94 0.32 -0.07 -vn 1.00 0.02 -0.03 -vn 0.99 -0.12 -0.04 -vn 0.78 -0.63 -0.08 -vn -0.01 -0.99 -0.10 -vn -0.81 -0.57 -0.12 -vn -1.00 0.01 -0.08 -vn -1.00 0.02 -0.09 -vn -0.99 0.07 -0.08 -vn -1.00 -0.02 -0.07 -vn -0.75 -0.65 -0.12 -vn -0.99 -0.05 -0.11 -vn -0.72 -0.67 -0.16 -vn -0.99 -0.06 -0.13 -vn -0.99 0.05 -0.13 -vn -0.98 0.14 -0.14 -vn -0.99 -0.03 -0.13 -vn -0.99 0.03 -0.10 -vn -0.99 -0.09 -0.09 -vn -1.00 0.02 -0.07 -vn -0.99 0.15 0.00 -vn -0.93 0.36 -0.04 -vn -0.84 0.53 0.04 -vn -0.98 -0.05 -0.18 -vn -0.91 0.39 -0.13 -vn -0.97 0.20 -0.11 -vn -0.71 0.70 -0.06 -vn -0.80 0.60 -0.04 -vn -0.49 0.87 0.01 -vn -0.72 0.69 0.04 -vn -0.70 0.71 -0.03 -vn -0.98 0.16 -0.12 -vn -0.97 0.22 -0.07 -vn -1.00 0.07 -0.05 -vn -0.99 0.05 -0.11 -vn -0.99 0.10 0.02 -vn -0.95 0.32 0.00 -vn -0.94 0.32 0.07 -vn -0.00 1.00 -0.06 -vn 0.67 0.73 -0.07 -vn 0.75 0.65 0.06 -vn 0.84 0.55 -0.03 -vn 0.88 0.48 0.07 -vn 1.00 0.06 0.03 -vn 1.00 -0.07 -0.05 -vn 1.00 -0.03 -0.05 -vn 0.99 -0.11 -0.04 -vn 1.00 -0.07 -0.06 -vn 0.99 -0.08 -0.07 -vn 0.80 -0.59 -0.09 -vn 0.71 -0.70 -0.10 -vn -0.01 -0.99 -0.12 -vn 1.00 -0.06 -0.07 -vn 0.98 -0.18 -0.06 -vn 0.99 -0.13 -0.09 -vn 0.94 0.33 -0.11 -vn 0.96 0.13 0.26 -vn 0.96 0.11 0.26 -vn 0.99 0.13 0.01 -vn 1.00 -0.03 0.02 -vn 1.00 -0.03 -0.01 -vn 1.00 0.01 0.06 -vn 1.00 -0.02 -0.02 -vn 0.97 0.25 0.04 -vn 0.99 0.14 -0.03 -vn 0.83 0.55 -0.02 -vn 0.98 0.16 -0.09 -vn 0.75 0.66 -0.04 -vn 0.99 -0.11 -0.11 -vn 0.99 -0.05 -0.09 -vn 0.99 -0.14 -0.08 -vn 0.52 0.85 0.02 -vn 0.96 0.26 0.10 -vn 0.02 0.97 0.22 -vn 0.99 0.08 0.14 -vn 0.03 0.82 0.57 -vn 0.01 0.55 0.84 -vn -0.95 0.20 0.23 -vn -0.95 0.22 0.24 -vn -0.98 0.19 -0.06 -vn -1.00 0.07 -0.02 -vn -0.63 0.76 -0.13 -vn -0.98 0.18 0.11 -vn -0.98 0.17 -0.08 -vn -0.83 0.53 0.15 -vn 0.01 0.57 0.82 -vn -0.86 0.50 -0.08 -vn 1.00 -0.03 -0.02 -vn 1.00 0.03 -0.03 -vn 0.90 0.44 -0.05 -vn 0.87 0.46 0.16 -vn -0.06 0.74 0.67 -vn -0.06 1.00 0.01 -vn 0.04 0.99 -0.10 -vn -1.00 0.05 -0.02 -vn 0.98 -0.15 -0.10 -vn 0.70 -0.71 -0.13 -vn 0.99 -0.05 -0.13 -vn 0.99 0.08 -0.11 -vn 0.99 0.08 -0.08 -vn 1.00 0.06 -0.02 -vn 1.00 0.03 -0.00 -vn 1.00 0.02 0.01 -vn 1.00 0.01 0.02 -vn 1.00 0.08 0.06 -vn 1.00 0.01 0.03 -vn 0.99 0.11 0.03 -vn 1.00 0.07 0.02 -vn 1.00 0.09 -0.00 -vn 1.00 -0.00 0.01 -vn 1.00 0.03 0.03 -vn 1.00 -0.03 0.03 -vn 1.00 -0.03 0.07 -vn 0.99 -0.14 0.07 -vn 0.89 -0.42 0.16 -vn 0.88 -0.44 0.17 -vn 0.49 -0.84 0.25 -vn 0.98 0.17 -0.05 -vn 0.99 0.14 -0.00 -vn 1.00 0.08 -0.01 -vn 1.00 0.03 -0.04 -vn 0.97 0.21 -0.13 -vn 0.98 0.19 -0.04 -vn 0.95 0.30 -0.03 -vn 0.96 0.27 -0.05 -vn 0.99 0.15 0.03 -vn 0.99 0.17 0.02 -vn 0.50 -0.83 0.25 -vn -0.01 -0.97 0.24 -vn -0.01 -0.97 0.26 -vn -0.53 -0.81 0.25 -vn -0.52 -0.82 0.24 -vn -0.92 -0.37 0.15 -vn -0.93 -0.35 0.14 -vn -1.00 -0.05 0.05 -vn -1.00 0.07 0.05 -vn -1.00 0.06 0.01 -vn -0.99 0.13 0.00 -vn -1.00 0.09 -0.02 -vn -0.99 0.11 -0.02 -vn -0.98 0.18 -0.03 -vn -0.99 0.16 -0.01 -vn -0.98 0.20 0.00 -vn -0.99 0.10 0.00 -vn -0.98 0.17 0.03 -vn -0.51 -0.84 0.20 -vn -0.01 -0.99 0.17 -vn -0.98 -0.10 0.14 -vn -0.73 -0.67 0.14 -vn -0.27 -0.95 0.15 -vn -0.01 -0.99 0.16 -vn 0.47 -0.86 0.20 -vn 0.69 -0.71 0.15 -vn 0.97 -0.18 0.16 -vn 0.25 -0.96 0.16 -vn -0.99 0.10 -0.01 -vn -0.99 0.12 -0.01 -vn -0.99 0.12 -0.03 -vn -0.99 0.15 -0.05 -vn -0.98 0.17 -0.07 -vn -0.93 0.33 -0.16 -vn -0.88 0.46 -0.15 -vn -0.66 0.56 -0.50 -vn -0.43 0.86 -0.26 -vn -0.97 0.22 -0.08 -vn -0.99 0.12 -0.06 -vn -0.98 0.17 -0.03 -vn -0.97 0.22 -0.02 -vn -0.96 0.25 -0.07 -vn -0.95 0.29 -0.15 -vn -0.96 0.28 -0.06 -vn -0.92 0.38 -0.05 -vn -0.94 0.35 -0.08 -vn -0.97 0.24 0.00 -vn -0.97 0.25 -0.00 -vn 0.98 0.16 0.10 -vn 0.98 0.19 0.05 -vn 0.97 0.25 -0.00 -vn 0.96 0.28 -0.03 -vn 1.00 0.06 -0.01 -vn 1.00 -0.02 0.01 -vn 0.99 -0.09 0.04 -vn 0.98 -0.20 0.08 -vn 0.78 -0.59 0.20 -vn 0.94 -0.29 0.20 -vn 0.79 -0.54 0.29 -vn 0.91 -0.25 0.32 -vn 0.98 -0.09 0.19 -vn 0.61 -0.75 0.26 -vn 0.91 -0.31 0.29 -vn 0.96 -0.12 0.25 -vn 0.97 0.19 0.14 -vn 0.96 0.21 0.20 -vn 0.85 0.50 0.16 -vn 0.78 0.58 0.22 -vn 0.63 0.76 0.15 -vn 0.56 0.80 0.21 -vn 0.30 0.94 0.13 -vn 0.30 0.94 0.15 -vn 0.01 0.99 0.12 -vn 0.01 0.99 0.11 -vn -0.28 0.95 0.14 -vn -0.28 0.95 0.12 -vn -0.52 0.83 0.19 -vn -0.60 0.79 0.13 -vn -0.75 0.63 0.20 -vn -0.83 0.54 0.13 -vn -0.28 0.96 0.08 -vn -0.27 0.96 0.04 -vn 0.01 1.00 0.05 -vn 0.01 1.00 0.07 -vn 0.31 0.95 0.09 -vn 0.61 0.79 0.09 -vn 0.87 0.48 0.09 -vn 0.98 0.16 0.06 -vn 0.87 0.48 0.05 -vn 0.55 0.83 0.07 -vn 0.61 0.79 0.03 -vn 0.29 0.96 0.05 -vn 0.28 0.96 0.03 -vn 0.33 0.95 -0.01 -vn 0.01 1.00 0.02 -vn 0.01 1.00 -0.01 -vn 0.01 1.00 -0.02 -vn -0.46 0.89 -0.04 -vn -0.99 0.14 -0.02 -vn -0.98 0.17 -0.01 -vn -0.90 0.44 -0.02 -vn -0.91 0.41 -0.08 -vn -0.69 0.72 -0.09 -vn -0.77 0.63 -0.10 -vn -0.84 0.54 0.01 -vn -0.58 0.82 0.03 -vn 0.49 0.87 -0.03 -vn 0.39 0.92 -0.04 -vn 0.67 0.75 -0.01 -vn 0.92 0.39 0.02 -vn 0.99 0.11 0.02 -vn -0.99 0.15 -0.04 -vn -0.93 0.36 -0.06 -vn -0.94 0.34 -0.02 -vn -1.00 0.00 0.01 -vn -0.96 0.27 0.02 -vn -0.97 0.24 0.08 -vn -0.95 0.28 0.14 -vn -0.95 0.29 0.09 -vn -0.98 -0.02 0.21 -vn -0.98 0.04 0.17 -vn -0.93 -0.23 0.27 -vn -0.94 -0.17 0.31 -vn -0.96 -0.21 0.18 -vn -0.83 -0.48 0.28 -vn -0.82 -0.54 0.19 -vn -0.64 -0.72 0.26 -vn -0.99 -0.11 0.06 -vn -1.00 0.08 -0.01 -vn -1.00 0.04 0.03 -vn -0.98 0.20 -0.01 -vn -0.89 0.46 -0.00 -vn -0.63 0.78 -0.03 -vn -0.36 0.93 -0.05 -vn -0.30 0.95 -0.02 -vn -0.26 0.97 0.03 -vn -0.84 0.54 0.03 -vn -0.58 0.82 0.02 -vn -0.52 0.85 0.05 -vn -0.84 0.54 0.07 -vn -0.97 0.25 0.04 -vn -0.57 0.82 0.07 -vn 1.00 -0.06 0.05 -vn 1.00 0.08 0.01 -vn 1.00 0.05 0.01 -vn 0.93 0.37 0.01 -vn 0.94 0.34 -0.06 -vn 0.73 0.68 -0.07 -vn 0.81 0.58 -0.08 -vn 0.88 0.47 0.03 -vn 0.62 0.78 0.04 -vn -0.02 0.99 0.14 -vn -0.01 0.99 0.11 -vn -0.01 1.00 -0.08 -vn -0.02 1.00 -0.08 -vn -0.02 0.99 -0.12 -vn -0.09 0.99 -0.12 -vn -0.15 0.99 0.00 -vn -0.18 0.98 -0.10 -vn -0.14 0.98 0.16 -vn -0.04 0.99 0.16 -vn -0.05 0.93 0.35 -vn -0.03 0.94 0.33 -vn -0.02 0.96 0.28 -vn -0.02 0.98 0.18 -vn 0.02 1.00 0.05 -vn -0.03 0.99 0.15 -vn -0.01 1.00 -0.02 -vn -0.08 0.99 -0.09 -vn -0.03 0.99 -0.10 -vn 0.00 1.00 -0.09 -vn -0.01 0.99 -0.12 -vn 0.01 0.99 -0.14 -vn -0.43 0.85 -0.29 -vn -0.14 0.94 -0.32 -vn 0.37 0.86 0.35 -vn 0.25 0.81 0.54 -vn 0.72 0.00 0.70 -vn 0.39 0.00 0.92 -vn 0.37 -0.86 0.35 -vn 0.24 -0.81 0.53 -vn -0.43 -0.84 -0.34 -vn -0.15 -0.93 -0.34 -vn -0.83 0.06 -0.55 -vn -0.44 -0.00 -0.90 -vn 0.13 -0.05 -0.99 -vn 0.04 0.86 -0.51 -vn 0.01 0.85 0.52 -vn 0.02 0.02 1.00 -vn -0.00 -0.86 0.51 -vn 0.04 -0.86 -0.51 -vn 0.03 1.00 -0.08 -vn 0.03 0.99 -0.11 -vn 0.02 1.00 -0.08 -vn 0.02 0.99 -0.11 -vn 0.01 1.00 -0.09 -vn 0.00 0.99 -0.13 -vn -0.00 1.00 0.05 -vn 0.09 0.99 -0.08 -vn 0.02 1.00 -0.02 -vn 0.04 0.99 0.15 -vn 0.04 0.98 0.18 -vn 0.02 0.99 0.11 -vn 0.04 0.96 0.28 -vn 0.04 0.99 0.14 -vn 0.05 0.94 0.33 -vn 0.06 0.98 0.16 -vn 0.08 0.93 0.36 -vn 0.16 0.97 0.17 -vn 0.17 0.99 0.01 -vn -0.01 0.99 -0.14 -vn 0.22 0.97 -0.09 -vn 0.12 0.99 -0.11 -vn 0.08 0.98 -0.15 -vn 0.04 0.98 -0.18 -vn 0.96 0.28 -0.02 -vn 1.00 -0.02 -0.04 -vn 1.00 -0.08 -0.05 -vn 0.78 -0.62 -0.10 -vn -0.84 -0.54 -0.12 -vn -0.99 0.01 -0.10 -vn 0.00 -0.86 0.51 -vn -0.00 0.04 1.00 -vn -0.26 -0.80 0.54 -vn 0.13 -0.94 -0.32 -vn 0.40 -0.86 -0.32 -vn 0.84 -0.02 -0.54 -vn 0.43 -0.04 -0.90 -vn 0.47 0.83 -0.30 -vn 0.15 0.93 -0.33 -vn -0.34 0.87 0.34 -vn -0.21 0.82 0.53 -vn -0.72 0.04 0.69 -vn -0.38 0.03 0.92 -vn -0.39 -0.85 0.35 -vn 0.01 0.87 0.50 -vn -0.04 0.86 -0.51 -vn -0.15 -0.02 -0.99 -vn -0.06 -0.85 -0.53 -vn -0.14 0.97 -0.18 -vn -0.17 0.97 -0.18 -vn -0.39 0.91 -0.13 -vn -0.41 0.90 -0.12 -vn -0.46 0.88 -0.07 -vn -0.47 0.88 -0.06 -vn -0.44 0.90 -0.04 -vn -0.44 0.90 0.01 -vn -0.41 0.91 0.05 -vn -0.58 0.81 0.10 -vn -0.59 0.80 0.11 -vn -0.63 0.72 0.30 -vn -0.67 0.62 0.41 -vn -0.71 0.49 0.51 -vn -0.71 0.49 0.50 -vn 0.07 0.99 -0.11 -vn 0.12 0.99 -0.10 -vn 0.08 0.99 -0.10 -vn 0.12 0.99 -0.08 -vn 0.11 0.99 -0.10 -vn 0.11 0.99 -0.04 -vn 0.10 0.99 -0.04 -vn 0.07 1.00 0.01 -vn 0.07 1.00 0.02 -vn 0.11 0.98 0.18 -vn 0.15 0.96 0.22 -vn 0.25 0.87 0.42 -vn 0.34 0.83 0.44 -vn 0.29 0.76 0.58 -vn 0.21 0.82 0.53 -vn 0.19 0.92 0.36 -vn 0.53 -0.83 0.18 -vn 0.31 -0.94 0.15 -vn 0.24 -0.96 0.13 -vn -0.00 -1.00 0.08 -vn -0.33 -0.93 0.14 -vn -0.27 -0.95 0.14 -vn -0.56 -0.81 0.18 -vn -0.97 0.22 0.05 -vn -0.91 0.42 0.01 -vn -0.01 -0.11 -0.99 -vn 0.99 0.13 0.07 -vn 0.94 0.34 0.03 -vn 0.73 0.43 0.53 -vn 0.70 0.56 0.44 -vn 0.65 0.69 0.32 -vn 0.58 0.80 0.14 -vn 0.57 0.81 0.13 -vn 0.46 0.89 0.02 -vn 0.44 0.90 0.05 -vn 0.46 0.89 -0.03 -vn 0.47 0.88 -0.03 -vn 0.50 0.87 -0.06 -vn 0.49 0.87 -0.06 -vn 0.44 0.89 -0.11 -vn 0.41 0.90 -0.12 -vn 0.19 0.97 -0.17 -vn 0.16 0.97 -0.18 -vn -0.67 0.00 -0.74 -vn 0.67 -0.06 -0.74 -vn -0.05 -0.99 -0.10 -vn -0.06 -0.99 -0.11 -vn -0.04 -0.99 -0.10 -vn -0.03 -0.99 -0.12 -vn -0.02 -0.99 -0.11 -vn -0.02 -0.99 -0.13 -vn -0.03 -0.99 -0.10 -vn -0.02 -0.99 -0.10 -vn -0.03 -1.00 -0.07 -vn -0.05 -1.00 -0.01 -vn -0.03 -1.00 0.02 -vn -0.04 -1.00 0.07 -vn -0.08 -1.00 -0.02 -vn -0.05 -1.00 0.07 -vn -0.08 -1.00 -0.03 -vn -0.09 -0.99 0.06 -vn 0.02 -1.00 -0.04 -vn -0.12 -0.99 0.01 -vn -0.01 -1.00 0.02 -vn -0.06 -0.99 -0.12 -vn -0.07 -0.99 -0.11 -vn -0.05 -0.99 -0.11 -vn -0.08 -0.99 -0.10 -vn -0.01 -1.00 -0.05 -vn -0.03 -1.00 -0.05 -vn 0.11 -0.99 0.02 -vn 0.07 -1.00 0.06 -vn 0.19 -0.97 0.14 -vn 0.10 -0.97 0.22 -vn 0.53 -0.80 0.29 -vn -0.01 -1.00 -0.03 -vn -0.11 -0.99 -0.10 -vn -0.08 -0.99 -0.07 -vn 0.07 -1.00 -0.07 -vn 0.01 -1.00 -0.09 -vn -0.18 -0.98 0.08 -vn -0.88 -0.16 0.45 -vn -0.86 -0.25 0.44 -vn -0.24 -0.94 0.22 -vn -0.01 -0.97 0.23 -vn 0.23 -0.95 0.22 -vn 0.16 -0.98 0.08 -vn 0.83 -0.32 0.45 -vn 0.86 -0.24 0.45 -vn 0.03 -1.00 -0.09 -vn 0.03 -0.99 -0.10 -vn 0.04 -0.99 -0.11 -vn 0.02 -0.99 -0.12 -vn 0.03 -0.99 -0.11 -vn 0.02 -0.99 -0.11 -vn 0.05 -0.99 -0.11 -vn 0.04 -0.99 -0.10 -vn 0.06 -1.00 -0.02 -vn 0.07 -1.00 -0.00 -vn 0.04 -1.00 0.07 -vn 0.09 -0.97 0.23 -vn 0.07 -1.00 -0.03 -vn 0.06 -0.99 -0.10 -vn 0.09 -0.99 -0.10 -vn -0.01 -1.00 -0.02 -vn 0.13 -0.99 0.00 -vn 0.61 -0.78 0.12 -vn 0.66 -0.70 0.29 -vn 0.23 -0.89 0.39 -vn 0.14 -0.91 0.40 -vn 0.14 -0.91 0.39 -vn -0.07 -0.98 0.20 -vn -0.10 -0.97 0.23 -vn -0.11 -0.97 0.22 -vn -0.21 -0.97 0.13 -vn -0.14 -0.99 0.00 -vn -0.01 -1.00 0.05 -vn 0.25 -0.97 0.02 -vn -0.56 -0.78 0.28 -vn -0.11 -0.93 0.35 -vn -0.14 -0.91 0.39 -vn -0.14 -0.90 0.40 -vn -0.25 -0.89 0.39 -vn -0.69 -0.67 0.28 -vn -0.66 -0.75 0.11 -vn -0.27 -0.96 0.01 -vn -0.08 -0.99 -0.09 -vn -0.18 -0.98 0.03 -vn -0.01 -1.00 -0.07 -vn -0.01 -1.00 -0.01 -vn 0.16 -0.99 0.03 -vn 0.06 -0.99 -0.09 -vn -0.11 -0.99 -0.09 -vn -0.46 -0.88 0.13 -vn -0.19 -0.98 0.07 -vn -0.46 -0.87 0.18 -vn 0.44 -0.88 0.19 -vn 0.18 -0.98 0.08 -vn 0.43 -0.89 0.14 -vn 0.09 -0.99 -0.09 -vn -0.09 0.99 -0.04 -vn -0.04 1.00 -0.04 -vn 0.00 1.00 -0.05 -vn -0.00 1.00 0.01 -vn -0.03 0.98 0.17 -vn -0.06 0.97 0.23 -vn -0.21 0.89 0.42 -vn -0.20 0.84 0.51 -vn -0.27 0.78 0.57 -vn -0.32 0.86 0.40 -vn -0.09 0.97 0.21 -vn -0.10 0.91 0.41 -vn -0.15 0.87 0.46 -vn -0.00 1.00 -0.08 -vn -0.04 0.99 -0.09 -vn -0.10 0.99 -0.08 -vn -0.05 0.99 -0.10 -vn -0.10 0.99 -0.10 -vn -0.04 1.00 -0.09 -vn -0.05 0.99 -0.11 -vn 0.01 0.99 -0.11 -vn 0.97 0.08 0.25 -vn -0.51 0.85 0.14 -vn -0.32 0.94 0.12 -vn -0.26 0.96 0.14 -vn 0.06 0.97 0.23 -vn 0.32 0.93 0.16 -vn 0.26 0.96 0.12 -vn 0.54 0.83 0.16 -vn -0.96 0.17 0.22 -vn 0.01 -0.93 0.36 -vn 0.00 -0.98 0.17 -vn 0.00 -0.98 0.18 -vn -0.02 -0.98 -0.21 -vn -0.02 -0.98 -0.20 -vn -0.02 -0.92 -0.39 -vn -0.01 0.93 -0.36 -vn -0.00 0.98 -0.17 -vn -0.00 0.98 -0.18 -vn 0.02 0.98 0.21 -vn 0.02 0.98 0.20 -vn 0.02 0.92 0.39 -vn 0.04 0.04 1.00 -vn -1.00 0.05 0.02 -vn -0.04 -0.04 -1.00 -vn -0.08 0.86 0.51 -vn 0.01 0.86 0.52 -vn -1.00 0.08 -0.05 -vn -0.99 -0.02 -0.11 -vn -0.99 -0.02 -0.12 -vn -0.01 -0.85 -0.52 -vn 0.08 -0.85 -0.52 -vn 0.09 -0.85 -0.52 -vn 0.99 -0.09 0.07 -vn 0.99 0.01 0.12 -vn 0.99 0.02 0.12 -vn 0.11 0.85 0.51 -vn 0.02 0.85 0.52 -vn 0.99 -0.11 -0.09 -vn -0.11 -0.85 -0.52 -vn -0.02 -0.85 -0.52 -vn -0.99 0.11 0.10 -vn -1.00 0.01 0.04 -vn -1.00 0.00 0.04 -vn -0.01 -0.10 -1.00 -vn -0.01 -0.79 -0.61 -vn -0.00 0.46 -0.89 -vn -0.01 -0.44 -0.90 -vn 0.01 0.36 0.93 -vn 0.00 -0.53 0.85 -vn -1.00 0.05 -0.01 -vn 1.00 -0.05 0.01 -vn -0.16 -0.97 -0.18 -vn -0.17 -0.98 -0.08 -vn -0.14 -0.99 0.02 -vn -0.01 -1.00 -0.08 -vn -0.01 -0.98 -0.21 -vn -0.01 -0.96 -0.29 -vn 0.01 0.95 0.30 -vn 0.74 -0.64 0.19 -vn 0.81 -0.47 -0.35 -vn 0.04 -0.94 0.35 -vn 0.03 -0.97 0.25 -vn 0.02 -0.93 0.37 -vn 0.27 -0.96 0.13 -vn 0.19 -0.98 0.08 -vn 0.48 -0.88 0.05 -vn 0.25 -0.97 0.05 -vn -0.00 -1.00 0.05 -vn 0.01 -1.00 0.05 -vn 0.01 -1.00 0.08 -vn 0.01 -1.00 0.04 -vn 0.08 -0.98 0.15 -vn 0.15 -0.99 0.04 -vn 0.10 -0.98 0.16 -vn 0.07 -0.94 0.34 -vn 0.04 -0.94 0.34 -vn 0.07 -0.85 0.53 -vn 0.01 -0.96 0.28 -vn 0.02 -0.95 0.31 -vn 0.04 -0.86 0.50 -vn 0.03 -0.89 0.45 -vn 0.14 0.98 -0.13 -vn -0.22 -0.92 0.32 -vn -0.01 -0.94 0.35 -vn -0.07 -0.92 0.39 -vn -0.00 -0.91 0.42 -vn 0.06 -0.92 0.39 -vn 0.21 -0.93 0.32 -vn 0.42 -0.10 -0.90 -vn 0.13 -0.53 -0.83 -vn -0.14 0.03 -0.99 -vn 0.17 0.25 -0.95 -vn -0.00 0.06 1.00 -vn 0.00 0.07 1.00 -vn 0.02 0.06 1.00 -vn 0.01 0.07 1.00 -vn -0.08 -1.00 0.03 -vn -0.04 -1.00 -0.02 -vn -0.10 -0.99 0.04 -vn -0.17 -0.99 0.04 -vn -0.12 -0.99 0.04 -vn -0.10 -0.98 0.15 -vn -0.03 -1.00 0.08 -vn -0.05 -0.94 0.34 -vn -0.03 -0.95 0.31 -vn -0.04 -0.86 0.50 -vn -0.03 -0.89 0.45 -vn -0.02 -0.96 0.28 -vn -0.03 -0.93 0.37 -vn -0.04 -0.97 0.25 -vn -0.05 -0.94 0.35 -vn -0.29 -0.95 0.12 -vn -0.20 -0.98 0.07 -vn -0.50 -0.86 0.04 -vn -0.29 -0.96 0.04 -vn -0.02 -1.00 0.08 -vn -0.02 -1.00 0.05 -vn -0.02 -1.00 0.04 -vn -0.07 -0.85 0.53 -vn -0.08 -0.94 0.34 -vn -0.11 -0.98 0.16 -vn -0.06 0.99 -0.14 -vn -0.02 0.99 -0.16 -vn -0.39 0.83 -0.40 -vn -0.84 -0.40 -0.38 -vn -0.78 -0.60 0.17 -vn -0.13 0.98 -0.14 -vn 0.01 0.05 1.00 -vn 0.01 0.06 1.00 -vn -0.12 -0.06 -0.99 -vn -0.15 -0.52 -0.84 -vn -0.43 -0.06 -0.90 -vn -0.19 -0.01 -0.98 -vn 0.00 0.12 -0.99 -vn 0.01 0.37 0.93 -vn -0.01 0.12 -0.99 -vn -0.01 0.10 -0.99 -vn -0.01 0.11 -0.99 -vn -0.01 0.09 -1.00 -vn 0.27 0.23 0.93 -vn 0.19 0.41 0.89 -vn 0.34 -0.13 0.93 -vn -0.16 0.43 0.89 -vn -0.25 0.25 0.93 -vn -0.31 -0.16 0.94 -vn -0.33 -0.11 0.94 -vn -0.11 -0.42 0.90 -vn -0.17 -0.38 0.91 -vn 0.12 -0.44 0.89 -vn 0.01 -0.61 0.79 -vn 0.17 -0.39 0.90 -vn 0.32 -0.19 0.93 -vn -0.95 0.22 0.21 -vn -0.01 -0.99 0.12 -vn 0.96 0.13 0.24 -vn -0.59 0.79 0.16 -vn -0.31 0.94 0.15 -vn -0.30 0.94 0.15 -vn 0.35 0.92 0.16 -vn 0.63 0.76 0.18 -vn 0.02 0.69 0.72 -vn 0.22 0.53 0.82 -vn -0.07 0.70 0.71 -vn -0.20 0.55 0.81 -vn -0.32 0.28 0.91 -vn -0.34 0.21 0.92 -vn -0.33 -0.24 0.91 -vn -0.35 -0.12 0.93 -vn -0.14 -0.63 0.77 -vn -0.24 -0.49 0.84 -vn -0.01 -0.48 0.88 -vn 0.16 -0.61 0.78 -vn 0.25 -0.50 0.83 -vn 0.34 -0.27 0.90 -vn 0.36 -0.14 0.92 -vn 0.34 0.25 0.91 -vn 0.35 0.19 0.92 -vn 0.09 0.71 0.70 -vn 0.00 -0.92 -0.39 -vn -0.00 -0.98 -0.21 -vn -0.00 -0.98 -0.20 -vn -0.01 -0.98 0.17 -vn -0.01 -0.98 0.18 -vn -0.02 -0.93 0.36 -vn -0.00 0.92 0.39 -vn 0.00 0.98 0.21 -vn 0.00 0.98 0.20 -vn 0.01 0.98 -0.17 -vn 0.01 0.98 -0.18 -vn 0.02 0.93 -0.36 -vn -0.03 0.04 1.00 -vn 1.00 -0.05 0.05 -vn 0.03 -0.04 -1.00 -vn 0.31 0.87 -0.39 -vn 0.37 0.92 0.09 -vn 0.68 0.61 -0.41 -vn 0.63 0.62 -0.46 -vn 0.55 0.72 -0.42 -vn 0.64 0.67 -0.37 -vn 0.24 0.96 -0.12 -vn 0.26 0.96 -0.12 -vn -0.11 0.92 0.39 -vn -0.23 0.89 0.39 -vn 0.47 0.10 -0.88 -vn 0.54 0.10 -0.84 -vn 0.16 0.98 0.09 -vn 0.08 0.99 0.10 -vn 0.24 0.97 0.08 -vn 0.31 0.95 0.05 -vn 0.23 0.97 0.07 -vn 0.51 0.86 0.06 -vn 0.45 0.88 0.13 -vn 0.34 0.94 -0.05 -vn 0.34 0.94 -0.00 -vn 0.10 0.99 -0.11 -vn 0.10 0.99 -0.09 -vn -0.08 0.99 -0.10 -vn -0.09 0.99 -0.11 -vn -0.34 0.94 -0.05 -vn -0.40 0.91 0.10 -vn -0.50 0.87 0.05 -vn -0.21 0.98 0.05 -vn -0.30 0.95 0.04 -vn -0.14 0.99 0.08 -vn -0.23 0.97 0.08 -vn -0.07 0.99 0.09 -vn -0.14 0.99 0.09 -vn -0.54 0.16 -0.83 -vn -0.47 0.13 -0.87 -vn 0.24 0.89 0.39 -vn 0.14 0.90 0.41 -vn -0.24 0.96 -0.12 -vn -0.23 0.97 -0.12 -vn -0.59 0.72 -0.36 -vn -0.54 0.73 -0.43 -vn -0.62 0.64 -0.46 -vn -0.64 0.66 -0.40 -vn -0.26 0.96 0.09 -vn -0.38 0.83 -0.41 -vn 0.40 0.85 -0.33 -vn 0.55 0.82 -0.18 -vn 0.74 0.63 -0.24 -vn -0.23 0.66 -0.71 -vn 0.90 0.23 -0.37 -vn -0.90 0.43 -0.07 -vn -0.98 0.21 0.05 -vn 0.02 0.10 -0.99 -vn -0.38 -0.03 -0.92 -vn -0.92 0.04 -0.38 -vn -0.99 0.13 0.02 -vn -0.99 0.13 0.01 -vn -0.83 0.17 0.53 -vn 0.10 0.89 0.44 -vn 0.02 0.90 0.44 -vn 0.03 0.90 0.44 -vn -0.00 0.90 0.43 -vn 0.00 0.90 0.43 -vn 0.01 0.90 0.44 -vn -0.07 0.90 0.44 -vn 0.78 0.61 0.15 -vn 1.00 0.04 0.04 -vn 1.00 0.03 0.04 -vn 1.00 0.03 0.01 -vn 0.74 -0.16 -0.65 -vn 0.85 -0.02 -0.52 -vn 0.93 0.33 0.17 -vn 0.95 -0.02 -0.30 -vn 0.93 0.36 -0.05 -vn -0.72 0.64 -0.26 -vn -0.71 0.28 -0.65 -vn -0.70 0.67 -0.25 -vn -0.38 0.91 -0.20 -vn -0.50 0.81 -0.31 -vn 0.01 0.99 0.10 -vn 0.01 1.00 0.10 -vn 0.01 0.34 0.94 -vn 0.01 0.12 0.99 -vn 0.00 0.91 -0.41 -vn -0.99 0.16 -0.06 -vn -0.99 0.14 -0.10 -vn -0.96 0.04 -0.28 -vn -0.96 0.04 -0.29 -vn 0.96 -0.05 -0.27 -vn 1.00 0.05 -0.08 -vn 0.96 -0.05 -0.26 -vn 1.00 0.07 -0.04 -vn -0.01 -0.18 -0.98 -vn 0.83 0.10 0.55 -vn -0.74 0.66 0.13 -vn 0.94 -0.32 -0.07 -vn 0.83 -0.56 0.01 -vn -0.09 -0.40 -0.91 -vn -0.12 0.12 -0.99 -vn -0.07 -0.68 -0.73 -vn -0.07 0.27 -0.96 -vn 0.02 1.00 -0.09 -vn -0.12 0.53 -0.84 -vn -0.10 -0.26 -0.96 -vn -0.12 -0.15 -0.98 -vn 0.05 -0.53 -0.85 -vn 0.03 -0.38 -0.93 -vn 0.03 -0.98 -0.21 -vn 0.09 -0.09 -0.99 -vn 0.07 0.04 -1.00 -vn 0.08 0.14 -0.99 -vn 0.05 0.26 -0.96 -vn -0.99 0.12 -0.09 -vn 0.96 0.29 0.00 -vn 0.58 0.81 0.00 -vn 0.61 0.79 0.00 -vn -0.53 0.85 -0.01 -vn -0.57 0.82 -0.01 -vn -0.92 0.38 -0.02 -vn -0.95 -0.30 -0.00 -vn -0.61 -0.80 -0.00 -vn -0.58 -0.82 -0.00 -vn 0.57 -0.82 0.01 -vn 0.52 -0.85 0.01 -vn 0.92 -0.40 0.02 -vn 0.99 -0.12 -0.07 -vn 1.00 -0.07 -0.01 -vn 1.00 -0.08 -0.01 -vn 0.99 -0.11 0.07 -vn 1.00 -0.07 0.04 -vn 1.00 -0.01 -0.00 -vn 0.98 -0.13 -0.12 -vn 1.00 0.03 -0.08 -vn 0.88 0.04 -0.48 -vn 0.96 0.13 -0.23 -vn -0.96 0.10 -0.27 -vn -0.99 0.04 -0.13 -vn -0.99 0.04 -0.12 -vn -0.91 0.02 -0.42 -vn -0.90 -0.01 -0.43 -vn -0.99 0.02 0.17 -vn -0.98 0.06 0.19 -vn -0.96 0.03 -0.29 -vn -0.91 0.15 -0.37 -vn -0.85 0.17 0.50 -vn -0.94 -0.03 0.33 -vn 0.71 0.05 0.71 -vn -0.02 0.12 0.99 -vn 0.02 0.12 0.99 -vn -0.70 0.12 0.70 -vn -0.71 -0.01 -0.71 -vn -0.02 -0.06 -1.00 -vn 0.02 -0.06 -1.00 -vn 0.71 -0.08 -0.70 -vn 0.01 1.00 -0.03 -vn 0.03 -1.00 -0.02 -vn 0.06 -1.00 0.04 -vn 0.08 -1.00 0.04 -# 1154 vertex normals - -vt 0.41 0.82 0.00 -vt 0.39 0.82 0.00 -vt 0.42 0.80 0.00 -vt 0.39 0.80 0.00 -vt 0.37 0.80 0.00 -vt 0.37 0.82 0.00 -vt 0.35 0.82 0.00 -vt 0.35 0.80 0.00 -vt 0.33 0.80 0.00 -vt 0.33 0.81 0.00 -vt 0.31 0.81 0.00 -vt 0.30 0.80 0.00 -vt 0.30 0.81 0.00 -vt 0.29 0.80 0.00 -vt 0.29 0.81 0.00 -vt 0.28 0.80 0.00 -vt 0.34 0.81 0.00 -vt 0.30 0.82 0.00 -vt 0.34 0.82 0.00 -vt 0.39 0.81 0.00 -vt 0.43 0.81 0.00 -vt 0.43 0.82 0.00 -vt 0.98 0.38 0.00 -vt 0.98 0.42 0.00 -vt 0.97 0.44 0.00 -vt 0.50 0.74 0.00 -vt 0.49 0.75 0.00 -vt 0.54 0.75 0.00 -vt 0.47 0.74 0.00 -vt 0.45 0.75 0.00 -vt 0.43 0.74 0.00 -vt 0.43 0.75 0.00 -vt 0.41 0.75 0.00 -vt 0.41 0.74 0.00 -vt 0.40 0.75 0.00 -vt 0.40 0.74 0.00 -vt 0.42 0.75 0.00 -vt 0.46 0.74 0.00 -vt 0.54 0.72 0.00 -vt 0.50 0.73 0.00 -vt 0.50 0.72 0.00 -vt 0.54 0.71 0.00 -vt 0.46 0.73 0.00 -vt 0.43 0.73 0.00 -vt 0.40 0.73 0.00 -vt 0.43 0.72 0.00 -vt 0.40 0.72 0.00 -vt 0.43 0.71 0.00 -vt 0.40 0.71 0.00 -vt 0.43 0.70 0.00 -vt 0.40 0.70 0.00 -vt 0.40 0.69 0.00 -vt 0.46 0.71 0.00 -vt 0.50 0.71 0.00 -vt 0.46 0.70 0.00 -vt 0.45 0.69 0.00 -vt 0.46 0.69 0.00 -vt 0.50 0.70 0.00 -vt 0.54 0.70 0.00 -vt 0.58 0.71 0.00 -vt 0.59 0.75 0.00 -vt 0.58 0.73 0.00 -vt 0.56 0.88 0.00 -vt 0.56 0.91 0.00 -vt 0.54 0.89 0.00 -vt 0.60 0.90 0.00 -vt 0.60 0.88 0.00 -vt 0.59 0.86 0.00 -vt 0.65 0.85 0.00 -vt 0.65 0.83 0.00 -vt 0.59 0.83 0.00 -vt 0.65 0.78 0.00 -vt 0.59 0.78 0.00 -vt 0.65 0.76 0.00 -vt 0.64 0.75 0.00 -vt 0.65 0.90 0.00 -vt 0.65 0.88 0.00 -vt 0.64 0.74 0.00 -vt 0.70 0.75 0.00 -vt 0.70 0.76 0.00 -vt 0.70 0.77 0.00 -vt 0.70 0.79 0.00 -vt 0.70 0.82 0.00 -vt 0.70 0.85 0.00 -vt 0.70 0.87 0.00 -vt 0.75 0.79 0.00 -vt 0.75 0.78 0.00 -vt 0.75 0.75 0.00 -vt 0.58 0.75 0.00 -vt 0.55 0.78 0.00 -vt 0.55 0.84 0.00 -vt 0.50 0.83 0.00 -vt 0.54 0.86 0.00 -vt 0.51 0.87 0.00 -vt 0.53 0.88 0.00 -vt 0.78 0.82 0.00 -vt 0.78 0.80 0.00 -vt 0.75 0.82 0.00 -vt 0.78 0.78 0.00 -vt 0.78 0.76 0.00 -vt 0.69 0.77 0.00 -vt 0.81 0.79 0.00 -vt 0.81 0.77 0.00 -vt 0.86 0.78 0.00 -vt 0.86 0.79 0.00 -vt 0.81 0.80 0.00 -vt 0.86 0.81 0.00 -vt 0.81 0.83 0.00 -vt 0.86 0.83 0.00 -vt 0.92 0.80 0.00 -vt 0.92 0.81 0.00 -vt 0.93 0.80 0.00 -vt 0.93 0.81 0.00 -vt 0.93 0.83 0.00 -vt 0.92 0.83 0.00 -vt 0.88 0.84 0.00 -vt 0.88 0.83 0.00 -vt 0.86 0.84 0.00 -vt 0.81 0.84 0.00 -vt 0.78 0.84 0.00 -vt 0.75 0.85 0.00 -vt 0.78 0.85 0.00 -vt 0.88 0.85 0.00 -vt 0.86 0.85 0.00 -vt 0.89 0.86 0.00 -vt 0.83 0.86 0.00 -vt 0.85 0.86 0.00 -vt 0.81 0.86 0.00 -vt 0.78 0.86 0.00 -vt 0.75 0.86 0.00 -vt 0.93 0.85 0.00 -vt 0.91 0.88 0.00 -vt 0.93 0.87 0.00 -vt 0.91 0.89 0.00 -vt 0.93 0.89 0.00 -vt 0.93 0.97 0.00 -vt 0.89 0.89 0.00 -vt 0.88 0.88 0.00 -vt 0.84 0.88 0.00 -vt 0.71 0.90 0.00 -vt 0.88 0.81 0.00 -vt 0.88 0.80 0.00 -vt 0.88 0.78 0.00 -vt 0.92 0.78 0.00 -vt 0.89 0.99 0.00 -vt 0.89 0.98 0.00 -vt 0.92 0.98 0.00 -vt 0.82 0.90 0.00 -vt 0.86 0.89 0.00 -vt 0.83 0.91 0.00 -vt 0.88 0.98 0.00 -vt 0.93 0.98 0.00 -vt 0.90 0.99 0.00 -vt 0.93 0.99 0.00 -vt 0.90 1.00 0.00 -vt 0.93 1.00 0.00 -vt 0.93 0.79 0.00 -vt 0.46 0.86 0.00 -vt 0.46 0.83 0.00 -vt 0.40 0.86 0.00 -vt 0.40 0.83 0.00 -vt 0.35 0.85 0.00 -vt 0.32 0.85 0.00 -vt 0.29 0.85 0.00 -vt 0.29 0.83 0.00 -vt 0.24 0.83 0.00 -vt 0.23 0.80 0.00 -vt 0.19 0.80 0.00 -vt 0.20 0.77 0.00 -vt 0.16 0.78 0.00 -vt 0.16 0.76 0.00 -vt 0.09 0.78 0.00 -vt 0.09 0.75 0.00 -vt 0.36 0.80 0.00 -vt 0.40 0.79 0.00 -vt 0.46 0.79 0.00 -vt 0.50 0.78 0.00 -vt 0.50 0.76 0.00 -vt 0.45 0.77 0.00 -vt 0.40 0.78 0.00 -vt 0.36 0.79 0.00 -vt 0.33 0.78 0.00 -vt 0.04 0.76 0.00 -vt 0.09 0.74 0.00 -vt 0.04 0.74 0.00 -vt 0.24 0.80 0.00 -vt 0.33 0.85 0.00 -vt 0.36 0.82 0.00 -vt 0.16 0.74 0.00 -vt 0.15 0.73 0.00 -vt 0.19 0.76 0.00 -vt 0.19 0.74 0.00 -vt 0.18 0.73 0.00 -vt 0.18 0.76 0.00 -vt 0.18 0.74 0.00 -vt 0.51 0.83 0.00 -vt 0.54 0.92 0.00 -vt 0.34 0.87 0.00 -vt 0.32 0.86 0.00 -vt 0.31 0.86 0.00 -vt 0.28 0.86 0.00 -vt 0.24 0.85 0.00 -vt 0.19 0.83 0.00 -vt 0.15 0.80 0.00 -vt 0.09 0.80 0.00 -vt 0.04 0.78 0.00 -vt 0.04 0.80 0.00 -vt 0.01 0.78 0.00 -vt 0.01 0.80 0.00 -vt 0.03 0.82 0.00 -vt 0.01 0.77 0.00 -vt 0.00 0.83 0.00 -vt 0.04 0.84 0.00 -vt 0.00 0.84 0.00 -vt 0.03 0.86 0.00 -vt 0.00 0.86 0.00 -vt 0.03 0.88 0.00 -vt 0.00 0.87 0.00 -vt 0.04 0.89 0.00 -vt 0.00 0.89 0.00 -vt 0.04 0.91 0.00 -vt 0.00 0.90 0.00 -vt 0.04 0.88 0.00 -vt 0.09 0.89 0.00 -vt 0.15 0.90 0.00 -vt 0.14 0.91 0.00 -vt 0.09 0.91 0.00 -vt 0.09 0.88 0.00 -vt 0.09 0.87 0.00 -vt 0.09 0.85 0.00 -vt 0.15 0.87 0.00 -vt 0.15 0.89 0.00 -vt 0.19 0.89 0.00 -vt 0.18 0.90 0.00 -vt 0.21 0.90 0.00 -vt 0.18 0.92 0.00 -vt 0.21 0.92 0.00 -vt 0.25 0.92 0.00 -vt 0.28 0.92 0.00 -vt 0.28 0.90 0.00 -vt 0.21 0.85 0.00 -vt 0.18 0.85 0.00 -vt 0.21 0.87 0.00 -vt 0.25 0.87 0.00 -vt 0.25 0.88 0.00 -vt 0.28 0.88 0.00 -vt 0.30 0.87 0.00 -vt 0.30 0.90 0.00 -vt 0.30 0.92 0.00 -vt 0.25 0.90 0.00 -vt 0.21 0.89 0.00 -vt 0.18 0.87 0.00 -vt 0.14 0.85 0.00 -vt 0.29 0.86 0.00 -vt 0.05 0.84 0.00 -vt 0.01 0.83 0.00 -vt 0.15 0.83 0.00 -vt 0.08 0.82 0.00 -vt 0.15 0.85 0.00 -vt 0.14 0.83 0.00 -vt 0.35 0.31 0.00 -vt 0.35 0.37 0.00 -vt 0.33 0.31 0.00 -vt 0.33 0.26 0.00 -vt 0.29 0.27 0.00 -vt 0.29 0.23 0.00 -vt 0.33 0.22 0.00 -vt 0.30 0.21 0.00 -vt 0.34 0.20 0.00 -vt 0.35 0.22 0.00 -vt 0.34 0.26 0.00 -vt 0.35 0.26 0.00 -vt 0.36 0.31 0.00 -vt 0.36 0.36 0.00 -vt 0.37 0.40 0.00 -vt 0.35 0.41 0.00 -vt 0.37 0.42 0.00 -vt 0.34 0.42 0.00 -vt 0.31 0.42 0.00 -vt 0.32 0.41 0.00 -vt 0.32 0.37 0.00 -vt 0.28 0.37 0.00 -vt 0.29 0.32 0.00 -vt 0.28 0.41 0.00 -vt 0.69 0.72 0.00 -vt 0.71 0.73 0.00 -vt 0.70 0.71 0.00 -vt 0.72 0.73 0.00 -vt 0.71 0.70 0.00 -vt 0.73 0.73 0.00 -vt 0.69 0.73 0.00 -vt 0.70 0.73 0.00 -vt 0.70 0.74 0.00 -vt 0.71 0.74 0.00 -vt 0.72 0.74 0.00 -vt 0.73 0.74 0.00 -vt 0.33 0.58 0.00 -vt 0.29 0.57 0.00 -vt 0.33 0.52 0.00 -vt 0.29 0.52 0.00 -vt 0.32 0.47 0.00 -vt 0.28 0.47 0.00 -vt 0.32 0.43 0.00 -vt 0.35 0.43 0.00 -vt 0.37 0.44 0.00 -vt 0.35 0.47 0.00 -vt 0.37 0.48 0.00 -vt 0.35 0.52 0.00 -vt 0.36 0.53 0.00 -vt 0.35 0.58 0.00 -vt 0.36 0.58 0.00 -vt 0.35 0.62 0.00 -vt 0.33 0.62 0.00 -vt 0.28 0.43 0.00 -vt 0.34 0.63 0.00 -vt 0.31 0.63 0.00 -vt 0.29 0.61 0.00 -vt 0.26 0.63 0.00 -vt 0.26 0.62 0.00 -vt 0.38 0.14 0.00 -vt 0.39 0.16 0.00 -vt 0.38 0.22 0.00 -vt 0.39 0.22 0.00 -vt 0.37 0.27 0.00 -vt 0.39 0.27 0.00 -vt 0.38 0.31 0.00 -vt 0.39 0.31 0.00 -vt 0.38 0.37 0.00 -vt 0.39 0.37 0.00 -vt 0.39 0.43 0.00 -vt 0.39 0.47 0.00 -vt 0.37 0.49 0.00 -vt 0.38 0.49 0.00 -vt 0.37 0.50 0.00 -vt 0.97 0.50 0.00 -vt 0.95 0.45 0.00 -vt 0.95 0.50 0.00 -vt 0.97 0.56 0.00 -vt 0.95 0.55 0.00 -vt 0.97 0.60 0.00 -vt 0.95 0.59 0.00 -vt 0.97 0.66 0.00 -vt 0.95 0.66 0.00 -vt 0.95 0.70 0.00 -vt 0.98 0.72 0.00 -vt 0.96 0.75 0.00 -vt 0.98 0.76 0.00 -vt 0.98 0.77 0.00 -vt 0.96 0.76 0.00 -vt 0.93 0.75 0.00 -vt 0.47 0.73 0.00 -vt 0.46 0.75 0.00 -vt 0.44 0.73 0.00 -vt 0.42 0.73 0.00 -vt 0.41 0.73 0.00 -vt 0.23 0.78 0.00 -vt 0.28 0.78 0.00 -vt 0.29 0.82 0.00 -vt 0.45 0.82 0.00 -vt 1.00 0.79 0.00 -vt 1.00 0.77 0.00 -vt 0.99 0.72 0.00 -vt 0.99 0.65 0.00 -vt 0.99 0.60 0.00 -vt 0.99 0.55 0.00 -vt 0.99 0.50 0.00 -vt 0.67 0.71 0.00 -vt 0.68 0.72 0.00 -vt 0.66 0.71 0.00 -vt 0.66 0.74 0.00 -vt 0.67 0.74 0.00 -vt 0.65 0.72 0.00 -vt 0.06 0.05 0.00 -vt 0.10 0.06 0.00 -vt 0.06 0.07 0.00 -vt 0.10 0.08 0.00 -vt 0.06 0.14 0.00 -vt 0.08 0.14 0.00 -vt 0.13 0.08 0.00 -vt 0.12 0.16 0.00 -vt 0.17 0.09 0.00 -vt 0.16 0.16 0.00 -vt 0.20 0.09 0.00 -vt 0.20 0.18 0.00 -vt 0.25 0.11 0.00 -vt 0.20 0.07 0.00 -vt 0.27 0.08 0.00 -vt 0.20 0.06 0.00 -vt 0.27 0.07 0.00 -vt 0.21 0.04 0.00 -vt 0.28 0.05 0.00 -vt 0.28 0.03 0.00 -vt 0.17 0.05 0.00 -vt 0.17 0.07 0.00 -vt 0.14 0.06 0.00 -vt 0.14 0.04 0.00 -vt 0.18 0.03 0.00 -vt 0.21 0.02 0.00 -vt 0.29 0.07 0.00 -vt 0.28 0.09 0.00 -vt 0.31 0.08 0.00 -vt 0.18 0.02 0.00 -vt 0.10 0.04 0.00 -vt 0.15 0.03 0.00 -vt 0.15 0.01 0.00 -vt 0.11 0.02 0.00 -vt 0.04 0.04 0.00 -vt 0.07 0.03 0.00 -vt 0.09 0.02 0.00 -vt 0.11 0.01 0.00 -vt 0.20 0.10 0.00 -vt 0.27 0.11 0.00 -vt 0.30 0.04 0.00 -vt 0.31 0.05 0.00 -vt 0.33 0.08 0.00 -vt 0.32 0.09 0.00 -vt 0.31 0.11 0.00 -vt 0.29 0.13 0.00 -vt 0.23 0.17 0.00 -vt 0.28 0.08 0.00 -vt 0.34 0.04 0.00 -vt 0.34 0.06 0.00 -vt 0.26 0.18 0.00 -vt 0.33 0.07 0.00 -vt 0.41 0.31 0.00 -vt 0.41 0.38 0.00 -vt 0.50 0.31 0.00 -vt 0.51 0.36 0.00 -vt 0.41 0.42 0.00 -vt 0.50 0.40 0.00 -vt 0.40 0.47 0.00 -vt 0.41 0.47 0.00 -vt 0.51 0.43 0.00 -vt 0.43 0.46 0.00 -vt 0.51 0.26 0.00 -vt 0.41 0.26 0.00 -vt 0.41 0.21 0.00 -vt 0.41 0.17 0.00 -vt 0.49 0.18 0.00 -vt 0.49 0.21 0.00 -vt 0.45 0.73 0.00 -vt 0.44 0.75 0.00 -vt 0.09 1.00 0.00 -vt 0.09 0.98 0.00 -vt 0.10 1.00 0.00 -vt 0.10 0.98 0.00 -vt 0.27 1.00 0.00 -vt 0.27 0.98 0.00 -vt 0.28 1.00 0.00 -vt 0.28 0.98 0.00 -vt 0.28 0.96 0.00 -vt 0.27 0.96 0.00 -vt 0.28 0.94 0.00 -vt 0.27 0.94 0.00 -vt 0.10 0.96 0.00 -vt 0.10 0.94 0.00 -vt 0.09 0.96 0.00 -vt 0.09 0.94 0.00 -vt 0.15 0.96 0.00 -vt 0.15 0.95 0.00 -vt 0.13 0.96 0.00 -vt 0.13 0.95 0.00 -vt 0.45 0.81 0.00 -vt 0.36 0.81 0.00 -vt 0.41 0.81 0.00 -vt 0.42 0.82 0.00 -vt 0.42 0.81 0.00 -vt 0.44 0.81 0.00 -vt 0.48 0.76 0.00 -vt 0.44 0.70 0.00 -vt 0.45 0.70 0.00 -vt 0.50 0.68 0.00 -vt 0.55 0.69 0.00 -vt 0.58 0.70 0.00 -vt 0.49 0.04 0.00 -vt 0.47 0.04 0.00 -vt 0.48 0.03 0.00 -vt 0.47 0.03 0.00 -vt 0.01 0.72 0.00 -vt 0.02 0.70 0.00 -vt 0.02 0.72 0.00 -vt 0.01 0.68 0.00 -vt 0.02 0.67 0.00 -vt 0.01 0.62 0.00 -vt 0.02 0.62 0.00 -vt 0.06 0.67 0.00 -vt 0.06 0.63 0.00 -vt 0.11 0.63 0.00 -vt 0.11 0.67 0.00 -vt 0.16 0.64 0.00 -vt 0.16 0.67 0.00 -vt 0.20 0.64 0.00 -vt 0.20 0.68 0.00 -vt 0.22 0.65 0.00 -vt 0.22 0.68 0.00 -vt 0.20 0.69 0.00 -vt 0.16 0.69 0.00 -vt 0.17 0.70 0.00 -vt 0.06 0.70 0.00 -vt 0.11 0.70 0.00 -vt 0.12 0.71 0.00 -vt 0.07 0.71 0.00 -vt 0.28 0.42 0.00 -vt 0.01 0.75 0.00 -vt 0.48 0.02 0.00 -vt 0.47 0.02 0.00 -vt 0.01 0.63 0.00 -vt 0.08 0.91 0.00 -vt 0.05 1.00 0.00 -vt 0.07 0.99 0.00 -vt 0.06 1.00 0.00 -vt 0.08 0.98 0.00 -vt 0.04 1.00 0.00 -vt 0.03 0.99 0.00 -vt 0.00 0.96 0.00 -vt 0.01 0.91 0.00 -vt 0.00 0.94 0.00 -vt 0.01 0.98 0.00 -vt 0.22 0.61 0.00 -vt 0.20 0.60 0.00 -vt 0.20 0.62 0.00 -vt 0.16 0.68 0.00 -vt 0.16 0.63 0.00 -vt 0.26 0.21 0.00 -vt 0.25 0.22 0.00 -vt 0.38 0.09 0.00 -vt 0.44 0.82 0.00 -vt 0.93 0.78 0.00 -vt 0.94 0.78 0.00 -vt 0.49 0.05 0.00 -vt 0.49 0.06 0.00 -vt 0.48 0.04 0.00 -vt 0.47 0.06 0.00 -vt 0.23 0.73 0.00 -vt 0.27 0.73 0.00 -vt 0.21 0.74 0.00 -vt 0.29 0.74 0.00 -vt 0.29 0.77 0.00 -vt 0.63 0.01 0.00 -vt 0.66 0.01 0.00 -vt 0.63 0.02 0.00 -vt 0.66 0.02 0.00 -vt 0.90 0.76 0.00 -vt 0.90 0.75 0.00 -vt 0.89 0.76 0.00 -vt 0.89 0.74 0.00 -vt 0.84 0.74 0.00 -vt 0.83 0.76 0.00 -vt 0.84 0.76 0.00 -vt 0.83 0.75 0.00 -vt 0.68 0.90 0.00 -vt 0.61 0.96 0.00 -vt 0.67 0.96 0.00 -vt 0.61 0.97 0.00 -vt 0.67 0.97 0.00 -vt 0.64 1.00 0.00 -vt 0.62 0.99 0.00 -vt 0.66 0.99 0.00 -vt 0.93 0.77 0.00 -vt 0.94 0.77 0.00 -vt 0.36 0.87 0.00 -vt 0.37 0.87 0.00 -vt 0.38 0.87 0.00 -vt 0.53 0.97 0.00 -vt 0.53 0.96 0.00 -vt 0.55 0.97 0.00 -vt 0.52 0.96 0.00 -vt 0.53 0.95 0.00 -vt 0.59 0.99 0.00 -vt 0.59 0.96 0.00 -vt 0.59 0.98 0.00 -vt 0.60 0.97 0.00 -vt 0.59 0.97 0.00 -vt 0.59 0.93 0.00 -vt 0.56 0.97 0.00 -vt 0.57 0.93 0.00 -vt 0.54 0.97 0.00 -vt 0.54 0.93 0.00 -vt 0.52 0.93 0.00 -vt 0.52 0.94 0.00 -vt 0.53 0.98 0.00 -vt 0.55 0.98 0.00 -vt 0.56 0.98 0.00 -vt 0.56 0.94 0.00 -vt 0.57 0.96 0.00 -vt 0.51 0.93 0.00 -vt 0.58 0.97 0.00 -vt 0.58 0.96 0.00 -vt 0.58 0.95 0.00 -vt 0.57 0.97 0.00 -vt 0.47 0.75 0.00 -vt 0.40 0.01 0.00 -vt 0.40 0.07 0.00 -vt 0.46 0.02 0.00 -vt 0.46 0.06 0.00 -vt 0.38 0.01 0.00 -vt 0.38 0.07 0.00 -vt 0.35 0.02 0.00 -vt 0.35 0.06 0.00 -vt 0.46 0.03 0.00 -vt 0.46 0.04 0.00 -vt 0.41 0.03 0.00 -vt 0.39 0.05 0.00 -vt 0.39 0.07 0.00 -vt 0.39 0.02 0.00 -vt 0.58 0.93 0.00 -vt 0.52 0.03 0.00 -vt 0.49 0.03 0.00 -vt 0.57 0.01 0.00 -vt 0.62 0.01 0.00 -vt 0.52 0.01 0.00 -vt 0.62 0.02 0.00 -vt 0.57 0.02 0.00 -vt 0.51 0.02 0.00 -vt 0.48 0.01 0.00 -vt 0.52 0.02 0.00 -vt 0.62 0.03 0.00 -vt 0.57 0.03 0.00 -vt 0.51 0.04 0.00 -vt 0.21 0.51 0.00 -vt 0.19 0.51 0.00 -vt 0.20 0.49 0.00 -vt 0.19 0.49 0.00 -vt 0.22 0.52 0.00 -vt 0.20 0.52 0.00 -vt 0.20 0.54 0.00 -vt 0.23 0.54 0.00 -vt 0.24 0.56 0.00 -vt 0.21 0.55 0.00 -vt 0.24 0.57 0.00 -vt 0.22 0.57 0.00 -vt 0.24 0.59 0.00 -vt 0.22 0.58 0.00 -vt 0.20 0.58 0.00 -vt 0.22 0.59 0.00 -vt 0.21 0.49 0.00 -vt 0.21 0.50 0.00 -vt 0.19 0.50 0.00 -vt 0.19 0.52 0.00 -vt 0.19 0.54 0.00 -vt 0.19 0.56 0.00 -vt 0.48 0.73 0.00 -# 642 texture coords - -g P_51_Mustang_Hull -f 609/373/545 610/374/545 611/373/545 -f 612/375/546 611/373/547 613/376/548 -f 614/374/548 613/376/548 611/373/547 -f 613/376/548 614/374/548 615/377/549 -f 616/378/550 615/377/549 614/374/548 -f 616/378/550 617/379/551 615/377/549 -f 618/380/552 615/377/549 617/379/551 -f 618/380/552 617/379/551 619/381/553 -f 620/382/554 619/381/553 617/379/551 -f 620/382/554 621/383/555 619/381/553 -f 622/384/556 619/381/553 621/383/555 -f 621/383/555 623/385/557 622/384/556 -f 624/386/558 622/384/556 623/385/557 -f 623/385/557 625/387/559 624/386/558 -f 626/388/560 624/386/558 625/387/559 -f 626/388/560 625/387/559 627/388/561 -f 628/387/562 627/388/561 625/387/559 -f 628/387/562 629/387/563 627/388/561 -f 630/388/564 627/388/561 629/387/563 -f 630/388/564 629/387/563 631/386/565 -f 632/385/566 631/386/565 629/387/563 -f 631/386/565 632/385/566 633/384/567 -f 634/383/568 633/384/567 632/385/566 -f 633/384/567 634/383/568 635/381/569 -f 636/382/570 635/381/569 634/383/568 -f 636/382/570 637/379/571 635/381/569 -f 638/380/572 635/381/569 637/379/571 -f 638/380/572 637/379/571 639/377/573 -f 640/378/574 639/377/573 637/379/571 -f 640/378/574 641/374/575 639/377/573 -f 642/376/575 639/377/573 641/374/575 -f 641/374/575 643/373/576 642/376/575 -f 644/375/577 642/376/575 643/373/576 -f 645/375/578 646/373/579 647/376/580 -f 648/374/581 647/376/580 646/373/579 -f 647/376/580 648/374/581 649/377/582 -f 650/378/583 649/377/582 648/374/581 -f 650/378/583 651/379/584 649/377/582 -f 652/380/585 649/377/582 651/379/584 -f 652/380/585 651/379/584 653/381/586 -f 654/382/587 653/381/586 651/379/584 -f 654/382/587 655/383/588 653/381/586 -f 656/384/589 653/381/586 655/383/588 -f 655/383/588 657/385/590 656/384/589 -f 658/386/591 656/384/589 657/385/590 -f 657/385/590 659/387/592 658/386/591 -f 660/388/593 658/386/591 659/387/592 -f 660/388/593 659/387/592 661/388/594 -f 662/387/595 661/388/594 659/387/592 -f 662/387/595 663/387/596 661/388/594 -f 664/388/597 661/388/594 663/387/596 -f 664/388/597 663/387/596 665/386/598 -f 666/385/599 665/386/598 663/387/596 -f 665/386/598 666/385/599 667/384/600 -f 668/383/601 667/384/600 666/385/599 -f 667/384/600 668/383/601 669/381/602 -f 670/382/603 669/381/602 668/383/601 -f 670/382/603 671/379/604 669/381/602 -f 672/380/605 669/381/602 671/379/604 -f 672/380/605 671/379/604 673/377/606 -f 674/378/607 673/377/606 671/379/604 -f 674/378/607 610/374/608 673/377/606 -f 675/376/608 673/377/606 610/374/608 -f 610/374/608 609/373/609 675/376/608 -f 676/375/610 675/376/608 609/373/609 -f 677/385/611 678/389/612 679/390/613 -f 680/391/612 679/390/613 678/389/612 -f 678/389/612 681/392/614 680/391/612 -f 682/374/614 680/391/612 681/392/614 -f 681/392/614 683/393/613 682/374/614 -f 684/394/613 682/374/614 683/393/613 -f 683/394/615 681/374/616 685/393/615 -f 686/392/617 685/393/615 681/374/616 -f 681/374/616 678/391/618 686/392/617 -f 687/389/619 686/392/617 678/391/618 -f 678/391/618 677/390/620 687/389/619 -f 688/385/621 687/389/619 677/390/620 -f 685/394/622 686/374/623 689/393/622 -f 690/392/623 689/393/622 686/374/623 -f 686/374/623 687/391/624 690/392/623 -f 691/389/624 690/392/623 687/391/624 -f 687/391/624 688/390/622 691/389/624 -f 692/385/622 691/389/624 688/390/622 -f 674/378/625 671/379/625 610/374/625 -f 668/383/626 621/383/626 670/382/626 -f 621/383/627 620/382/627 670/382/627 -f 670/382/628 620/382/628 671/379/628 -f 617/379/625 616/378/625 620/382/625 -f 620/382/629 616/378/629 671/379/629 -f 671/379/629 616/378/629 610/374/629 -f 610/374/630 616/378/630 611/373/630 -f 616/378/631 614/374/631 611/373/631 -f 655/383/632 654/382/632 634/383/632 -f 650/378/625 648/374/625 651/379/625 -f 646/373/633 643/373/633 648/374/633 -f 648/374/634 643/373/634 651/379/634 -f 641/374/635 640/378/635 643/373/635 -f 640/378/636 637/379/636 643/373/636 -f 643/373/637 637/379/637 651/379/637 -f 651/379/638 637/379/638 654/382/638 -f 654/382/639 637/379/639 634/383/639 -f 637/379/625 636/382/625 634/383/625 -f 629/387/640 628/387/640 632/385/640 -f 662/387/641 659/387/641 628/387/641 -f 628/387/642 659/387/642 632/385/642 -f 659/387/643 657/385/643 632/385/643 -f 632/385/644 657/385/644 634/383/644 -f 657/385/645 655/383/645 634/383/645 -f 625/387/646 623/385/646 628/387/646 -f 621/383/647 668/383/647 623/385/647 -f 668/383/648 666/385/648 623/385/648 -f 666/385/649 663/387/649 623/385/649 -f 623/385/650 663/387/650 628/387/650 -f 628/387/651 663/387/651 662/387/651 -f 630/388/652 631/386/652 627/388/652 -f 633/384/653 656/384/653 631/386/653 -f 656/384/654 658/386/654 631/386/654 -f 658/386/655 660/388/655 631/386/655 -f 631/386/656 660/388/656 627/388/656 -f 627/388/657 660/388/657 661/388/657 -f 661/388/658 664/388/658 627/388/658 -f 667/384/659 622/384/659 665/386/659 -f 622/384/660 624/386/660 665/386/660 -f 665/386/661 624/386/661 664/388/661 -f 664/388/662 624/386/662 627/388/662 -f 624/386/663 626/388/663 627/388/663 -f 667/384/664 669/381/664 622/384/664 -f 675/376/665 676/375/665 673/377/665 -f 612/375/666 613/376/666 676/375/666 -f 676/375/667 613/376/667 673/377/667 -f 673/377/668 613/376/668 672/380/668 -f 615/377/669 618/380/669 613/376/669 -f 613/376/666 618/380/666 672/380/666 -f 672/380/670 618/380/670 669/381/670 -f 669/381/671 618/380/671 622/384/671 -f 618/380/672 619/381/672 622/384/672 -f 647/376/673 649/377/673 645/375/673 -f 656/384/674 633/384/674 653/381/674 -f 653/381/675 633/384/675 652/380/675 -f 635/381/676 638/380/676 633/384/676 -f 633/384/677 638/380/677 652/380/677 -f 652/380/677 638/380/677 649/377/677 -f 639/377/669 642/376/669 638/380/669 -f 638/380/678 642/376/678 649/377/678 -f 649/377/678 642/376/678 645/375/678 -f 642/376/677 644/375/677 645/375/677 -f 689/394/679 690/374/680 684/393/679 -f 682/392/681 684/393/679 690/374/680 -f 690/374/680 691/391/682 682/392/681 -f 680/389/683 682/392/681 691/391/682 -f 691/391/682 692/390/684 680/389/683 -f 679/385/685 680/389/683 692/390/684 -f 693/395/686 694/396/686 695/397/686 -f 696/398/687 697/399/688 698/400/689 -f 696/398/687 699/401/690 697/399/688 -f 700/402/691 697/399/688 699/401/690 -f 699/401/690 701/403/692 700/402/691 -f 702/404/693 700/402/691 701/403/692 -f 702/404/693 701/403/692 703/405/694 -f 704/406/695 703/405/694 701/403/692 -f 703/405/694 704/406/695 705/407/696 -f 706/408/697 705/407/696 704/406/695 -f 706/408/697 707/406/698 705/407/696 -f 708/405/699 705/407/696 707/406/698 -f 707/406/698 709/403/700 708/405/699 -f 710/409/701 708/405/699 709/403/700 -f 710/409/701 709/403/700 711/402/702 -f 712/410/703 711/402/702 709/403/700 -f 711/402/702 712/410/703 693/399/704 -f 713/398/705 693/399/704 712/410/703 -f 693/399/704 713/398/705 714/400/706 -f 715/411/707 713/398/705 716/412/708 -f 713/398/705 712/410/703 716/412/708 -f 715/411/707 717/413/709 718/414/710 -f 715/411/707 716/412/708 717/413/709 -f 716/412/708 719/415/711 717/413/709 -f 719/415/711 716/412/708 712/410/703 -f 712/410/703 709/403/700 719/415/711 -f 720/416/712 719/415/711 709/403/700 -f 707/406/698 720/416/712 709/403/700 -f 707/406/698 721/417/713 720/416/712 -f 720/416/712 721/417/713 722/418/714 -f 723/419/715 722/418/714 721/417/713 -f 722/418/714 723/419/715 724/420/716 -f 725/421/717 724/420/716 723/419/715 -f 724/420/716 725/421/717 726/422/718 -f 727/423/719 726/422/718 725/421/717 -f 727/423/719 728/424/720 726/422/718 -f 720/416/712 722/418/714 719/415/711 -f 719/415/711 722/418/714 729/425/721 -f 729/425/721 717/413/709 719/415/711 -f 717/413/709 729/425/721 730/426/722 -f 730/426/722 718/414/710 717/413/709 -f 724/420/716 729/425/721 722/418/714 -f 729/425/721 724/420/716 731/427/723 -f 731/427/723 730/426/722 729/425/721 -f 726/422/718 731/427/723 724/420/716 -f 732/426/724 733/413/725 734/414/726 -f 733/413/725 732/426/724 735/425/727 -f 736/427/728 735/425/727 732/426/724 -f 735/425/727 736/427/728 737/420/729 -f 738/422/730 737/420/729 736/427/728 -f 737/420/729 738/422/730 739/421/731 -f 740/423/732 739/421/731 738/422/730 -f 740/423/732 738/422/730 728/424/720 -f 741/428/733 728/424/720 738/422/730 -f 741/428/733 726/422/718 728/424/720 -f 741/428/733 742/429/734 726/422/718 -f 731/427/723 726/422/718 742/429/734 -f 742/429/734 743/430/735 731/427/723 -f 730/426/722 731/427/723 743/430/735 -f 743/430/735 744/431/736 730/426/722 -f 718/414/710 730/426/722 744/431/736 -f 718/414/710 744/431/736 745/432/737 -f 718/414/710 745/432/737 715/411/707 -f 737/420/729 746/418/738 735/425/727 -f 735/425/727 747/415/739 733/413/725 -f 747/415/739 735/425/727 746/418/738 -f 746/418/738 748/416/740 747/415/739 -f 749/433/741 750/434/742 698/400/689 -f 751/411/743 698/400/689 750/434/742 -f 751/411/743 696/398/687 698/400/689 -f 696/398/687 751/411/743 733/413/725 -f 696/398/687 733/413/725 699/401/690 -f 747/415/739 699/401/690 733/413/725 -f 699/401/690 747/415/739 701/403/692 -f 748/416/740 701/403/692 747/415/739 -f 748/416/740 704/406/695 701/403/692 -f 752/417/744 704/406/695 748/416/740 -f 748/416/740 746/418/738 752/417/744 -f 753/419/745 752/417/744 746/418/738 -f 746/418/738 737/420/729 753/419/745 -f 739/421/731 753/419/745 737/420/729 -f 754/435/746 755/436/747 756/437/748 -f 755/436/747 754/435/746 757/438/749 -f 755/436/747 757/438/749 758/435/750 -f 759/439/751 758/435/750 757/438/749 -f 759/439/751 760/440/752 758/435/750 -f 760/440/752 759/439/751 761/441/753 -f 761/441/753 762/442/754 760/440/752 -f 763/443/755 760/440/752 762/442/754 -f 762/442/754 764/444/756 763/443/755 -f 765/445/757 763/443/755 764/444/756 -f 764/444/756 766/446/758 765/445/757 -f 749/433/741 765/445/757 766/446/758 -f 766/446/758 767/447/759 749/433/741 -f 750/434/742 749/433/741 767/447/759 -f 768/432/760 750/434/742 767/447/759 -f 750/434/742 768/432/760 751/411/743 -f 734/414/726 751/411/743 768/432/760 -f 751/411/743 734/414/726 733/413/725 -f 769/448/761 770/449/762 757/438/749 -f 759/439/751 757/438/749 770/449/762 -f 770/449/762 761/441/753 759/439/751 -f 713/398/705 715/411/707 714/400/706 -f 715/411/707 771/434/763 714/400/706 -f 771/434/763 715/411/707 745/432/737 -f 771/434/763 745/432/737 772/447/764 -f 772/447/764 745/432/737 773/450/765 -f 773/450/765 774/451/766 772/447/764 -f 773/450/765 767/447/759 774/451/766 -f 775/452/767 774/451/766 767/447/759 -f 767/447/759 766/446/758 775/452/767 -f 776/453/768 775/452/767 766/446/758 -f 766/446/758 764/444/756 776/453/768 -f 777/454/769 776/453/768 764/444/756 -f 764/444/756 762/442/754 777/454/769 -f 778/455/770 777/454/769 762/442/754 -f 762/442/754 761/441/753 778/455/770 -f 779/456/771 778/455/770 761/441/753 -f 761/441/753 770/449/762 779/456/771 -f 780/457/772 779/456/771 770/449/762 -f 781/458/773 782/459/774 777/454/769 -f 776/453/768 777/454/769 782/459/774 -f 776/453/768 782/459/774 775/452/767 -f 783/460/775 775/452/767 782/459/774 -f 775/452/767 783/460/775 774/451/766 -f 783/460/775 784/452/776 774/451/766 -f 784/452/776 772/447/764 774/451/766 -f 772/447/764 784/452/776 785/446/777 -f 785/446/777 786/461/778 772/447/764 -f 786/461/778 785/446/777 787/445/779 -f 787/445/779 788/462/780 786/461/778 -f 788/462/780 787/445/779 789/463/781 -f 789/463/781 790/464/782 788/462/780 -f 789/463/781 791/465/783 790/464/782 -f 792/466/784 790/464/782 791/465/783 -f 792/466/784 791/465/783 793/467/566 -f 793/467/566 791/465/783 756/437/748 -f 754/435/746 756/437/748 791/465/783 -f 794/468/785 795/469/786 796/470/787 -f 781/458/773 796/470/787 795/469/786 -f 795/469/786 797/471/788 781/458/773 -f 782/459/774 781/458/773 797/471/788 -f 797/471/788 798/472/789 782/459/774 -f 783/460/775 782/459/774 798/472/789 -f 783/460/775 798/472/789 799/459/790 -f 783/460/775 799/459/790 784/452/776 -f 800/473/791 784/452/776 799/459/790 -f 800/473/791 785/446/777 784/452/776 -f 785/446/777 800/473/791 801/444/792 -f 801/444/792 787/445/779 785/446/777 -f 787/445/779 801/444/792 802/443/793 -f 802/443/793 789/463/781 787/445/779 -f 802/443/793 803/440/794 789/463/781 -f 791/465/783 789/463/781 803/440/794 -f 791/465/783 803/440/794 754/435/746 -f 804/439/795 754/435/746 803/440/794 -f 802/443/793 805/442/796 803/440/794 -f 805/442/796 802/443/793 801/444/792 -f 801/444/792 806/454/797 805/442/796 -f 806/454/797 801/444/792 800/473/791 -f 800/473/791 799/459/790 806/454/797 -f 797/471/788 795/469/786 807/474/798 -f 807/474/798 808/475/799 797/471/788 -f 798/472/789 797/471/788 808/475/799 -f 798/472/789 808/475/799 809/471/800 -f 809/471/800 799/459/790 798/472/789 -f 799/459/790 809/471/800 810/458/801 -f 810/458/801 806/454/797 799/459/790 -f 806/454/797 810/458/801 811/455/802 -f 811/455/802 805/442/796 806/454/797 -f 805/442/796 811/455/802 812/441/803 -f 812/441/803 803/440/794 805/442/796 -f 803/440/794 812/441/803 804/439/795 -f 813/449/804 804/439/795 812/441/803 -f 812/441/803 814/456/805 813/449/804 -f 814/456/805 812/441/803 811/455/802 -f 811/455/802 815/470/806 814/456/805 -f 815/470/806 811/455/802 810/458/801 -f 810/458/801 816/469/807 815/470/806 -f 816/469/807 810/458/801 809/471/800 -f 809/471/800 817/474/808 816/469/807 -f 817/474/808 809/471/800 808/475/799 -f 808/475/799 818/476/809 817/474/808 -f 808/475/799 807/474/798 818/476/809 -f 819/477/810 818/476/809 807/474/798 -f 807/474/798 820/478/811 819/477/810 -f 821/479/812 819/477/810 820/478/811 -f 820/478/811 822/480/813 821/479/812 -f 823/481/814 821/479/812 822/480/813 -f 822/480/813 820/478/811 794/468/785 -f 795/469/786 794/468/785 820/478/811 -f 820/478/811 807/474/798 795/469/786 -f 824/482/815 825/483/816 826/484/817 -f 827/485/818 826/484/817 825/483/816 -f 827/485/818 825/483/816 828/486/819 -f 829/487/820 828/486/819 825/483/816 -f 829/487/820 830/488/821 828/486/819 -f 829/487/820 831/489/822 830/488/821 -f 830/488/821 831/489/822 832/490/823 -f 823/481/814 832/490/823 831/489/822 -f 832/490/823 823/481/814 833/491/824 -f 822/480/813 833/491/824 823/481/814 -f 833/491/824 822/480/813 834/492/825 -f 794/468/785 834/492/825 822/480/813 -f 834/492/825 794/468/785 835/493/826 -f 796/470/787 835/493/826 794/468/785 -f 835/493/826 796/470/787 779/456/771 -f 778/455/770 779/456/771 796/470/787 -f 796/470/787 781/458/773 778/455/770 -f 777/454/769 778/455/770 781/458/773 -f 836/494/827 833/491/824 834/492/825 -f 837/495/828 830/488/821 838/496/829 -f 837/495/828 838/496/829 839/497/830 -f 838/496/829 840/498/831 839/497/830 -f 840/498/831 841/499/832 839/497/830 -f 840/498/831 842/500/833 841/499/832 -f 842/500/833 843/501/834 841/499/832 -f 836/494/827 843/501/834 842/500/833 -f 836/494/827 844/502/835 843/501/834 -f 836/494/827 834/492/825 844/502/835 -f 835/493/826 844/502/835 834/492/825 -f 844/502/835 835/493/826 780/457/772 -f 779/456/771 780/457/772 835/493/826 -f 832/490/823 838/496/829 830/488/821 -f 837/495/828 839/497/830 830/488/821 -f 830/488/821 839/497/830 828/486/819 -f 839/497/830 845/503/836 828/486/819 -f 839/497/830 846/504/837 845/503/836 -f 847/505/836 845/503/836 846/504/837 -f 846/504/837 848/506/838 847/505/836 -f 849/507/839 847/505/836 848/506/838 -f 850/508/838 849/507/839 848/506/838 -f 848/506/838 851/509/840 850/508/838 -f 851/509/840 848/506/838 852/510/841 -f 852/510/841 853/511/842 851/509/840 -f 853/511/842 852/510/841 843/501/834 -f 841/499/832 843/501/834 852/510/841 -f 852/510/841 846/504/837 841/499/832 -f 839/497/830 841/499/832 846/504/837 -f 846/504/837 852/510/841 848/506/838 -f 770/449/762 769/448/761 780/457/772 -f 854/512/843 780/457/772 769/448/761 -f 854/512/843 769/448/761 855/457/844 -f 854/512/843 855/457/844 856/501/845 -f 857/502/846 856/501/845 855/457/844 -f 857/502/846 858/494/847 856/501/845 -f 858/494/847 857/502/846 859/492/848 -f 860/491/849 858/494/847 859/492/848 -f 860/491/849 859/492/848 861/480/850 -f 861/480/850 862/481/851 860/491/849 -f 862/481/851 861/480/850 863/479/852 -f 863/479/852 864/513/853 862/481/851 -f 864/513/853 863/479/852 865/514/854 -f 865/514/854 866/482/855 864/513/853 -f 865/514/854 867/515/669 866/482/855 -f 868/516/856 866/482/855 867/515/669 -f 868/516/856 867/515/669 824/482/815 -f 824/482/815 826/484/817 868/516/856 -f 869/489/857 862/481/851 864/513/853 -f 862/481/851 869/489/857 870/490/858 -f 870/490/858 860/491/849 862/481/851 -f 871/488/859 870/490/858 869/489/857 -f 870/490/858 871/488/859 872/496/860 -f 873/517/861 874/518/862 875/519/863 -f 876/519/864 875/519/863 874/518/862 -f 877/508/865 875/519/863 876/519/864 -f 876/519/864 878/509/866 877/508/865 -f 879/506/867 877/508/865 878/509/866 -f 878/509/866 880/510/868 879/506/867 -f 881/504/869 879/506/867 880/510/868 -f 880/510/868 882/499/870 881/504/869 -f 883/497/871 881/504/869 882/499/870 -f 882/499/870 884/498/872 883/497/871 -f 884/498/872 872/496/860 883/497/871 -f 872/496/860 885/495/873 883/497/871 -f 885/495/873 872/496/860 871/488/859 -f 885/495/873 871/488/859 886/487/874 -f 869/489/857 886/487/874 871/488/859 -f 886/487/874 869/489/857 887/483/875 -f 864/513/853 887/483/875 869/489/857 -f 887/483/875 864/513/853 866/482/855 -f 888/500/876 884/498/872 882/499/870 -f 858/494/847 888/500/876 856/501/845 -f 856/501/845 888/500/876 882/499/870 -f 882/499/870 880/510/868 856/501/845 -f 889/511/877 856/501/845 880/510/868 -f 880/510/868 878/509/866 889/511/877 -f 854/512/843 856/501/845 890/520/878 -f 889/511/877 890/520/878 856/501/845 -f 889/511/877 891/521/879 890/520/878 -f 891/521/879 889/511/877 878/509/866 -f 878/509/866 876/519/864 891/521/879 -f 874/518/862 891/521/879 876/519/864 -f 891/521/879 874/518/862 892/522/880 -f 893/523/881 892/522/880 874/518/862 -f 893/523/881 894/518/882 892/522/880 -f 894/518/882 893/523/881 895/517/883 -f 895/517/883 896/519/884 894/518/882 -f 897/519/885 894/518/882 896/519/884 -f 896/519/884 898/524/886 897/519/885 -f 892/522/880 890/520/878 891/521/879 -f 892/522/880 899/521/887 890/520/878 -f 899/521/887 892/522/880 894/518/882 -f 894/518/882 897/519/885 899/521/887 -f 780/457/772 854/512/843 844/502/835 -f 843/501/834 844/502/835 854/512/843 -f 854/512/843 890/520/878 843/501/834 -f 853/511/842 843/501/834 890/520/878 -f 853/511/842 890/520/878 899/521/887 -f 899/521/887 851/509/840 853/511/842 -f 851/509/840 899/521/887 897/519/885 -f 897/519/885 850/508/838 851/509/840 -f 850/508/838 897/519/885 898/524/886 -f 898/524/886 849/507/839 850/508/838 -f 898/524/888 849/507/839 898/524/886 -f 898/524/886 896/519/884 898/524/888 -f 898/524/888 896/519/884 900/525/889 -f 900/525/889 896/519/884 895/517/883 -f 895/517/883 901/517/890 900/525/889 -f 901/517/890 895/517/883 893/523/881 -f 901/517/890 893/523/881 873/517/861 -f 874/518/862 873/517/861 893/523/881 -f 902/526/891 898/524/888 900/525/889 -f 903/524/892 904/524/893 905/524/892 -f 905/524/892 904/524/893 877/508/865 -f 904/524/893 875/519/863 877/508/865 -f 904/524/893 906/526/894 875/519/863 -f 875/519/863 906/526/894 873/517/861 -f 906/526/894 907/525/895 873/517/861 -f 873/517/861 907/525/895 901/517/890 -f 908/517/896 901/517/890 907/525/895 -f 908/517/896 900/525/889 901/517/890 -f 900/525/889 908/517/896 909/527/897 -f 900/525/889 909/527/897 902/526/891 -f 910/528/898 902/526/891 909/527/897 -f 910/528/898 909/527/897 906/526/894 -f 907/525/895 906/526/894 909/527/897 -f 907/525/895 909/527/897 908/517/896 -f 909/527/897 908/517/896 911/527/899 -f 912/485/900 887/483/875 913/484/901 -f 887/483/875 912/485/900 886/487/874 -f 914/486/902 886/487/874 912/485/900 -f 914/486/902 915/503/903 886/487/874 -f 915/503/903 885/495/873 886/487/874 -f 883/497/871 885/495/873 915/503/903 -f 883/497/871 915/503/903 881/504/869 -f 916/505/904 881/504/869 915/503/903 -f 881/504/869 916/505/904 879/506/867 -f 917/507/797 879/506/867 916/505/904 -f 879/506/867 917/507/797 877/508/865 -f 905/524/892 877/508/865 917/507/797 -f 866/482/855 913/484/901 887/483/875 -f 866/482/855 868/516/856 913/484/901 -f 918/529/789 913/484/901 868/516/856 -f 918/529/789 868/516/856 826/484/817 -f 792/466/784 919/530/905 790/464/782 -f 920/531/906 790/464/782 919/530/905 -f 919/530/905 921/532/907 920/531/906 -f 922/533/908 920/531/906 921/532/907 -f 921/532/907 923/534/909 922/533/908 -f 924/379/910 922/533/908 923/534/909 -f 923/534/909 925/535/911 924/379/910 -f 926/382/912 924/379/910 925/535/911 -f 925/535/911 927/536/913 926/382/912 -f 928/537/907 926/382/912 927/536/913 -f 928/537/907 927/536/913 929/538/914 -f 929/538/914 930/539/915 928/537/907 -f 930/539/915 929/538/914 931/540/916 -f 931/540/916 932/541/917 930/539/915 -f 932/541/917 931/540/916 933/542/918 -f 933/542/918 934/543/919 932/541/917 -f 933/542/918 935/544/920 934/543/919 -f 936/545/921 934/543/919 935/544/920 -f 926/382/912 937/546/922 924/379/910 -f 937/546/922 938/547/923 924/379/910 -f 922/533/908 924/379/910 938/547/923 -f 938/547/923 939/548/924 922/533/908 -f 920/531/906 922/533/908 939/548/924 -f 939/548/924 940/549/925 920/531/906 -f 790/464/782 920/531/906 940/549/925 -f 940/549/925 788/462/780 790/464/782 -f 771/434/763 772/447/764 786/461/778 -f 786/461/778 714/400/706 771/434/763 -f 714/400/706 786/461/778 788/462/780 -f 788/462/780 940/549/925 714/400/706 -f 941/550/926 714/400/706 940/549/925 -f 940/549/925 939/548/924 941/550/926 -f 694/551/927 941/550/926 939/548/924 -f 939/548/924 938/547/923 694/551/927 -f 942/552/928 694/551/927 938/547/923 -f 938/547/923 937/546/922 942/552/928 -f 943/553/929 942/552/928 937/546/922 -f 937/546/922 926/382/912 943/553/929 -f 944/554/930 943/553/929 926/382/912 -f 926/382/912 945/388/931 944/554/930 -f 945/388/931 926/382/912 928/537/907 -f 945/388/931 928/537/907 930/539/915 -f 694/551/927 693/399/704 941/550/926 -f 941/550/926 693/399/704 714/400/706 -f 936/545/921 935/544/920 946/555/932 -f 936/545/921 946/555/932 947/556/933 -f 948/557/934 947/556/933 946/555/932 -f 948/557/934 949/555/935 947/556/933 -f 950/545/936 947/556/933 949/555/935 -f 950/545/936 949/555/935 951/544/937 -f 950/545/936 951/544/937 952/543/938 -f 953/542/939 952/543/938 951/544/937 -f 953/542/939 954/541/940 952/543/938 -f 954/541/940 953/542/939 955/540/941 -f 955/540/941 956/558/942 954/541/940 -f 956/558/942 955/540/941 957/538/943 -f 957/538/943 958/537/944 956/558/942 -f 958/537/944 957/538/943 959/536/945 -f 958/537/944 959/536/945 960/382/946 -f 961/559/947 960/382/946 959/536/945 -f 960/382/946 961/559/947 962/560/948 -f 963/534/949 962/560/948 961/559/947 -f 947/556/933 964/561/950 965/562/951 -f 947/556/933 950/545/936 964/561/950 -f 952/543/938 964/561/950 950/545/936 -f 966/563/952 952/543/938 954/541/940 -f 966/563/952 967/564/953 952/543/938 -f 964/561/950 952/543/938 967/564/953 -f 968/564/954 964/561/950 967/564/953 -f 968/564/954 969/565/955 964/561/950 -f 965/562/951 964/561/950 969/565/955 -f 965/562/951 969/565/955 970/561/956 -f 970/561/956 947/556/933 965/562/951 -f 947/556/933 970/561/956 936/545/921 -f 934/543/919 936/545/921 970/561/956 -f 970/561/956 971/564/957 934/543/919 -f 972/566/958 934/543/919 971/564/957 -f 972/566/958 932/541/917 934/543/919 -f 970/561/956 973/567/959 971/564/957 -f 973/567/959 970/561/956 969/565/955 -f 962/560/948 963/534/949 974/533/960 -f 975/532/961 974/533/960 963/534/949 -f 974/533/960 975/532/961 976/531/962 -f 977/530/963 976/531/962 975/532/961 -f 976/531/962 977/530/963 978/568/964 -f 979/466/965 978/568/964 977/530/963 -f 979/466/965 980/465/966 978/568/964 -f 980/465/966 979/466/965 981/467/967 -f 981/467/967 982/437/968 980/465/966 -f 758/435/750 980/465/966 982/437/968 -f 758/435/750 982/437/968 755/436/747 -f 983/569/747 755/436/747 982/437/968 -f 983/569/747 756/437/748 755/436/747 -f 984/463/969 978/568/964 980/465/966 -f 984/463/969 985/462/813 978/568/964 -f 986/549/970 978/568/964 985/462/813 -f 978/568/964 986/549/970 976/531/962 -f 987/548/971 976/531/962 986/549/970 -f 976/531/962 987/548/971 974/533/960 -f 988/547/972 974/533/960 987/548/971 -f 974/533/960 988/547/972 962/560/948 -f 989/546/973 962/560/948 988/547/972 -f 989/546/973 960/382/946 962/560/948 -f 980/465/966 758/435/750 760/440/752 -f 980/465/966 760/440/752 984/463/969 -f 763/443/755 984/463/969 760/440/752 -f 763/443/755 765/445/757 984/463/969 -f 985/462/813 984/463/969 765/445/757 -f 765/445/757 749/433/741 985/462/813 -f 698/400/689 985/462/813 749/433/741 -f 985/462/813 698/400/689 986/549/970 -f 990/550/974 986/549/970 698/400/689 -f 986/549/970 990/550/974 987/548/971 -f 991/551/975 987/548/971 990/550/974 -f 987/548/971 991/551/975 988/547/972 -f 992/552/976 988/547/972 991/551/975 -f 988/547/972 992/552/976 989/546/973 -f 993/553/977 989/546/973 992/552/976 -f 989/546/973 993/553/977 960/382/946 -f 994/554/978 960/382/946 993/553/977 -f 960/382/946 994/554/978 995/388/979 -f 697/399/688 990/550/974 698/400/689 -f 697/399/688 991/551/975 990/550/974 -f 996/570/980 997/571/981 923/534/909 -f 925/535/911 923/534/909 997/571/981 -f 925/535/911 997/571/981 998/572/982 -f 999/573/983 925/535/911 998/572/982 -f 927/536/913 925/535/911 999/573/983 -f 927/536/913 999/573/983 1000/574/984 -f 1000/574/984 929/538/914 927/536/913 -f 1000/574/984 1001/575/985 929/538/914 -f 1001/575/985 931/540/916 929/538/914 -f 931/540/916 1001/575/985 1002/576/986 -f 1002/576/986 933/542/918 931/540/916 -f 933/542/918 1002/576/986 935/544/920 -f 1003/577/987 935/544/920 1002/576/986 -f 935/544/920 1003/577/987 1004/578/988 -f 1005/579/989 1004/578/988 1003/577/987 -f 1004/578/988 1005/579/989 1006/580/990 -f 1007/581/991 1006/580/990 1005/579/989 -f 1008/582/992 1007/581/991 1005/579/989 -f 1006/580/990 1009/583/993 1004/578/988 -f 946/555/932 1004/578/988 1009/583/993 -f 1004/578/988 946/555/932 935/544/920 -f 1010/581/994 1007/581/991 1008/582/992 -f 1011/584/995 1010/581/994 1008/582/992 -f 1008/582/992 1012/585/996 1011/584/995 -f 1013/586/997 1011/584/995 1012/585/996 -f 1012/585/996 1014/587/998 1013/586/997 -f 1015/588/999 1013/586/997 1014/587/998 -f 1014/587/998 1016/589/1000 1015/588/999 -f 1017/590/1001 1015/588/999 1016/589/1000 -f 1016/589/1000 1018/591/1002 1017/590/1001 -f 1019/592/1003 1017/590/1001 1018/591/1002 -f 1018/591/1002 1020/593/1004 1019/592/1003 -f 1021/594/1005 1019/592/1003 1020/593/1004 -f 1021/594/1005 1020/593/1004 1022/592/1006 -f 1023/591/1007 1022/592/1006 1020/593/1004 -f 1022/592/1006 1023/591/1007 1024/590/1008 -f 1025/595/1009 1024/590/1008 1023/591/1007 -f 1024/590/1008 1025/595/1009 1026/588/1010 -f 1027/587/1011 1026/588/1010 1025/595/1009 -f 1023/591/1007 1028/596/1012 1025/595/1009 -f 1029/597/1013 1028/596/1012 1030/598/1014 -f 1031/599/1015 1030/598/1014 1028/596/1012 -f 1028/596/1012 1023/591/1007 1031/599/1015 -f 1020/593/1004 1031/599/1015 1023/591/1007 -f 1020/593/1004 1018/591/1002 1031/599/1015 -f 1032/596/1016 1031/599/1015 1018/591/1002 -f 1018/591/1002 1016/589/1000 1032/596/1016 -f 1033/600/1017 1032/596/1016 1016/589/1000 -f 1016/589/1000 1014/587/998 1033/600/1017 -f 1034/601/1018 1033/600/1017 1014/587/998 -f 1014/587/998 1012/585/996 1034/601/1018 -f 1035/602/1019 1034/601/1018 1012/585/996 -f 1012/585/996 1008/582/992 1035/602/1019 -f 1034/601/1018 1035/602/1019 1036/603/1020 -f 1033/600/1017 1034/601/1018 1037/604/1021 -f 1036/603/1020 1037/604/1021 1034/601/1018 -f 1037/604/1021 1036/603/1020 1038/605/1022 -f 1032/596/1016 1033/600/1017 1039/597/1023 -f 1037/604/1021 1039/597/1023 1033/600/1017 -f 1039/597/1023 1037/604/1021 1040/606/1024 -f 1038/605/1022 1040/606/1024 1037/604/1021 -f 1040/606/1024 1038/605/1022 1041/607/1025 -f 1031/599/1015 1032/596/1016 1030/598/1014 -f 1039/597/1023 1030/598/1014 1032/596/1016 -f 1030/598/1014 1039/597/1023 1042/608/1026 -f 1040/606/1024 1042/608/1026 1039/597/1023 -f 1042/608/1026 1040/606/1024 1043/609/1027 -f 1041/607/1025 1043/609/1027 1040/606/1024 -f 1043/609/1027 1041/607/1025 1044/610/1028 -f 1045/611/1026 1046/612/1029 1044/610/1028 -f 1047/613/1030 1048/614/1031 1049/615/1032 -f 1049/615/1032 1050/616/1033 1047/613/1030 -f 1050/616/1033 1049/615/1032 1051/617/1034 -f 1051/617/1034 1052/618/1035 1050/616/1033 -f 1052/618/1035 1051/617/1034 1046/612/1029 -f 1052/618/1035 1046/612/1029 1053/619/1036 -f 1054/620/1037 1053/619/1036 1046/612/1029 -f 1054/620/1037 1046/612/1029 1055/621/1027 -f 1045/611/1026 1055/621/1027 1046/612/1029 -f 1045/611/1026 1056/612/1038 1055/621/1027 -f 1045/611/1026 1044/610/1028 1056/612/1038 -f 1057/622/1039 1056/612/1038 1044/610/1028 -f 1057/622/1039 1044/610/1028 1041/607/1025 -f 1041/607/1025 1058/623/1040 1057/622/1039 -f 1058/623/1040 1041/607/1025 1038/605/1022 -f 1038/605/1022 1059/624/1041 1058/623/1040 -f 1059/624/1041 1038/605/1022 1036/603/1020 -f 1036/603/1020 1060/625/1042 1059/624/1041 -f 1047/613/1030 1061/574/1043 1062/575/885 -f 1061/574/1043 1047/613/1030 1050/616/1033 -f 1050/616/1033 1063/626/1044 1061/574/1043 -f 1063/626/1044 1050/616/1033 1052/618/1035 -f 1063/626/1044 1052/618/1035 1064/572/1045 -f 1053/619/1036 1064/572/1045 1052/618/1035 -f 953/542/939 951/544/937 1065/576/1046 -f 1065/576/1046 955/540/941 953/542/939 -f 955/540/941 1065/576/1046 1062/575/885 -f 1062/575/885 957/538/943 955/540/941 -f 1062/575/885 1061/574/1043 957/538/943 -f 1061/574/1043 959/536/945 957/538/943 -f 959/536/945 1061/574/1043 1063/626/1044 -f 959/536/945 1063/626/1044 961/559/947 -f 961/559/947 1063/626/1044 1064/572/1045 -f 1066/571/1047 961/559/947 1064/572/1045 -f 961/559/947 1066/571/1047 963/534/949 -f 1067/570/1048 963/534/949 1066/571/1047 -f 1026/588/1010 1027/587/1011 1068/586/1049 -f 1069/627/1050 1068/586/1049 1027/587/1011 -f 1068/586/1049 1069/627/1050 1070/628/1051 -f 1071/582/1052 1070/628/1051 1069/627/1050 -f 1070/628/1051 1071/582/1052 1072/581/1053 -f 1072/581/1053 1071/582/1052 1073/581/1054 -f 1073/581/1054 1071/582/1052 1074/579/1055 -f 1073/581/1054 1074/579/1055 1075/580/1056 -f 1076/578/1057 1075/580/1056 1074/579/1055 -f 1075/580/1056 1076/578/1057 1077/583/1058 -f 949/555/935 1077/583/1058 1076/578/1057 -f 1076/578/1057 951/544/937 949/555/935 -f 951/544/937 1076/578/1057 1078/577/1059 -f 1078/577/1059 1065/576/1046 951/544/937 -f 1065/576/1046 1078/577/1059 1079/629/1060 -f 1079/629/1060 1062/575/885 1065/576/1046 -f 1062/575/885 1079/629/1060 1048/614/1031 -f 1048/614/1031 1047/613/1030 1062/575/885 -f 1074/579/1055 1078/577/1059 1076/578/1057 -f 1078/577/1059 1074/579/1055 1080/630/1061 -f 1080/630/1061 1079/629/1060 1078/577/1059 -f 1079/629/1060 1080/630/1061 1081/631/1062 -f 1081/631/1062 1048/614/1031 1079/629/1060 -f 1081/631/1062 1082/624/1063 1048/614/1031 -f 1082/624/1063 1049/615/1032 1048/614/1031 -f 1049/615/1032 1082/624/1063 1083/623/1064 -f 1083/623/1064 1051/617/1034 1049/615/1032 -f 1051/617/1034 1083/623/1064 1084/622/1065 -f 1084/622/1065 1046/612/1029 1051/617/1034 -f 1084/622/1065 1044/610/1028 1046/612/1029 -f 1084/622/1065 1085/607/1066 1044/610/1028 -f 1043/609/1027 1044/610/1028 1085/607/1066 -f 1085/607/1066 1086/606/1067 1043/609/1027 -f 1042/608/1026 1043/609/1027 1086/606/1067 -f 1086/606/1067 1029/597/1013 1042/608/1026 -f 1030/598/1014 1042/608/1026 1029/597/1013 -f 1087/603/1068 1082/624/1063 1081/631/1062 -f 1088/605/1069 1083/623/1064 1082/624/1063 -f 1082/624/1063 1087/603/1068 1088/605/1069 -f 1089/604/1070 1088/605/1069 1087/603/1068 -f 1087/603/1068 1090/601/1071 1089/604/1070 -f 1090/601/1071 1087/603/1068 1091/602/1072 -f 1091/602/1072 1087/603/1068 1081/631/1062 -f 1091/602/1072 1081/631/1062 1080/630/1061 -f 1092/600/1073 1089/604/1070 1090/601/1071 -f 1085/607/1066 1084/622/1065 1083/623/1064 -f 1083/623/1064 1088/605/1069 1085/607/1066 -f 1086/606/1067 1085/607/1066 1088/605/1069 -f 1088/605/1069 1089/604/1070 1086/606/1067 -f 1029/597/1013 1086/606/1067 1089/604/1070 -f 1089/604/1070 1092/600/1073 1029/597/1013 -f 1028/596/1012 1029/597/1013 1092/600/1073 -f 1092/600/1073 1025/595/1009 1028/596/1012 -f 1025/595/1009 1092/600/1073 1027/587/1011 -f 1090/601/1071 1027/587/1011 1092/600/1073 -f 1027/587/1011 1090/601/1071 1069/627/1050 -f 1091/602/1072 1069/627/1050 1090/601/1071 -f 1069/627/1050 1091/602/1072 1071/582/1052 -f 1080/630/1061 1071/582/1052 1091/602/1072 -f 1071/582/1052 1080/630/1061 1074/579/1055 -f 1035/602/1019 1060/625/1042 1036/603/1020 -f 1035/602/1019 1093/630/1074 1060/625/1042 -f 1093/630/1074 1035/602/1019 1008/582/992 -f 1008/582/992 1005/579/989 1093/630/1074 -f 1003/577/987 1093/630/1074 1005/579/989 -f 1093/630/1074 1003/577/987 1094/632/985 -f 1002/576/986 1094/632/985 1003/577/987 -f 1094/632/985 1002/576/986 1001/575/985 -f 1001/575/985 1095/614/1075 1094/632/985 -f 1095/614/1075 1001/575/985 1096/613/1076 -f 1096/613/1076 1097/615/1077 1095/614/1075 -f 1097/615/1077 1096/613/1076 1098/616/1078 -f 1098/616/1078 1099/617/1079 1097/615/1077 -f 1099/617/1079 1098/616/1078 1100/618/1080 -f 1100/618/1080 1056/612/1038 1099/617/1079 -f 1100/618/1080 1101/619/1081 1056/612/1038 -f 1102/620/1082 1056/612/1038 1101/619/1081 -f 1102/620/1082 1055/621/1027 1056/612/1038 -f 1094/632/985 1060/625/1042 1093/630/1074 -f 1060/625/1042 1094/632/985 1095/614/1075 -f 1059/624/1041 1060/625/1042 1095/614/1075 -f 1059/624/1041 1095/614/1075 1097/615/1077 -f 1097/615/1077 1058/623/1040 1059/624/1041 -f 1058/623/1040 1097/615/1077 1099/617/1079 -f 1099/617/1079 1057/622/1039 1058/623/1040 -f 1057/622/1039 1099/617/1079 1056/612/1038 -f 1103/633/1083 1104/634/1084 1105/635/1085 -f 1105/635/1085 1106/636/1086 1103/633/1083 -f 1106/636/1086 1105/635/1085 1107/637/1087 -f 1107/637/1087 1108/638/1088 1106/636/1086 -f 1109/639/1089 1106/636/1086 1108/638/1088 -f 1108/638/1088 1110/640/1090 1109/639/1089 -f 1111/641/1013 1109/639/1089 1110/640/1090 -f 1111/641/1013 1112/642/1091 1109/639/1089 -f 1112/642/1091 1113/643/1092 1109/639/1089 -f 1112/642/1091 1114/644/1093 1113/643/1092 -f 1114/644/1093 1115/645/1094 1113/643/1092 -f 1103/633/1083 1113/643/1092 1115/645/1094 -f 1115/645/1094 1116/646/1095 1103/633/1083 -f 1104/634/1084 1103/633/1083 1116/646/1095 -f 1116/646/1095 1117/647/1096 1104/634/1084 -f 1118/648/1097 1104/634/1084 1117/647/1096 -f 1117/647/1096 836/649/1098 1118/648/1097 -f 842/650/1099 1118/648/1097 836/649/1098 -f 1113/643/1092 1103/633/1083 1106/636/1086 -f 1106/636/1086 1109/639/1089 1113/643/1092 -f 842/650/1099 840/651/1100 1118/648/1097 -f 1119/652/1101 1118/648/1097 840/651/1100 -f 1119/652/1101 1120/653/1102 1118/648/1097 -f 1120/653/1102 1119/652/1101 1121/654/749 -f 1121/654/749 1122/655/1103 1120/653/1102 -f 1105/635/1085 1120/653/1102 1122/655/1103 -f 1122/655/1103 1107/637/1087 1105/635/1085 -f 1123/656/1104 1121/654/749 1119/652/1101 -f 1124/657/1105 1125/658/1106 1126/659/1107 -f 1127/660/1108 1126/659/1107 1125/658/1106 -f 1126/659/1107 1127/660/1108 1128/661/1109 -f 1129/662/1110 1128/661/1109 1127/660/1108 -f 1128/661/1109 1129/662/1110 1130/659/1111 -f 1131/660/1112 1130/659/1111 1129/662/1110 -f 1130/659/1111 1131/660/1112 1132/657/1113 -f 1133/658/1114 1132/657/1113 1131/660/1112 -f 1132/657/1113 1133/658/1114 1134/663/1115 -f 1135/664/1116 1134/663/1115 1133/658/1114 -f 1134/663/1115 1135/664/1116 1124/657/1105 -f 1125/658/1106 1124/657/1105 1135/664/1116 -f 1135/664/1116 1136/665/1117 1125/658/1106 -f 1137/666/1118 1125/658/1106 1136/665/1117 -f 1125/658/1106 1137/666/1118 1127/660/1108 -f 1138/667/1119 1127/660/1108 1137/666/1118 -f 1127/660/1108 1138/667/1119 1129/662/1110 -f 1139/668/1120 1129/662/1110 1138/667/1119 -f 1129/662/1110 1139/668/1120 1131/660/1112 -f 1140/667/1121 1131/660/1112 1139/668/1120 -f 1131/660/1112 1140/667/1121 1133/658/1114 -f 1141/666/1122 1133/658/1114 1140/667/1121 -f 1133/658/1114 1141/666/1122 1135/664/1116 -f 1136/665/1117 1135/664/1116 1141/666/1122 -f 1142/669/1123 1143/670/1124 1144/671/1125 -f 1145/672/1126 1144/671/1125 1143/670/1124 -f 1144/671/1125 1145/672/1126 1146/673/1127 -f 1147/674/1128 1146/673/1127 1145/672/1126 -f 1146/673/1127 1147/674/1128 1148/675/898 -f 1148/675/898 1149/676/1129 1146/673/1127 -f 1148/675/898 884/651/1130 1149/676/1129 -f 888/650/1131 1149/676/1129 884/651/1130 -f 888/650/1131 858/649/1132 1149/676/1129 -f 1150/677/1133 1149/676/1129 858/649/1132 -f 1149/676/1129 1150/677/1133 1151/678/1134 -f 1152/679/1135 1151/678/1134 1150/677/1133 -f 1151/678/1134 1152/679/1135 1153/680/1136 -f 1154/681/1137 1153/680/1136 1152/679/1135 -f 1153/680/1136 1154/681/1137 1155/682/1138 -f 1156/683/1139 1155/682/1138 1154/681/1137 -f 1156/683/1139 1157/684/1140 1155/682/1138 -f 1157/684/1140 1158/685/1141 1155/682/1138 -f 1159/686/1142 1148/675/898 1147/674/1128 -f 1157/684/1140 1160/687/1023 1158/685/1141 -f 1160/687/1023 1161/688/1143 1158/685/1141 -f 1162/689/1144 1158/685/1141 1161/688/1143 -f 1161/688/1143 1163/690/1145 1162/689/1144 -f 1164/691/1146 1162/689/1144 1163/690/1145 -f 1151/678/1134 1146/673/1127 1149/676/1129 -f 1146/673/1127 1151/678/1134 1144/671/1125 -f 1153/680/1136 1144/671/1125 1151/678/1134 -f 1144/671/1125 1153/680/1136 1142/669/1123 -f 1155/682/1138 1142/669/1123 1153/680/1136 -f 1142/669/1123 1155/682/1138 1158/685/1141 -f 1158/685/1141 1162/689/1144 1142/669/1123 -f 1143/670/1124 1142/669/1123 1162/689/1144 -f 804/439/795 757/438/749 754/435/746 -f 804/439/795 813/449/804 757/438/749 -f 769/448/761 757/438/749 813/449/804 -f 813/449/804 855/457/844 769/448/761 -f 855/457/844 813/449/804 814/456/805 -f 814/456/805 1165/493/1147 855/457/844 -f 1165/493/1147 814/456/805 815/470/806 -f 815/470/806 1166/468/1148 1165/493/1147 -f 1166/468/1148 815/470/806 816/469/807 -f 816/469/807 1167/478/1149 1166/468/1148 -f 1167/478/1149 816/469/807 817/474/808 -f 817/474/808 1168/477/1150 1167/478/1149 -f 1168/477/1150 817/474/808 818/476/809 -f 818/476/809 867/515/669 1168/477/1150 -f 818/476/809 819/477/810 867/515/669 -f 1169/514/1151 867/515/669 819/477/810 -f 819/477/810 821/479/812 1169/514/1151 -f 1170/513/1152 1169/514/1151 821/479/812 -f 1169/514/1151 824/482/815 867/515/669 -f 1169/514/1151 1170/513/1152 824/482/815 -f 825/483/816 824/482/815 1170/513/1152 -f 821/479/812 823/481/814 1170/513/1152 -f 831/489/822 1170/513/1152 823/481/814 -f 1170/513/1152 831/489/822 825/483/816 -f 829/487/820 825/483/816 831/489/822 -f 1171/667/1153 1172/668/1154 1173/660/1155 -f 1173/660/1155 1174/658/1156 1171/667/1153 -f 1174/658/1156 1173/660/1155 1175/657/1157 -f 1175/657/1157 1176/663/1158 1174/658/1156 -f 1177/664/1159 1174/658/1156 1176/663/1158 -f 1176/663/1158 1178/657/1160 1177/664/1159 -f 1179/658/1161 1177/664/1159 1178/657/1160 -f 1178/657/1160 1180/659/1162 1179/658/1161 -f 1181/660/1163 1179/658/1161 1180/659/1162 -f 1180/659/1162 1182/661/1164 1181/660/1163 -f 1183/662/1165 1181/660/1163 1182/661/1164 -f 1182/661/1164 1184/659/1166 1183/662/1165 -f 1173/660/1155 1183/662/1165 1184/659/1166 -f 1184/659/1166 1175/657/1157 1173/660/1155 -f 1183/662/1165 1173/660/1155 1172/668/1154 -f 1172/668/1154 1185/667/1167 1183/662/1165 -f 1181/660/1163 1183/662/1165 1185/667/1167 -f 1185/667/1167 1186/666/1168 1181/660/1163 -f 1179/658/1161 1181/660/1163 1186/666/1168 -f 1186/666/1168 1187/665/1169 1179/658/1161 -f 1177/664/1159 1179/658/1161 1187/665/1169 -f 1187/665/1169 1188/666/1170 1177/664/1159 -f 1174/658/1156 1177/664/1159 1188/666/1170 -f 1188/666/1170 1171/667/1153 1174/658/1156 -f 991/692/1171 1189/693/1172 992/694/1173 -f 1190/695/1174 992/694/1173 1189/693/1172 -f 992/694/1173 1190/695/1174 993/696/1175 -f 1191/697/1176 993/696/1175 1190/695/1174 -f 993/696/1175 1191/697/1176 994/698/1177 -f 1192/699/1177 994/698/1177 1191/697/1176 -f 994/698/1177 1192/699/1177 1193/700/1178 -f 1194/701/1179 1193/700/1178 1192/699/1177 -f 1194/701/1179 1195/702/1180 1193/700/1178 -f 1196/677/1181 1193/700/1178 1195/702/1180 -f 1195/702/1180 1197/703/1182 1196/677/1181 -f 954/704/1183 1196/677/1181 1197/703/1182 -f 1197/703/1182 1198/705/1184 954/704/1183 -f 966/706/1185 954/704/1183 1198/705/1184 -f 695/397/1186 1199/707/1187 1200/708/1188 -f 1201/709/1187 1200/708/1188 1199/707/1187 -f 1199/707/1187 1202/710/1189 1201/709/1187 -f 1203/711/1190 1201/709/1187 1202/710/1189 -f 1202/710/1189 1204/712/1191 1203/711/1190 -f 1205/713/1192 1203/711/1190 1204/712/1191 -f 1204/712/1191 1206/714/1193 1205/713/1192 -f 1207/715/1194 1205/713/1192 1206/714/1193 -f 1207/715/1194 1206/714/1193 1208/716/1195 -f 1209/717/1196 1208/716/1195 1206/714/1193 -f 1208/716/1195 1209/717/1196 1210/718/1197 -f 1211/719/1198 1210/718/1197 1209/717/1196 -f 1211/719/1198 1212/720/1199 1210/718/1197 -f 1213/721/1200 1210/718/1197 1212/720/1199 -f 1213/721/1200 1214/722/1201 1210/718/1197 -f 1208/716/1195 1210/718/1197 1214/722/1201 -f 1215/723/1202 1216/724/1202 1217/415/1203 -f 1218/724/1204 1217/415/1203 1216/724/1202 -f 1217/415/1203 1218/724/1204 1219/725/1205 -f 1219/725/1205 1218/724/1204 1220/726/1206 -f 1218/724/1204 1221/409/1207 1220/726/1206 -f 1220/726/1206 1221/409/1207 1222/727/1208 -f 1223/405/1208 1222/727/1208 1221/409/1207 -f 960/382/946 995/388/979 958/537/944 -f 995/388/979 956/558/942 958/537/944 -f 956/558/942 995/388/979 1196/728/1209 -f 1196/728/1209 954/541/940 956/558/942 -f 1193/729/1210 995/388/979 994/554/978 -f 1193/729/1210 1196/728/1209 995/388/979 -f 1224/730/1211 1225/391/624 1226/730/1211 -f 1227/391/624 1226/730/1211 1225/391/624 -f 1225/391/624 1228/374/623 1227/391/624 -f 1229/374/623 1227/391/624 1228/374/623 -f 1228/374/623 1230/731/1211 1229/374/623 -f 1231/731/1211 1229/374/623 1230/731/1211 -f 1232/728/1212 930/539/915 932/541/917 -f 930/539/915 1232/728/1212 945/388/931 -f 1233/729/1213 945/388/931 1232/728/1212 -f 1233/729/1213 944/554/930 945/388/931 -f 972/732/1214 1212/720/1214 932/733/1215 -f 1211/719/1216 932/733/1215 1212/720/1214 -f 932/733/1215 1211/719/1216 1232/734/1217 -f 1209/717/1218 1232/734/1217 1211/719/1216 -f 1232/734/1217 1209/717/1218 1233/735/1219 -f 1206/714/1220 1233/735/1219 1209/717/1218 -f 1206/714/1220 1204/712/1221 1233/735/1219 -f 944/736/1222 1233/735/1219 1204/712/1221 -f 1204/712/1221 1202/710/1223 944/736/1222 -f 943/737/1224 944/736/1222 1202/710/1223 -f 1202/710/1223 1199/707/1225 943/737/1224 -f 942/738/1226 943/737/1224 1199/707/1225 -f 1199/707/1225 695/397/1227 942/738/1226 -f 694/396/1228 942/738/1226 695/397/1227 -f 1096/613/1076 1001/575/985 1000/574/984 -f 1000/574/984 1098/616/1078 1096/613/1076 -f 1098/616/1078 1000/574/984 999/573/983 -f 999/573/983 1100/618/1080 1098/616/1078 -f 999/573/983 998/572/982 1100/618/1080 -f 1101/619/1081 1100/618/1080 998/572/982 -f 1178/739/1229 1176/740/1229 1180/741/1229 -f 1176/740/1229 1184/742/1229 1180/741/1229 -f 1175/743/1229 1184/742/1229 1176/740/1229 -f 1180/741/1229 1184/742/1229 1182/744/1229 -f 1132/743/1230 1134/740/1230 1130/742/1230 -f 1134/740/1230 1126/741/1230 1130/742/1230 -f 1124/739/1230 1126/741/1230 1134/740/1230 -f 1130/742/1230 1126/741/1230 1128/744/1230 -f 857/502/846 855/457/844 1165/493/1147 -f 1165/493/1147 859/492/848 857/502/846 -f 859/492/848 1165/493/1147 1166/468/1148 -f 1166/468/1148 861/480/850 859/492/848 -f 861/480/850 1166/468/1148 1167/478/1149 -f 1167/478/1149 863/479/852 861/480/850 -f 863/479/852 1167/478/1149 1168/477/1150 -f 1168/477/1150 865/514/854 863/479/852 -f 865/514/854 1168/477/1150 867/515/669 -f 1234/745/1231 1235/746/1232 1236/747/1233 -f 1237/748/1234 1236/747/1233 1235/746/1232 -f 1236/747/1233 1237/748/1234 1238/749/1235 -f 1239/750/1236 1238/749/1235 1237/748/1234 -f 1237/748/1234 1240/751/1237 1239/750/1236 -f 1241/752/1238 1239/750/1236 1240/751/1237 -f 1240/751/1237 1242/753/670 1241/752/1238 -f 1243/754/1239 1241/752/1238 1242/753/670 -f 1242/753/670 1244/755/1240 1243/754/1239 -f 1245/756/1241 1243/754/1239 1244/755/1240 -f 1244/755/1240 1246/757/1242 1245/756/1241 -f 1244/755/1240 1247/758/1243 1246/757/1242 -f 1248/759/1244 1246/757/1242 1247/758/1243 -f 1247/758/1243 1249/760/1245 1248/759/1244 -f 1250/761/1246 1248/759/1244 1249/760/1245 -f 1249/760/1245 1251/762/1247 1250/761/1246 -f 1252/763/1248 1250/761/1246 1251/762/1247 -f 1252/763/1248 1251/762/1247 1253/764/1249 -f 1249/760/1245 1254/765/1250 1251/762/1247 -f 1247/758/1243 1255/766/1251 1249/760/1245 -f 1254/765/1250 1249/760/1245 1255/766/1251 -f 1255/766/1251 1256/767/1252 1254/765/1250 -f 1244/755/1240 1242/753/670 1247/758/1243 -f 1255/766/1251 1247/758/1243 1242/753/670 -f 1242/753/670 1240/751/1237 1255/766/1251 -f 1256/767/1252 1255/766/1251 1240/751/1237 -f 1240/751/1237 1237/748/1234 1256/767/1252 -f 1235/746/1232 1256/767/1252 1237/748/1234 -f 1256/767/1252 1235/746/1232 1257/768/1253 -f 1257/768/1253 1254/765/1250 1256/767/1252 -f 1254/765/1250 1257/768/1253 1258/769/672 -f 1258/769/672 1251/762/1247 1254/765/1250 -f 1251/762/1247 1258/769/672 1259/770/1254 -f 1259/770/1254 1253/764/1249 1251/762/1247 -f 1259/770/1254 1260/762/1255 1253/764/1249 -f 1261/763/1256 1253/764/1249 1260/762/1255 -f 1261/763/1256 1260/762/1255 1262/761/1257 -f 1262/761/1257 1263/771/1258 1261/763/1256 -f 1263/771/1258 1262/761/1257 1264/772/1259 -f 1264/772/1259 1265/773/1260 1263/771/1258 -f 1266/774/1261 1259/770/1254 1258/769/672 -f 1267/775/1262 1257/768/1253 1235/746/1232 -f 1257/768/1253 1267/775/1262 1268/776/1263 -f 1268/776/1263 1258/769/672 1257/768/1253 -f 1258/769/672 1268/776/1263 1266/774/1261 -f 1269/777/1254 1266/774/1261 1268/776/1263 -f 1269/777/1254 1270/776/1264 1266/774/1261 -f 1271/769/1265 1266/774/1261 1270/776/1264 -f 1266/774/1261 1271/769/1265 1259/770/1254 -f 1260/762/1255 1259/770/1254 1271/769/1265 -f 1272/778/1266 1268/776/1263 1267/775/1262 -f 700/779/1267 702/780/1268 1272/778/1266 -f 703/781/1269 1272/778/1266 702/780/1268 -f 703/781/1269 705/782/1270 1272/778/1266 -f 705/782/1270 708/781/1271 1273/778/1272 -f 708/781/1271 710/780/1273 1273/778/1272 -f 711/779/1274 1273/778/1272 710/780/1273 -f 1274/745/1275 1275/747/1276 1276/746/1277 -f 1277/748/1278 1276/746/1277 1275/747/1276 -f 1276/746/1277 1277/748/1278 1278/767/1279 -f 1279/751/1280 1278/767/1279 1277/748/1278 -f 1278/767/1279 1279/751/1280 1280/766/1281 -f 1281/753/1282 1280/766/1281 1279/751/1280 -f 1280/766/1281 1281/753/1282 1282/758/1283 -f 1283/783/1284 1282/758/1283 1281/753/1282 -f 1283/783/1284 1284/757/1285 1282/758/1283 -f 1285/759/1285 1282/758/1283 1284/757/1285 -f 1284/757/1285 1286/784/1286 1285/759/1285 -f 1264/772/1259 1285/759/1285 1286/784/1286 -f 1285/759/1285 1264/772/1259 1262/761/1257 -f 1262/761/1257 1287/760/1287 1285/759/1285 -f 1287/760/1287 1262/761/1257 1260/762/1255 -f 1287/760/1287 1260/762/1255 1288/765/1277 -f 1271/769/1265 1288/765/1277 1260/762/1255 -f 1288/765/1277 1271/769/1265 1289/768/1288 -f 1270/776/1264 1289/768/1288 1271/769/1265 -f 1289/768/1288 1270/776/1264 1290/775/1289 -f 1273/778/1272 1290/775/1289 1270/776/1264 -f 1290/775/1289 1276/746/1277 1289/768/1288 -f 1278/767/1279 1289/768/1288 1276/746/1277 -f 1289/768/1288 1278/767/1279 1288/765/1277 -f 1280/766/1281 1288/765/1277 1278/767/1279 -f 1288/765/1277 1280/766/1281 1287/760/1287 -f 1282/758/1283 1287/760/1287 1280/766/1281 -f 1282/758/1283 1285/759/1285 1287/760/1287 -f 1253/764/1249 1291/785/1290 1252/763/1248 -f 1253/764/1249 1261/763/1256 1291/785/1290 -f 1292/786/1291 1291/785/1290 1261/763/1256 -f 1292/786/1291 1261/763/1256 1263/771/1258 -f 1292/786/1291 1263/771/1258 971/787/1292 -f 1265/773/1260 971/787/1292 1263/771/1258 -f 971/787/1292 1265/773/1260 972/787/1293 -f 1212/788/1294 972/787/1293 1265/773/1260 -f 1264/772/1259 1212/788/1294 1265/773/1260 -f 1212/788/1294 1264/772/1259 1213/789/1295 -f 1264/772/1259 1286/784/1286 1213/789/1295 -f 1214/790/1296 1213/789/1295 1286/784/1286 -f 1293/791/1297 1245/756/1241 1246/757/1242 -f 1293/791/1297 1246/757/1242 1294/784/1298 -f 1246/757/1242 1248/759/1244 1294/784/1298 -f 1295/792/1299 1294/784/1298 1248/759/1244 -f 1248/759/1244 1250/761/1246 1295/792/1299 -f 1296/771/1300 1295/792/1299 1250/761/1246 -f 1250/761/1246 1252/763/1248 1296/771/1300 -f 1297/786/1301 1296/771/1300 1252/763/1248 -f 1297/786/1301 1252/763/1248 1291/785/1290 -f 1291/785/1290 969/793/1302 1297/786/1301 -f 1291/785/1290 1292/786/1291 969/793/1302 -f 973/794/1303 969/793/1302 1292/786/1291 -f 1292/786/1291 971/787/1292 973/794/1303 -f 1298/773/1304 1295/792/1299 1296/771/1300 -f 1299/795/1305 1293/791/1297 1300/790/1306 -f 1294/784/1298 1300/790/1306 1293/791/1297 -f 1300/790/1306 1294/784/1298 1301/789/1307 -f 1295/792/1299 1301/789/1307 1294/784/1298 -f 1295/792/1299 1198/788/1308 1301/789/1307 -f 1198/788/1308 1295/792/1299 1298/773/1304 -f 1198/788/1308 1298/773/1304 966/787/1309 -f 967/796/1310 966/787/1309 1298/773/1304 -f 1298/773/1304 1296/771/1300 967/796/1310 -f 1297/786/1301 967/796/1310 1296/771/1300 -f 967/796/1310 1297/786/1301 968/794/1311 -f 968/794/1311 1297/786/1301 969/793/1302 -f 1268/776/1312 1272/778/1313 1269/777/1314 -f 705/782/1315 1269/777/1314 1272/778/1313 -f 705/782/1315 1273/778/1316 1269/777/1314 -f 1270/776/1317 1269/777/1314 1273/778/1316 -f 1235/746/1318 1234/745/1319 1267/775/1320 -f 700/779/1321 1267/775/1320 1234/745/1319 -f 700/779/1321 1272/778/1313 1267/775/1320 -f 1273/778/1316 711/779/1322 1290/775/1323 -f 711/779/1322 1274/745/1324 1290/775/1323 -f 1276/746/1325 1290/775/1323 1274/745/1324 -f 1120/653/1102 1105/635/1085 1104/634/1084 -f 1104/634/1084 1118/648/1097 1120/653/1102 -f 1192/699/1326 1302/797/1327 1194/701/897 -f 1303/798/649 1194/701/897 1302/797/1327 -f 1302/797/1327 1304/799/1328 1303/798/649 -f 1305/800/1329 1303/798/649 1304/799/1328 -f 1303/798/649 1305/800/1329 1306/801/1330 -f 1307/802/1331 1306/801/1330 1305/800/1329 -f 1306/801/1330 1307/802/1331 1308/803/1332 -f 1308/803/1332 1307/802/1331 1301/804/1333 -f 1301/804/1333 1198/705/1334 1308/803/1332 -f 1197/703/1335 1308/803/1332 1198/705/1334 -f 1197/703/1335 1195/702/1336 1308/803/1332 -f 1306/801/1330 1308/803/1332 1195/702/1336 -f 1195/702/1336 1194/701/897 1306/801/1330 -f 1303/798/649 1306/801/1330 1194/701/897 -f 1299/805/1337 1300/806/1338 1307/802/1331 -f 1307/802/1331 1300/806/1338 1301/804/1333 -f 1304/799/1328 1302/797/1327 1309/807/1339 -f 1310/808/1340 1309/807/1339 1302/797/1327 -f 1302/797/1327 1192/699/1326 1310/808/1340 -f 1191/697/1341 1310/808/1340 1192/699/1326 -f 1310/808/1340 1191/697/1341 1311/809/1342 -f 1190/695/1343 1311/809/1342 1191/697/1341 -f 1311/809/1342 1190/695/1343 1312/810/1344 -f 1189/693/1345 1312/810/1344 1190/695/1343 -f 1312/810/1344 1313/811/1346 1311/809/1342 -f 1314/812/1346 1311/809/1342 1313/811/1346 -f 1311/809/1342 1314/812/1346 1310/808/1340 -f 1309/807/1339 1310/808/1340 1314/812/1346 -f 1315/813/1347 1316/402/1347 1215/725/1347 -f 1216/814/1347 1215/725/1347 1316/402/1347 -f 1317/723/1348 1318/724/1348 1319/415/1349 -f 1320/724/1350 1319/415/1349 1318/724/1348 -f 1319/415/1349 1320/724/1350 1321/725/1351 -f 1321/725/1351 1320/724/1350 1322/726/1352 -f 1320/724/1350 1323/409/1353 1322/726/1352 -f 1322/726/1352 1323/409/1353 1315/727/1354 -f 1316/405/1354 1315/727/1354 1323/409/1353 -f 1222/404/1355 1223/416/1355 1317/814/1355 -f 1318/725/1355 1317/814/1355 1223/416/1355 -f 1324/815/1356 1325/816/1356 1326/817/1357 -f 1327/818/1358 1326/817/1357 1325/816/1356 -f 1326/817/1357 1327/818/1358 1328/819/1359 -f 1329/820/1360 1328/819/1359 1327/818/1358 -f 1328/819/1359 1329/820/1360 1330/821/1361 -f 1331/822/1361 1330/821/1361 1329/820/1360 -f 1332/823/1362 1333/824/1363 1334/825/1362 -f 1335/826/1364 1334/825/1362 1333/824/1363 -f 1333/824/1363 1336/827/1365 1335/826/1364 -f 1337/828/1366 1335/826/1364 1336/827/1365 -f 1336/827/1365 1338/829/1367 1337/828/1366 -f 1339/830/1367 1337/828/1366 1338/829/1367 -f 1339/831/1368 1338/832/1368 1324/833/1368 -f 1325/834/1368 1324/833/1368 1338/832/1368 -f 1338/829/1369 1336/827/1369 1325/816/1369 -f 1327/818/1369 1325/816/1369 1336/827/1369 -f 1336/827/1369 1333/824/1369 1327/818/1369 -f 1329/820/1369 1327/818/1369 1333/824/1369 -f 1333/824/1369 1332/823/1369 1329/820/1369 -f 1331/822/1369 1329/820/1369 1332/823/1369 -f 1332/832/1370 1334/831/1370 1331/834/1370 -f 1330/833/1370 1331/834/1370 1334/831/1370 -f 1340/668/1154 1341/667/1167 1342/662/1165 -f 1342/662/1165 1343/660/1155 1340/668/1154 -f 1343/660/1155 1342/662/1165 1344/659/1166 -f 1344/659/1166 1345/657/1157 1343/660/1155 -f 1346/658/1156 1343/660/1155 1345/657/1157 -f 1345/657/1157 1347/663/1158 1346/658/1156 -f 1348/664/1159 1346/658/1156 1347/663/1158 -f 1347/663/1158 1349/657/1160 1348/664/1159 -f 1350/658/1161 1348/664/1159 1349/657/1160 -f 1349/657/1160 1351/659/1162 1350/658/1161 -f 1352/660/1163 1350/658/1161 1351/659/1162 -f 1351/659/1162 1353/661/1164 1352/660/1163 -f 1342/662/1165 1352/660/1163 1353/661/1164 -f 1353/661/1164 1344/659/1166 1342/662/1165 -f 1352/660/1163 1342/662/1165 1341/667/1167 -f 1341/667/1167 1354/666/1168 1352/660/1163 -f 1350/658/1161 1352/660/1163 1354/666/1168 -f 1354/666/1168 1355/665/1169 1350/658/1161 -f 1348/664/1159 1350/658/1161 1355/665/1169 -f 1355/665/1169 1356/666/1170 1348/664/1159 -f 1346/658/1156 1348/664/1159 1356/666/1170 -f 1356/666/1170 1357/667/1153 1346/658/1156 -f 1343/660/1155 1346/658/1156 1357/667/1153 -f 1357/667/1153 1340/668/1154 1343/660/1155 -f 1349/739/1229 1347/740/1229 1351/741/1229 -f 1347/740/1229 1344/742/1229 1351/741/1229 -f 1345/743/1229 1344/742/1229 1347/740/1229 -f 1351/741/1229 1344/742/1229 1353/744/1229 -f 1358/731/1119 1359/374/1371 1360/835/1372 -f 1361/392/1371 1360/835/1372 1359/374/1371 -f 1360/731/1373 1361/374/1374 1362/835/838 -f 1363/392/1375 1362/835/838 1361/374/1374 -f 1362/731/1376 1363/374/1377 1364/835/1376 -f 1365/392/1378 1364/835/1376 1363/374/1377 -f 1364/731/1379 1365/374/1380 1358/835/1379 -f 1359/392/1381 1358/835/1379 1365/374/1380 -f 1366/392/1382 1367/374/1382 1368/835/1383 -f 1369/731/1119 1368/835/1383 1367/374/1382 -f 1370/392/1384 1366/374/1384 1371/835/867 -f 1368/731/867 1371/835/867 1366/374/1384 -f 1372/392/1385 1370/374/1385 1373/835/1386 -f 1371/731/1376 1373/835/1386 1370/374/1385 -f 1367/392/1387 1372/374/1387 1369/835/1388 -f 1373/731/1389 1369/835/1388 1372/374/1387 -f 904/836/1390 917/837/1390 906/836/1390 -f 917/837/1390 898/836/1390 906/836/1390 -f 898/836/1390 902/836/1390 906/836/1390 -f 906/836/1390 902/836/1390 910/836/1390 -f 918/835/1390 826/731/1390 913/835/1390 -f 913/835/1390 826/731/1390 914/393/1390 -f 914/393/1390 826/731/1390 845/838/1390 -f 916/837/1390 914/393/1390 845/838/1390 -f 847/837/1390 916/837/1390 845/838/1390 -f 916/837/1390 847/837/1390 917/837/1390 -f 847/837/1390 898/836/1390 917/837/1390 -f 849/837/1390 898/836/1390 847/837/1390 -f 915/839/1390 914/393/1390 916/837/1390 -f 912/840/1390 913/835/1390 914/393/1390 -f 1374/550/1391 1375/841/1391 1376/550/1391 -f 1377/841/1391 1376/550/1391 1375/841/1391 -f 1376/415/1392 1377/724/1392 1378/416/1392 -f 1379/404/1392 1378/416/1392 1377/724/1392 -f 1378/416/1393 1379/404/1393 1380/727/1393 -f 1381/405/1393 1380/727/1393 1379/404/1393 -f 1382/415/1394 1383/724/1394 1384/725/1394 -f 1385/814/1394 1384/725/1394 1383/724/1394 -f 1384/725/1395 1385/814/1395 1374/727/1395 -f 1375/405/1395 1374/727/1395 1385/814/1395 -f 1377/842/1396 1375/842/1396 1379/726/1396 -f 1385/727/1396 1379/726/1396 1375/842/1396 -f 1385/727/1396 1383/405/1396 1379/726/1396 -f 1381/404/1396 1379/726/1396 1383/405/1396 -f 1380/404/1397 1382/405/1397 1378/726/1397 -f 1384/727/1397 1378/726/1397 1382/405/1397 -f 1384/727/1397 1374/842/1397 1378/726/1397 -f 1376/843/1397 1378/726/1397 1374/842/1397 -f 734/414/726 1386/431/1398 732/426/724 -f 1387/430/1399 732/426/724 1386/431/1398 -f 732/426/724 1387/430/1399 736/427/728 -f 1388/429/1400 736/427/728 1387/430/1399 -f 736/427/728 1388/429/1400 738/422/730 -f 741/428/733 738/422/730 1388/429/1400 -f 741/428/733 1388/429/1400 1389/844/1401 -f 741/428/733 1389/844/1401 742/429/734 -f 743/430/735 742/429/734 1389/844/1401 -f 1389/844/1401 1390/845/1402 743/430/735 -f 744/431/736 743/430/735 1390/845/1402 -f 744/431/736 1390/845/1402 745/432/737 -f 1391/846/1403 745/432/737 1390/845/1402 -f 1391/846/1403 773/450/765 745/432/737 -f 1391/846/1403 768/432/760 773/450/765 -f 767/447/759 773/450/765 768/432/760 -f 1387/430/1399 1389/844/1401 1388/429/1400 -f 1389/844/1401 1387/430/1399 1390/845/1402 -f 1386/431/1398 1390/845/1402 1387/430/1399 -f 1386/431/1398 768/432/760 1390/845/1402 -f 1386/431/1398 734/414/726 768/432/760 -f 1391/846/1403 1390/845/1402 768/432/760 -f 706/408/1404 721/417/1404 707/406/1404 -f 752/417/1404 706/408/1404 704/406/1404 -f 693/847/1405 695/848/1405 711/849/1405 -f 1274/850/1406 711/849/1406 695/848/1406 -f 858/851/1407 1392/852/1408 1150/853/1409 -f 858/851/1407 860/854/1410 1392/852/1408 -f 1393/855/1411 1392/852/1408 860/854/1410 -f 860/854/1410 870/856/1412 1393/855/1411 -f 1394/857/1413 1393/855/1411 870/856/1412 -f 1393/855/1411 1394/857/1413 1395/858/1205 -f 1396/859/1414 1395/858/1205 1394/857/1413 -f 1396/859/1414 1397/860/1415 1395/858/1205 -f 1398/861/1416 1395/858/1205 1397/860/1415 -f 1397/860/1415 1399/862/1417 1398/861/1416 -f 1400/863/1416 1398/861/1416 1399/862/1417 -f 1399/862/1417 1401/864/658 1400/863/1416 -f 1402/865/1418 1400/863/1416 1401/864/658 -f 1401/864/658 1161/866/1419 1402/865/1418 -f 1160/867/1420 1402/865/1418 1161/866/1419 -f 1402/865/1418 1160/867/1420 1157/868/1421 -f 1157/868/1421 1403/869/1422 1402/865/1418 -f 1403/869/1422 1157/868/1421 1156/870/1423 -f 1395/858/1205 1398/861/1416 1404/871/1424 -f 1405/872/1425 1404/871/1424 1398/861/1416 -f 1398/861/1416 1400/863/1416 1405/872/1425 -f 1403/869/1422 1405/872/1425 1400/863/1416 -f 1400/863/1416 1402/865/1418 1403/869/1422 -f 1156/870/1423 1154/873/1426 1403/869/1422 -f 1405/872/1425 1403/869/1422 1154/873/1426 -f 1154/873/1426 1152/874/1427 1405/872/1425 -f 1404/871/1424 1405/872/1425 1152/874/1427 -f 1152/874/1427 1150/853/1409 1404/871/1424 -f 1392/852/1408 1404/871/1424 1150/853/1409 -f 1404/871/1424 1392/852/1408 1395/858/1205 -f 1393/855/1411 1395/858/1205 1392/852/1408 -f 884/651/1428 1148/675/1428 872/875/1428 -f 1159/686/1428 872/875/1428 1148/675/1428 -f 949/555/1429 948/557/1430 1077/583/1431 -f 1406/876/1432 1077/583/1431 948/557/1430 -f 1406/876/1432 948/557/1430 1009/583/1433 -f 946/555/1434 1009/583/1433 948/557/1430 -f 1200/877/1435 1275/877/1435 695/878/1435 -f 1274/878/1436 695/878/1436 1275/877/1436 -f 870/856/1437 872/879/1437 1394/857/1437 -f 1159/857/1438 1394/857/1438 872/879/1438 -f 1011/830/1439 1013/829/1439 1010/880/1439 -f 1013/829/1439 1021/881/1439 1010/880/1439 -f 1017/882/1439 1021/881/1439 1013/829/1439 -f 1019/883/1439 1021/881/1439 1017/882/1439 -f 1015/884/1440 1017/882/1440 1013/829/1440 -f 1022/885/1441 1024/886/1441 1021/881/1441 -f 1024/886/1441 1068/887/1441 1021/881/1441 -f 1068/887/1441 1072/888/1441 1021/881/1441 -f 1070/889/1441 1072/888/1441 1068/887/1441 -f 1026/890/1441 1068/887/1441 1024/886/1441 -f 1021/881/1442 1072/888/1442 1010/880/1442 -f 1407/891/1443 1408/892/1444 1409/893/1445 -f 1407/891/1443 1409/893/1445 1110/866/1446 -f 1410/864/1447 1110/866/1446 1409/893/1445 -f 1410/864/1447 1411/865/1448 1110/866/1446 -f 1411/865/1448 1410/864/1447 1412/894/1449 -f 1412/894/1449 1413/869/1450 1411/865/1448 -f 1413/869/1450 1412/894/1449 1414/872/1451 -f 1414/872/1451 1115/873/1452 1413/869/1450 -f 1115/873/1452 1414/872/1451 1116/874/1453 -f 1415/871/1454 1116/874/1453 1414/872/1451 -f 1116/874/1453 1415/871/1454 1117/853/1455 -f 1416/852/1456 1117/853/1455 1415/871/1454 -f 1416/852/1456 836/851/1457 1117/853/1455 -f 836/851/1457 1416/852/1456 833/854/1458 -f 1417/855/1459 833/854/1458 1416/852/1456 -f 833/854/1458 1417/855/1459 832/856/1460 -f 1418/857/1461 832/856/1460 1417/855/1459 -f 1417/855/1459 1419/858/733 1418/857/1461 -f 1420/861/1462 1414/872/1451 1412/894/1449 -f 1414/872/1451 1420/861/1462 1415/871/1454 -f 1419/858/733 1415/871/1454 1420/861/1462 -f 1415/871/1454 1419/858/733 1416/852/1456 -f 1417/855/1459 1416/852/1456 1419/858/733 -f 1421/859/1302 1418/857/1461 1419/858/733 -f 1421/859/1302 1419/858/733 1422/860/1463 -f 1420/861/1462 1422/860/1463 1419/858/733 -f 1422/860/1463 1420/861/1462 1423/895/1464 -f 1412/894/1449 1423/895/1464 1420/861/1462 -f 1423/895/1464 1412/894/1449 1410/864/1447 -f 1114/870/1465 1413/869/1450 1115/873/1452 -f 1112/868/1466 1413/869/1450 1114/870/1465 -f 1112/868/1466 1411/865/1448 1413/869/1450 -f 1111/867/1467 1411/865/1448 1112/868/1466 -f 1111/867/1467 1110/866/1446 1411/865/1448 -f 1110/640/1090 1108/638/1088 1407/896/1468 -f 1408/897/1469 1407/896/1468 1108/638/1088 -f 991/692/1470 697/898/1470 1189/693/1470 -f 845/838/1390 826/731/1390 828/394/1390 -f 826/731/1390 827/899/1390 828/394/1390 -f 1007/900/766 1010/900/766 1073/901/766 -f 1072/901/766 1073/901/766 1010/900/766 -f 1234/902/1471 1189/903/1471 700/904/1471 -f 697/905/1472 700/904/1472 1189/903/1472 -f 1123/656/1473 1119/652/1473 838/875/1473 -f 840/651/1473 838/875/1473 1119/652/1473 -f 1424/906/1474 1425/907/1474 1426/908/1474 -f 1426/908/1475 1425/907/1475 1427/541/1475 -f 1425/907/1474 1428/909/1474 1427/541/1474 -f 1428/909/1475 1429/910/1475 1427/541/1475 -f 1313/911/1476 1312/912/1476 1238/913/1476 -f 1236/914/1476 1238/913/1476 1312/912/1476 -f 1234/914/1477 1236/914/1477 1189/912/1477 -f 1312/912/1478 1189/912/1478 1236/914/1478 -f 838/879/1479 832/856/1479 1123/857/1479 -f 1418/857/1480 1123/857/1480 832/856/1480 -f 1216/915/1442 1316/916/1442 1218/917/1442 -f 1323/918/1474 1320/919/1474 1316/916/1474 -f 1316/916/1475 1320/919/1475 1218/917/1475 -f 1223/920/1442 1221/921/1442 1318/922/1442 -f 1318/922/1439 1221/921/1439 1320/919/1439 -f 1320/919/1475 1221/921/1475 1218/917/1475 -f 1430/814/1481 1431/405/1481 1432/725/1481 -f 1433/406/1481 1432/725/1481 1431/405/1481 -f 1434/438/1482 1435/923/1482 1436/924/1482 -f 1437/925/1482 1436/924/1482 1435/923/1482 -f 1438/926/1483 1436/924/1483 1439/927/1483 -f 1437/925/1483 1439/927/1483 1436/924/1483 -f 1440/928/1484 1441/929/1484 1442/930/1484 -f 1441/929/1485 1438/926/1485 1442/930/1485 -f 1442/930/1485 1438/926/1485 1439/927/1485 -f 1007/931/1486 1443/931/1487 1006/931/1488 -f 1443/931/1487 1007/931/1486 1444/932/1489 -f 1073/932/1490 1444/932/1489 1007/931/1486 -f 1444/932/1489 1073/932/1490 1445/901/1491 -f 1075/901/1492 1445/901/1491 1073/932/1490 -f 1445/901/1491 1075/901/1492 1446/901/1493 -f 1077/901/1494 1446/901/1493 1075/901/1492 -f 1447/901/1495 1446/901/1493 1077/901/1494 -f 1406/901/1496 1447/901/1495 1077/901/1494 -f 1009/901/1497 1447/901/1495 1406/901/1496 -f 1447/901/1495 1009/901/1497 1448/931/1498 -f 1006/931/1488 1448/931/1498 1009/901/1497 -f 1448/931/1498 1006/931/1488 1443/931/1487 -f 1443/814/1499 1429/725/1499 1448/724/1499 -f 1428/415/1499 1448/724/1499 1429/725/1499 -f 1444/723/1500 1427/724/1500 1443/727/1500 -f 1429/405/1500 1443/727/1500 1427/724/1500 -f 1445/813/1501 1426/402/1501 1444/416/1501 -f 1427/404/1501 1444/416/1501 1426/402/1501 -f 1448/723/1502 1428/724/1502 1447/813/1503 -f 1425/402/1504 1447/813/1503 1428/724/1502 -f 1447/813/1503 1425/402/1504 1446/726/1505 -f 1424/404/1352 1446/726/1505 1425/402/1504 -f 1446/726/1505 1424/404/1352 1445/727/1506 -f 1426/409/1506 1445/727/1506 1424/404/1352 -f 706/408/1507 1219/417/1507 721/417/1508 -f 1219/417/1507 706/408/1507 1217/417/1509 -f 752/417/1510 1217/417/1509 706/408/1507 -f 1217/417/1509 752/417/1510 1215/419/1511 -f 753/419/1512 1215/419/1511 752/417/1510 -f 1215/419/1511 753/419/1512 1315/421/1513 -f 739/421/1514 1315/421/1513 753/419/1512 -f 1315/421/1513 739/421/1514 1322/423/1515 -f 740/423/1516 1322/423/1515 739/421/1514 -f 1322/423/1515 740/423/1516 1321/423/1517 -f 728/424/1517 1321/423/1517 740/423/1516 -f 1321/423/1517 728/424/1517 1319/423/1518 -f 727/423/1519 1319/423/1518 728/424/1517 -f 1319/423/1518 727/423/1519 1317/421/1520 -f 725/421/1521 1317/421/1520 727/423/1519 -f 1317/421/1520 725/421/1521 1222/419/1522 -f 723/419/1523 1222/419/1522 725/421/1521 -f 1222/419/1522 723/419/1523 1220/417/1524 -f 721/417/1508 1220/417/1524 723/419/1523 -f 1220/417/1524 721/417/1508 1219/417/1507 -f 1449/668/1154 1450/667/1167 1451/662/1165 -f 1451/662/1165 1452/660/1155 1449/668/1154 -f 1452/660/1155 1451/662/1165 1453/659/1166 -f 1453/659/1166 1454/657/1157 1452/660/1155 -f 1455/658/1156 1452/660/1155 1454/657/1157 -f 1454/657/1157 1456/663/1158 1455/658/1156 -f 1457/664/1159 1455/658/1156 1456/663/1158 -f 1456/663/1158 1458/657/1160 1457/664/1159 -f 1459/658/1161 1457/664/1159 1458/657/1160 -f 1458/657/1160 1460/659/1162 1459/658/1161 -f 1461/660/1163 1459/658/1161 1460/659/1162 -f 1460/659/1162 1462/661/1164 1461/660/1163 -f 1451/662/1165 1461/660/1163 1462/661/1164 -f 1462/661/1164 1453/659/1166 1451/662/1165 -f 1461/660/1163 1451/662/1165 1450/667/1167 -f 1450/667/1167 1463/666/1168 1461/660/1163 -f 1459/658/1161 1461/660/1163 1463/666/1168 -f 1463/666/1168 1464/665/1169 1459/658/1161 -f 1457/664/1159 1459/658/1161 1464/665/1169 -f 1464/665/1169 1465/666/1170 1457/664/1159 -f 1455/658/1156 1457/664/1159 1465/666/1170 -f 1465/666/1170 1466/667/1153 1455/658/1156 -f 1452/660/1155 1455/658/1156 1466/667/1153 -f 1466/667/1153 1449/668/1154 1452/660/1155 -f 1458/739/1229 1456/740/1229 1460/741/1229 -f 1456/740/1229 1453/742/1229 1460/741/1229 -f 1454/743/1229 1453/742/1229 1456/740/1229 -f 1460/741/1229 1453/742/1229 1462/744/1229 -f 1467/668/1154 1468/667/1167 1469/662/1165 -f 1469/662/1165 1470/660/1155 1467/668/1154 -f 1470/660/1155 1469/662/1165 1471/659/1166 -f 1471/659/1166 1472/657/1157 1470/660/1155 -f 1473/658/1156 1470/660/1155 1472/657/1157 -f 1472/657/1157 1474/663/1158 1473/658/1156 -f 1475/664/1159 1473/658/1156 1474/663/1158 -f 1474/663/1158 1476/657/1160 1475/664/1159 -f 1477/658/1161 1475/664/1159 1476/657/1160 -f 1476/657/1160 1478/659/1162 1477/658/1161 -f 1479/660/1163 1477/658/1161 1478/659/1162 -f 1478/659/1162 1480/661/1164 1479/660/1163 -f 1469/662/1165 1479/660/1163 1480/661/1164 -f 1480/661/1164 1471/659/1166 1469/662/1165 -f 1479/660/1163 1469/662/1165 1468/667/1167 -f 1468/667/1167 1481/666/1168 1479/660/1163 -f 1477/658/1161 1479/660/1163 1481/666/1168 -f 1481/666/1168 1482/665/1169 1477/658/1161 -f 1475/664/1159 1477/658/1161 1482/665/1169 -f 1482/665/1169 1483/666/1170 1475/664/1159 -f 1473/658/1156 1475/664/1159 1483/666/1170 -f 1483/666/1170 1484/667/1153 1473/658/1156 -f 1470/660/1155 1473/658/1156 1484/667/1153 -f 1484/667/1153 1467/668/1154 1470/660/1155 -f 1476/739/1229 1474/740/1229 1478/741/1229 -f 1474/740/1229 1471/742/1229 1478/741/1229 -f 1472/743/1229 1471/742/1229 1474/740/1229 -f 1478/741/1229 1471/742/1229 1480/744/1229 -f 1485/668/1154 1486/667/1167 1487/662/1165 -f 1487/662/1165 1488/660/1155 1485/668/1154 -f 1488/660/1155 1487/662/1165 1489/659/1166 -f 1489/659/1166 1490/657/1157 1488/660/1155 -f 1491/658/1156 1488/660/1155 1490/657/1157 -f 1490/657/1157 1492/663/1158 1491/658/1156 -f 1493/664/1159 1491/658/1156 1492/663/1158 -f 1492/663/1158 1494/657/1160 1493/664/1159 -f 1495/658/1161 1493/664/1159 1494/657/1160 -f 1494/657/1160 1496/659/1162 1495/658/1161 -f 1497/660/1163 1495/658/1161 1496/659/1162 -f 1496/659/1162 1498/661/1164 1497/660/1163 -f 1487/662/1165 1497/660/1163 1498/661/1164 -f 1498/661/1164 1489/659/1166 1487/662/1165 -f 1497/660/1163 1487/662/1165 1486/667/1167 -f 1486/667/1167 1499/666/1168 1497/660/1163 -f 1495/658/1161 1497/660/1163 1499/666/1168 -f 1499/666/1168 1500/665/1169 1495/658/1161 -f 1493/664/1159 1495/658/1161 1500/665/1169 -f 1500/665/1169 1501/666/1170 1493/664/1159 -f 1491/658/1156 1493/664/1159 1501/666/1170 -f 1501/666/1170 1502/667/1153 1491/658/1156 -f 1488/660/1155 1491/658/1156 1502/667/1153 -f 1502/667/1153 1485/668/1154 1488/660/1155 -f 1494/739/1229 1492/740/1229 1496/741/1229 -f 1492/740/1229 1489/742/1229 1496/741/1229 -f 1490/743/1229 1489/742/1229 1492/740/1229 -f 1496/741/1229 1489/742/1229 1498/744/1229 -f 1503/668/1154 1504/667/1167 1505/662/1165 -f 1505/662/1165 1506/660/1155 1503/668/1154 -f 1506/660/1155 1505/662/1165 1507/659/1166 -f 1507/659/1166 1508/657/1157 1506/660/1155 -f 1509/658/1156 1506/660/1155 1508/657/1157 -f 1508/657/1157 1510/663/1158 1509/658/1156 -f 1511/664/1159 1509/658/1156 1510/663/1158 -f 1510/663/1158 1512/657/1160 1511/664/1159 -f 1513/658/1161 1511/664/1159 1512/657/1160 -f 1512/657/1160 1514/659/1162 1513/658/1161 -f 1515/660/1163 1513/658/1161 1514/659/1162 -f 1514/659/1162 1516/661/1164 1515/660/1163 -f 1505/662/1165 1515/660/1163 1516/661/1164 -f 1516/661/1164 1507/659/1166 1505/662/1165 -f 1515/660/1163 1505/662/1165 1504/667/1167 -f 1504/667/1167 1517/666/1168 1515/660/1163 -f 1513/658/1161 1515/660/1163 1517/666/1168 -f 1517/666/1168 1518/665/1169 1513/658/1161 -f 1511/664/1159 1513/658/1161 1518/665/1169 -f 1518/665/1169 1519/666/1170 1511/664/1159 -f 1509/658/1156 1511/664/1159 1519/666/1170 -f 1519/666/1170 1520/667/1153 1509/658/1156 -f 1506/660/1155 1509/658/1156 1520/667/1153 -f 1520/667/1153 1503/668/1154 1506/660/1155 -f 1512/739/1229 1510/740/1229 1514/741/1229 -f 1510/740/1229 1507/742/1229 1514/741/1229 -f 1508/743/1229 1507/742/1229 1510/740/1229 -f 1514/741/1229 1507/742/1229 1516/744/1229 -f 1521/822/1525 1522/820/1526 1523/821/1525 -f 1524/819/1527 1523/821/1525 1522/820/1526 -f 1522/820/1526 1525/818/1528 1524/819/1527 -f 1526/817/1529 1524/819/1527 1525/818/1528 -f 1525/818/1528 1527/816/1530 1526/817/1529 -f 1528/815/1530 1526/817/1529 1527/816/1530 -f 1529/830/1531 1530/829/1531 1531/828/1532 -f 1532/827/1533 1531/828/1532 1530/829/1531 -f 1531/828/1532 1532/827/1533 1533/826/1534 -f 1534/824/1535 1533/826/1534 1532/827/1533 -f 1533/826/1534 1534/824/1535 1535/825/1536 -f 1536/823/1536 1535/825/1536 1534/824/1535 -f 1527/833/1537 1530/831/1537 1528/834/1537 -f 1529/832/1537 1528/834/1537 1530/831/1537 -f 1521/822/1538 1536/823/1538 1522/820/1538 -f 1534/824/1538 1522/820/1538 1536/823/1538 -f 1522/820/1538 1534/824/1538 1525/818/1538 -f 1532/827/1538 1525/818/1538 1534/824/1538 -f 1525/818/1538 1532/827/1538 1527/816/1538 -f 1530/829/1538 1527/816/1538 1532/827/1538 -f 1523/834/1539 1535/832/1539 1521/833/1539 -f 1536/831/1539 1521/833/1539 1535/832/1539 -f 1537/667/1121 1538/660/1112 1539/668/1120 -f 1540/662/1110 1539/668/1120 1538/660/1112 -f 1539/668/1120 1540/662/1110 1541/667/1119 -f 1542/660/1108 1541/667/1119 1540/662/1110 -f 1541/667/1119 1542/660/1108 1543/666/1118 -f 1544/658/1106 1543/666/1118 1542/660/1108 -f 1543/666/1118 1544/658/1106 1545/665/1117 -f 1546/664/1116 1545/665/1117 1544/658/1106 -f 1545/665/1117 1546/664/1116 1547/666/1122 -f 1548/658/1114 1547/666/1122 1546/664/1116 -f 1547/666/1122 1548/658/1114 1537/667/1121 -f 1538/660/1112 1537/667/1121 1548/658/1114 -f 1548/658/1114 1549/657/1113 1538/660/1112 -f 1550/659/1111 1538/660/1112 1549/657/1113 -f 1538/660/1112 1550/659/1111 1540/662/1110 -f 1551/661/1109 1540/662/1110 1550/659/1111 -f 1540/662/1110 1551/661/1109 1542/660/1108 -f 1552/659/1107 1542/660/1108 1551/661/1109 -f 1542/660/1108 1552/659/1107 1544/658/1106 -f 1553/657/1105 1544/658/1106 1552/659/1107 -f 1544/658/1106 1553/657/1105 1546/664/1116 -f 1554/663/1115 1546/664/1116 1553/657/1105 -f 1546/664/1116 1554/663/1115 1548/658/1114 -f 1549/657/1113 1548/658/1114 1554/663/1115 -f 1549/743/1230 1554/740/1230 1550/742/1230 -f 1554/740/1230 1552/741/1230 1550/742/1230 -f 1553/739/1230 1552/741/1230 1554/740/1230 -f 1550/742/1230 1552/741/1230 1551/744/1230 -f 1555/667/1121 1556/660/1112 1557/668/1120 -f 1558/662/1110 1557/668/1120 1556/660/1112 -f 1557/668/1120 1558/662/1110 1559/667/1119 -f 1560/660/1108 1559/667/1119 1558/662/1110 -f 1559/667/1119 1560/660/1108 1561/666/1118 -f 1562/658/1106 1561/666/1118 1560/660/1108 -f 1561/666/1118 1562/658/1106 1563/665/1117 -f 1564/664/1116 1563/665/1117 1562/658/1106 -f 1563/665/1117 1564/664/1116 1565/666/1122 -f 1566/658/1114 1565/666/1122 1564/664/1116 -f 1565/666/1122 1566/658/1114 1555/667/1121 -f 1556/660/1112 1555/667/1121 1566/658/1114 -f 1566/658/1114 1567/657/1113 1556/660/1112 -f 1568/659/1111 1556/660/1112 1567/657/1113 -f 1556/660/1112 1568/659/1111 1558/662/1110 -f 1569/661/1109 1558/662/1110 1568/659/1111 -f 1558/662/1110 1569/661/1109 1560/660/1108 -f 1570/659/1107 1560/660/1108 1569/661/1109 -f 1560/660/1108 1570/659/1107 1562/658/1106 -f 1571/657/1105 1562/658/1106 1570/659/1107 -f 1562/658/1106 1571/657/1105 1564/664/1116 -f 1572/663/1115 1564/664/1116 1571/657/1105 -f 1564/664/1116 1572/663/1115 1566/658/1114 -f 1567/657/1113 1566/658/1114 1572/663/1115 -f 1567/743/1230 1572/740/1230 1568/742/1230 -f 1572/740/1230 1570/741/1230 1568/742/1230 -f 1571/739/1230 1570/741/1230 1572/740/1230 -f 1568/742/1230 1570/741/1230 1569/744/1230 -f 1573/667/1121 1574/660/1112 1575/668/1120 -f 1576/662/1110 1575/668/1120 1574/660/1112 -f 1575/668/1120 1576/662/1110 1577/667/1119 -f 1578/660/1108 1577/667/1119 1576/662/1110 -f 1577/667/1119 1578/660/1108 1579/666/1118 -f 1580/658/1106 1579/666/1118 1578/660/1108 -f 1579/666/1118 1580/658/1106 1581/665/1117 -f 1582/664/1116 1581/665/1117 1580/658/1106 -f 1581/665/1117 1582/664/1116 1583/666/1122 -f 1584/658/1114 1583/666/1122 1582/664/1116 -f 1583/666/1122 1584/658/1114 1573/667/1121 -f 1574/660/1112 1573/667/1121 1584/658/1114 -f 1584/658/1114 1585/657/1113 1574/660/1112 -f 1586/659/1111 1574/660/1112 1585/657/1113 -f 1574/660/1112 1586/659/1111 1576/662/1110 -f 1587/661/1109 1576/662/1110 1586/659/1111 -f 1576/662/1110 1587/661/1109 1578/660/1108 -f 1588/659/1107 1578/660/1108 1587/661/1109 -f 1578/660/1108 1588/659/1107 1580/658/1106 -f 1589/657/1105 1580/658/1106 1588/659/1107 -f 1580/658/1106 1589/657/1105 1582/664/1116 -f 1590/663/1115 1582/664/1116 1589/657/1105 -f 1582/664/1116 1590/663/1115 1584/658/1114 -f 1585/657/1113 1584/658/1114 1590/663/1115 -f 1585/743/1230 1590/740/1230 1586/742/1230 -f 1590/740/1230 1588/741/1230 1586/742/1230 -f 1589/739/1230 1588/741/1230 1590/740/1230 -f 1586/742/1230 1588/741/1230 1587/744/1230 -f 1591/667/1121 1592/660/1112 1593/668/1120 -f 1594/662/1110 1593/668/1120 1592/660/1112 -f 1593/668/1120 1594/662/1110 1595/667/1119 -f 1596/660/1108 1595/667/1119 1594/662/1110 -f 1595/667/1119 1596/660/1108 1597/666/1118 -f 1598/658/1106 1597/666/1118 1596/660/1108 -f 1597/666/1118 1598/658/1106 1599/665/1117 -f 1600/664/1116 1599/665/1117 1598/658/1106 -f 1599/665/1117 1600/664/1116 1601/666/1122 -f 1602/658/1114 1601/666/1122 1600/664/1116 -f 1601/666/1122 1602/658/1114 1591/667/1121 -f 1592/660/1112 1591/667/1121 1602/658/1114 -f 1602/658/1114 1603/657/1113 1592/660/1112 -f 1604/659/1111 1592/660/1112 1603/657/1113 -f 1592/660/1112 1604/659/1111 1594/662/1110 -f 1605/661/1109 1594/662/1110 1604/659/1111 -f 1594/662/1110 1605/661/1109 1596/660/1108 -f 1606/659/1107 1596/660/1108 1605/661/1109 -f 1596/660/1108 1606/659/1107 1598/658/1106 -f 1607/657/1105 1598/658/1106 1606/659/1107 -f 1598/658/1106 1607/657/1105 1600/664/1116 -f 1608/663/1115 1600/664/1116 1607/657/1105 -f 1600/664/1116 1608/663/1115 1602/658/1114 -f 1603/657/1113 1602/658/1114 1608/663/1115 -f 1603/743/1230 1608/740/1230 1604/742/1230 -f 1608/740/1230 1606/741/1230 1604/742/1230 -f 1607/739/1230 1606/741/1230 1608/740/1230 -f 1604/742/1230 1606/741/1230 1605/744/1230 -f 1609/667/1121 1610/660/1112 1611/668/1120 -f 1612/662/1110 1611/668/1120 1610/660/1112 -f 1611/668/1120 1612/662/1110 1613/667/1119 -f 1614/660/1108 1613/667/1119 1612/662/1110 -f 1613/667/1119 1614/660/1108 1615/666/1118 -f 1616/658/1106 1615/666/1118 1614/660/1108 -f 1615/666/1118 1616/658/1106 1617/665/1117 -f 1618/664/1116 1617/665/1117 1616/658/1106 -f 1617/665/1117 1618/664/1116 1619/666/1122 -f 1620/658/1114 1619/666/1122 1618/664/1116 -f 1619/666/1122 1620/658/1114 1609/667/1121 -f 1610/660/1112 1609/667/1121 1620/658/1114 -f 1620/658/1114 1621/657/1113 1610/660/1112 -f 1622/659/1111 1610/660/1112 1621/657/1113 -f 1610/660/1112 1622/659/1111 1612/662/1110 -f 1623/661/1109 1612/662/1110 1622/659/1111 -f 1612/662/1110 1623/661/1109 1614/660/1108 -f 1624/659/1107 1614/660/1108 1623/661/1109 -f 1614/660/1108 1624/659/1107 1616/658/1106 -f 1625/657/1105 1616/658/1106 1624/659/1107 -f 1616/658/1106 1625/657/1105 1618/664/1116 -f 1626/663/1115 1618/664/1116 1625/657/1105 -f 1618/664/1116 1626/663/1115 1620/658/1114 -f 1621/657/1113 1620/658/1114 1626/663/1115 -f 1621/743/1230 1626/740/1230 1622/742/1230 -f 1626/740/1230 1624/741/1230 1622/742/1230 -f 1625/739/1230 1624/741/1230 1626/740/1230 -f 1622/742/1230 1624/741/1230 1623/744/1230 -f 1102/620/1540 1627/933/1540 1055/621/1540 -f 1628/933/1541 1055/621/1541 1627/933/1541 -f 1101/619/1542 1629/933/1542 1102/620/1542 -f 1627/933/1543 1102/620/1543 1629/933/1543 -f 998/572/1544 1630/933/1544 1101/619/1544 -f 1629/933/1545 1101/619/1545 1630/933/1545 -f 997/571/1546 1631/933/1546 998/572/1546 -f 1630/933/1547 998/572/1547 1631/933/1547 -f 996/570/1548 1632/934/1548 997/571/1548 -f 1631/933/1549 997/571/1549 1632/934/1549 -f 923/534/1550 1633/934/1550 996/570/1550 -f 1632/934/1551 996/570/1551 1633/934/1551 -f 921/532/1552 1634/934/1552 923/534/1552 -f 1633/934/1553 923/534/1553 1634/934/1553 -f 919/530/1554 1635/935/1554 921/532/1554 -f 1634/934/1552 921/532/1552 1635/935/1552 -f 792/466/1555 1636/935/1555 919/530/1555 -f 1635/935/1556 919/530/1556 1636/935/1556 -f 793/467/1557 1637/935/1557 792/466/1557 -f 1636/935/1558 792/466/1558 1637/935/1558 -f 756/437/1559 1638/935/1559 793/467/1559 -f 1637/935/1560 793/467/1560 1638/935/1560 -f 983/569/1561 1639/935/1561 756/437/1561 -f 1638/935/1562 756/437/1562 1639/935/1562 -f 982/437/1563 1640/935/1563 983/569/1563 -f 1639/935/1564 983/569/1564 1640/935/1564 -f 981/467/1066 1641/935/1066 982/437/1066 -f 1640/935/1565 982/437/1565 1641/935/1565 -f 979/466/1566 1642/935/1566 981/467/1566 -f 1641/935/1567 981/467/1567 1642/935/1567 -f 977/530/1568 1643/935/1568 979/466/1568 -f 1642/935/1569 979/466/1569 1643/935/1569 -f 975/532/1570 1644/934/1570 977/530/1570 -f 1643/935/1571 977/530/1571 1644/934/1571 -f 963/534/1572 1645/934/1572 975/532/1572 -f 1644/934/1573 975/532/1573 1645/934/1573 -f 1067/570/1574 1646/934/1574 963/534/1574 -f 1645/934/1575 963/534/1575 1646/934/1575 -f 1066/571/1576 1647/933/1576 1067/570/1576 -f 1646/934/1577 1067/570/1577 1647/933/1577 -f 1064/572/1578 1648/933/1578 1066/571/1578 -f 1647/933/1579 1066/571/1579 1648/933/1579 -f 1053/619/1580 1649/933/1580 1064/572/1580 -f 1648/933/1581 1064/572/1581 1649/933/1581 -f 1054/620/1582 1650/933/1582 1053/619/1582 -f 1649/933/1583 1053/619/1583 1650/933/1583 -f 1055/621/1584 1628/933/1584 1054/620/1584 -f 1650/933/1585 1054/620/1585 1628/933/1585 -f 1627/936/1586 1441/937/1586 1628/938/1586 -f 1440/938/1587 1628/938/1587 1441/937/1587 -f 1629/937/1588 1441/937/1588 1627/936/1588 -f 1630/939/1589 1438/940/1589 1629/937/1589 -f 1441/937/1590 1629/937/1590 1438/940/1590 -f 1631/939/1591 1438/940/1591 1630/939/1591 -f 1632/941/1592 1436/942/1592 1631/943/1592 -f 1438/944/1593 1631/943/1593 1436/942/1593 -f 1633/945/1594 1434/946/1594 1632/941/1594 -f 1436/942/1595 1632/941/1595 1434/946/1595 -f 1634/947/961 1651/948/961 1633/945/961 -f 1434/946/961 1633/945/961 1651/948/961 -f 1635/949/1596 1430/950/1596 1634/947/1596 -f 1651/948/1597 1634/947/1597 1430/950/1597 -f 1431/951/1598 1430/950/1598 1635/949/1598 -f 1642/939/1599 1433/952/1599 1641/936/1599 -f 1641/936/1600 1433/952/1600 1640/953/1600 -f 1640/953/1601 1433/952/1601 1639/954/1601 -f 1639/954/1602 1433/952/1602 1638/955/1602 -f 1638/955/1603 1433/952/1603 1637/947/1603 -f 1433/952/1604 1431/956/1604 1637/947/1604 -f 1637/947/1605 1431/956/1605 1636/957/1605 -f 1643/958/1606 1433/952/1606 1642/939/1606 -f 1644/947/1607 1652/948/1607 1643/949/1607 -f 1432/950/1608 1643/949/1608 1652/948/1608 -f 1645/959/1609 1435/946/1609 1644/947/1609 -f 1652/948/1609 1644/947/1609 1435/946/1609 -f 1646/941/1610 1437/942/1610 1645/959/1610 -f 1435/946/1611 1645/959/1611 1437/942/1611 -f 1647/943/1612 1439/944/1612 1646/941/1612 -f 1437/942/1613 1646/941/1613 1439/944/1613 -f 1648/960/1614 1439/961/1614 1647/960/1614 -f 1649/960/1615 1442/957/1615 1648/960/1615 -f 1439/961/1616 1648/960/1616 1442/957/1616 -f 1650/962/1617 1442/957/1617 1649/960/1617 -f 1628/938/1618 1440/938/1618 1650/962/1618 -f 1442/957/1619 1650/962/1619 1440/938/1619 -f 1435/723/1620 1434/963/1620 1652/415/1620 -f 1434/963/1620 1651/724/1620 1652/415/1620 -f 1651/724/1621 1430/814/1621 1652/415/1621 -f 1652/415/1621 1430/814/1621 1432/725/1621 -f 1653/964/1622 1654/965/1622 1655/966/1622 -f 1656/967/1622 1655/966/1622 1654/965/1622 -f 1657/968/1028 1658/969/1028 1653/964/1028 -f 1654/965/1028 1653/964/1028 1658/969/1028 -f 1659/970/1623 1660/971/1623 1657/968/1623 -f 1658/969/1623 1657/968/1623 1660/971/1623 -f 1655/966/1624 1656/967/1624 1661/878/1624 -f 1662/905/1624 1661/878/1624 1656/967/1624 -f 1655/972/1625 1661/973/1626 1653/974/1627 -f 1663/975/1628 1653/974/1627 1661/973/1626 -f 1664/975/1629 1662/973/1630 1654/974/1631 -f 1656/972/1632 1654/974/1631 1662/973/1630 -f 1664/976/1633 1663/977/1633 1662/967/1633 -f 1661/966/1633 1662/967/1633 1663/977/1633 -f 1432/950/1634 1433/958/1634 1643/949/1634 -f 1636/957/1635 1431/956/1635 1635/978/1635 -f 1410/979/1636 1409/980/1636 1108/979/1636 -f 1408/850/1637 1108/979/1637 1409/980/1637 -f 1122/981/1638 1121/982/1638 1107/983/1638 -f 1123/912/1639 1418/914/1639 1121/982/1639 -f 1421/984/1640 1422/985/1640 1418/914/1640 -f 1418/914/1641 1422/985/1641 1121/982/1641 -f 1423/986/1642 1410/878/1642 1422/985/1642 -f 1422/985/1643 1410/878/1643 1121/982/1643 -f 1121/982/1644 1410/878/1644 1107/983/1644 -f 1107/983/1645 1410/878/1645 1108/987/1645 -f 1145/985/1646 1143/984/1646 1147/988/1646 -f 1162/914/1647 1401/914/1647 1143/984/1647 -f 1399/989/1648 1397/990/1648 1401/914/1648 -f 1401/914/1649 1397/990/1649 1143/984/1649 -f 1143/984/1650 1397/990/1650 1147/988/1650 -f 1397/990/1651 1394/850/1651 1147/988/1651 -f 1147/988/1652 1394/850/1652 1159/877/1652 -f 1162/849/1653 1164/991/1653 1401/848/1653 -f 1230/731/1654 1228/374/1655 1665/731/1654 -f 1666/374/1656 1665/731/1654 1228/374/1655 -f 1228/374/1655 1225/391/1657 1666/374/1656 -f 1667/391/1658 1666/374/1656 1225/391/1657 -f 1225/391/1657 1224/730/1659 1667/391/1658 -f 1668/730/1659 1667/391/1658 1224/730/1659 -f 1665/731/611 1666/374/614 1669/731/611 -f 1670/374/614 1669/731/611 1666/374/614 -f 1666/374/614 1667/391/612 1670/374/614 -f 1671/391/612 1670/374/614 1667/391/612 -f 1667/391/612 1668/730/611 1671/391/612 -f 1672/730/611 1671/391/612 1668/730/611 -f 1669/731/1660 1670/374/1661 1231/731/1660 -f 1229/374/1662 1231/731/1660 1670/374/1661 -f 1670/374/1661 1671/391/1663 1229/374/1662 -f 1227/391/1664 1229/374/1662 1671/391/1663 -f 1671/391/1663 1672/730/1665 1227/391/1664 -f 1226/730/1665 1227/391/1664 1672/730/1665 -f 1201/992/1149 1277/993/1149 1200/994/1149 -f 1275/995/1666 1200/994/1666 1277/993/1666 -f 1203/996/1667 1279/997/1667 1201/992/1667 -f 1277/993/1668 1201/992/1668 1279/997/1668 -f 1281/998/1669 1279/997/1669 1205/999/1669 -f 1203/996/1670 1205/999/1670 1279/997/1670 -f 1207/1000/1671 1283/1001/1671 1205/999/1671 -f 1281/998/1672 1205/999/1672 1283/1001/1672 -f 1208/1002/913 1284/1003/913 1207/1000/913 -f 1283/1001/1673 1207/1000/1673 1284/1003/1673 -f 1214/1004/1674 1286/1005/1674 1208/1002/1674 -f 1286/1005/1675 1284/1003/1675 1208/1002/1675 -f 1307/1006/1676 1293/1002/1676 1299/1007/1676 -f 1238/1008/1677 1239/1009/1677 1313/994/1677 -f 1314/1010/1678 1313/994/1678 1239/1009/1678 -f 1239/1009/1679 1241/996/1679 1314/1010/1679 -f 1309/1011/1680 1314/1010/1680 1241/996/1680 -f 1241/996/1681 1243/999/1681 1309/1011/1681 -f 1304/1012/1682 1309/1011/1682 1243/999/1682 -f 1304/1012/1683 1243/999/1683 1305/1013/1683 -f 1245/1000/1684 1305/1013/1684 1243/999/1684 -f 1245/1000/1685 1293/1002/1685 1305/1013/1685 -f 1307/1006/1686 1305/1013/1686 1293/1002/1686 -f 1673/417/1687 1674/1014/1687 1675/417/1688 -f 1676/1014/1689 1675/417/1688 1674/1014/1687 -f 1675/417/1688 1676/1014/1689 1677/417/1690 -f 1678/1014/1690 1677/417/1690 1676/1014/1689 -f 1677/417/1691 1678/1014/1691 1679/417/1692 -f 1680/1014/1693 1679/417/1692 1678/1014/1691 -f 1679/417/1692 1680/1014/1693 1673/417/1694 -f 1674/1014/1694 1673/417/1694 1680/1014/1693 -f 1674/726/1695 1680/726/1695 1676/727/1695 -f 1678/727/1695 1676/727/1695 1680/726/1695 -f 1164/892/1696 1163/891/1697 1681/893/1698 -f 1163/891/1697 1161/866/1419 1681/893/1698 -f 1401/864/658 1681/893/1698 1161/866/1419 -# 1961 faces - -# -# object P_51_Mustang_Right_Wing_Flap -# - -v -4.86 -0.53 -0.60 -v -4.41 -0.27 3.38 -v -4.43 -0.76 3.40 -v -29.11 -0.39 3.17 -v -28.77 -0.08 6.47 -v -28.79 -0.68 6.50 -# 6 vertices - -vn 0.99 -0.05 -0.11 -vn -0.01 1.00 -0.09 -vn -0.00 1.00 -0.07 -vn -0.00 1.00 -0.06 -vn 0.13 0.05 0.99 -vn 0.13 0.03 0.99 -vn -0.01 -1.00 -0.09 -vn -0.01 -1.00 -0.08 -vn -0.01 -1.00 -0.06 -vn -0.99 0.05 0.10 -# 10 vertex normals - -vt 0.29 0.02 0.00 -vt 0.23 0.01 0.00 -vt 0.23 0.02 0.00 -vt 0.71 0.15 0.00 -vt 0.71 0.21 0.00 -vt 0.39 0.10 0.00 -vt 0.38 0.16 0.00 -vt 0.23 0.00 0.00 -vt 0.46 0.00 0.00 -vt 0.46 0.01 0.00 -vt 0.05 0.31 0.00 -vt 0.01 0.31 0.00 -vt 0.06 0.05 0.00 -vt 0.01 0.04 0.00 -vt 0.33 0.02 0.00 -vt 0.28 0.01 0.00 -vt 0.33 0.01 0.00 -# 17 texture coords - -g P_51_Mustang_Right_Wing_Flap -f 1682/1015/1699 1683/1016/1699 1684/1017/1699 -f 1685/1018/1700 1686/1019/1700 1682/1020/1701 -f 1683/1021/1702 1682/1020/1701 1686/1019/1700 -f 1686/1022/1703 1687/1016/1703 1683/1023/1704 -f 1684/1024/1704 1683/1023/1704 1687/1016/1703 -f 1687/1025/1705 1685/1026/1706 1684/1027/1707 -f 1682/1028/1707 1684/1027/1707 1685/1026/1706 -f 1686/1029/1708 1685/1030/1708 1687/1031/1708 -# 8 faces - -# -# object P_51_Mustang_Left_Wing -# - -v 21.73 -0.34 5.07 -v 29.47 -0.26 5.88 -v 29.43 -1.11 5.94 -v 13.89 -0.70 20.02 -v 13.32 0.44 17.79 -v 8.22 -0.70 21.64 -v 6.69 0.53 18.92 -v 13.59 0.59 15.01 -v 6.67 0.70 16.38 -v 13.51 0.45 11.97 -v 6.64 0.56 12.08 -v 12.99 0.26 8.88 -v 6.75 0.38 9.22 -v 12.85 -0.11 6.05 -v 18.46 -0.07 6.17 -v 18.38 -0.30 4.71 -v 18.77 0.27 8.57 -v 22.48 0.10 8.18 -v 18.54 0.45 12.11 -v 22.26 0.41 12.21 -v 18.69 0.44 14.67 -v 22.30 0.37 14.75 -v 19.28 -0.74 18.90 -v 18.83 0.28 17.17 -v 22.46 0.18 16.71 -v 23.13 -0.75 18.50 -v 30.30 -0.03 16.07 -v 30.77 -0.79 17.69 -v 29.80 0.01 8.15 -v 29.00 0.22 12.29 -v 29.20 0.27 14.36 -v 6.63 -2.09 14.77 -v 13.47 -1.97 15.15 -v 6.91 -1.78 18.50 -v 13.40 -1.81 12.10 -v 18.43 -1.86 12.23 -v 18.67 -1.64 8.68 -v 22.40 -1.51 8.27 -v 21.69 -1.11 5.12 -v 29.73 -1.49 8.23 -v 28.90 -1.73 12.40 -v 22.15 -1.85 12.34 -v 22.20 -1.84 14.87 -v 18.58 -1.87 14.79 -v 18.75 -1.79 16.77 -v 13.22 -1.77 17.34 -v 7.17 -1.73 19.64 -v 22.37 -1.71 16.82 -v 30.16 -1.61 16.17 -v 29.10 -1.79 14.47 -v 18.09 -0.19 18.03 -v 18.07 -0.12 19.96 -v 18.47 -0.42 18.05 -v 17.66 -0.35 19.98 -v 17.68 -0.41 18.05 -v 17.64 -0.81 20.03 -v 17.66 -0.87 18.10 -v 18.02 -1.05 20.04 -v 18.04 -1.11 18.11 -v 18.43 -0.82 20.02 -v 18.45 -0.88 18.09 -v 18.45 -0.36 19.98 -v 19.42 -0.43 17.94 -v 19.40 -0.37 19.87 -v 19.82 -0.20 17.92 -v 19.37 -0.83 19.91 -v 19.40 -0.89 17.98 -v 19.76 -1.06 19.93 -v 19.78 -1.12 18.00 -v 20.16 -0.83 19.90 -v 20.18 -0.90 17.98 -v 20.18 -0.37 19.86 -v 20.20 -0.44 17.93 -v 19.80 -0.14 19.84 -v 21.31 -0.91 17.79 -v 21.29 -0.85 19.72 -v 21.33 -0.45 17.75 -v 21.67 -1.08 19.74 -v 21.69 -1.15 17.81 -v 22.07 -0.85 19.71 -v 22.09 -0.92 17.79 -v 22.09 -0.39 19.67 -v 22.12 -0.46 17.74 -v 21.71 -0.16 19.65 -v 21.73 -0.22 17.73 -v 21.31 -0.39 19.68 -v 6.36 -1.85 12.28 -v 12.90 -1.58 8.99 -v 18.40 -1.29 6.24 -v 18.34 -1.03 4.76 -v 12.79 -1.19 6.11 -v 12.60 -0.96 4.14 -v 6.61 -1.24 6.37 -v 6.45 -0.95 3.49 -v 6.61 -1.63 9.28 -v 6.54 -0.19 3.45 -v 12.64 -0.25 4.10 -v 6.70 0.02 6.36 -v 25.72 -2.97 15.17 -v 26.04 -2.97 15.16 -v 25.78 -1.70 14.94 -v 26.10 -1.70 14.93 -v 25.71 -3.12 14.67 -v 26.03 -3.12 14.66 -v 26.02 -3.16 10.99 -v 25.71 -3.16 10.99 -v 25.78 -1.72 9.85 -v 26.09 -1.72 9.85 -v 49.14 -0.79 5.08 -v 48.24 -0.91 6.93 -v 48.25 -0.61 6.89 -v 48.48 -0.39 13.06 -v 45.09 -0.22 13.27 -v 48.37 -0.52 14.30 -v 49.79 -0.70 13.22 -v 49.65 -0.81 14.45 -v 50.18 -0.86 13.17 -v 49.94 -0.86 14.46 -v 49.46 -0.86 15.18 -v 48.14 -0.86 15.82 -v 45.11 -0.50 14.61 -v 44.86 -0.85 16.21 -v 37.77 -0.27 15.37 -v 37.66 -0.83 16.94 -v 37.87 0.03 13.78 -v 37.92 0.07 11.77 -v 37.54 -0.12 8.23 -v 44.74 -0.34 7.95 -v 44.69 -0.53 6.74 -v 47.69 -0.50 8.05 -v 49.33 -0.63 7.63 -v 49.65 -0.83 7.70 -v 49.74 -0.63 11.09 -v 50.12 -0.85 11.07 -v 48.01 -0.49 11.12 -v 44.83 -0.18 11.19 -v 37.83 -1.66 11.86 -v 44.77 -1.59 11.25 -v 37.86 -1.64 13.87 -v 37.71 -1.53 15.44 -v 44.80 -1.48 14.64 -v 48.34 -1.08 14.45 -v 44.94 -1.58 13.33 -v 48.44 -1.09 13.22 -v 47.98 -1.08 11.27 -v 49.72 -0.95 11.28 -v 49.21 -0.88 7.78 -v 47.66 -0.96 8.19 -v 44.69 -1.31 7.98 -v 44.66 -1.07 6.82 -v 37.47 -1.43 8.30 -v 37.60 -1.17 6.48 -v 49.77 -1.00 13.41 -v 49.64 -0.94 14.48 -v 37.65 -0.33 6.41 -v 29.53 -2.84 10.92 -v 29.47 -2.71 15.01 -v 29.60 -1.55 9.80 -v 29.51 -1.73 14.90 -v 29.69 -1.73 14.90 -v 29.64 -2.71 15.01 -v 29.78 -1.55 9.80 -v 29.70 -2.84 10.92 -v 32.08 -2.73 14.99 -v 32.26 -2.73 14.99 -v 32.13 -1.70 14.87 -v 32.31 -1.70 14.87 -v 32.14 -2.86 10.90 -v 32.32 -2.87 10.90 -v 32.22 -1.51 9.77 -v 32.40 -1.51 9.77 -v 34.83 -2.75 14.96 -v 35.01 -2.75 14.96 -v 34.88 -1.62 14.83 -v 35.06 -1.62 14.83 -v 34.89 -2.89 10.87 -v 35.07 -2.89 10.87 -v 34.97 -1.51 9.74 -v 35.15 -1.51 9.74 -v 25.90 -3.10 16.05 -v 25.99 -3.13 9.38 -v 24.57 -3.45 16.08 -v 27.29 -3.50 9.39 -v 27.20 -3.47 16.06 -v 28.21 -4.49 9.44 -v 28.12 -4.46 16.11 -v 28.50 -5.83 9.52 -v 28.41 -5.80 16.19 -v 28.08 -7.16 9.61 -v 28.00 -7.14 16.28 -v 27.07 -8.14 9.68 -v 26.98 -8.11 16.36 -v 25.73 -8.49 9.72 -v 25.65 -8.46 16.39 -v 24.43 -8.12 9.71 -v 24.35 -8.09 16.38 -v 23.51 -7.13 9.66 -v 23.43 -7.10 16.33 -v 23.22 -5.79 9.57 -v 23.14 -5.76 16.24 -v 23.64 -4.45 9.48 -v 23.56 -4.42 16.15 -v 24.65 -3.48 9.41 -v 25.98 -4.22 6.21 -v 25.18 -4.43 6.23 -v 24.57 -5.01 6.27 -v 24.32 -5.81 6.33 -v 24.50 -6.61 6.37 -v 25.04 -7.20 6.41 -v 25.82 -7.42 6.41 -v 26.62 -7.21 6.39 -v 27.23 -6.63 6.35 -v 27.48 -5.83 6.30 -v 25.96 -5.24 3.65 -v 25.66 -5.32 3.66 -v 27.30 -5.03 6.25 -v 26.75 -4.44 6.21 -v 26.25 -5.32 3.65 -v 25.93 -5.83 3.43 -v 25.44 -5.53 3.68 -v 25.35 -5.83 3.70 -v 25.41 -6.12 3.71 -v 25.62 -6.34 3.73 -v 25.90 -6.42 3.73 -v 26.20 -6.35 3.72 -v 26.42 -6.13 3.70 -v 26.52 -5.84 3.68 -v 26.45 -5.54 3.67 -v 23.60 -6.99 17.58 -v 23.33 -5.76 17.50 -v 23.72 -4.53 17.42 -v 24.65 -3.63 17.35 -v 25.88 -3.31 17.32 -v 27.08 -3.65 17.33 -v 27.92 -4.56 17.38 -v 28.19 -5.79 17.46 -v 27.80 -7.03 17.54 -v 26.87 -7.92 17.61 -v 23.89 -5.75 19.06 -v 24.18 -4.81 19.00 -v 24.72 -5.76 20.24 -v 24.83 -6.27 20.28 -v 24.09 -6.70 19.12 -v 25.64 -8.24 17.64 -v 24.44 -7.90 17.63 -v 24.74 -7.39 19.16 -v 25.18 -6.64 20.30 -v 25.72 -5.76 20.57 -v 24.88 -5.25 20.21 -v 24.89 -4.13 18.95 -v 25.83 -3.88 18.92 -v 26.75 -4.14 18.93 -v 27.39 -4.84 18.97 -v 27.60 -5.78 19.03 -v 27.30 -6.72 19.09 -v 26.59 -7.41 19.14 -v 25.65 -7.65 19.16 -v 25.68 -6.78 20.30 -v 26.19 -6.65 20.29 -v 26.57 -6.28 20.26 -v 26.73 -5.77 20.22 -v 26.62 -5.26 20.19 -v 26.27 -4.89 20.17 -v 25.77 -4.74 20.17 -v 25.27 -4.88 20.18 -v 29.89 -0.71 2.47 -# 266 vertices - -vn 0.10 -0.07 -0.99 -vn 0.10 0.89 0.44 -vn 0.06 0.97 0.24 -vn 0.09 0.92 0.39 -vn 0.05 0.98 0.21 -vn 0.02 1.00 0.01 -vn 0.02 1.00 0.02 -vn 0.01 1.00 -0.05 -vn 0.02 1.00 -0.05 -vn 0.00 1.00 -0.10 -vn 0.02 1.00 -0.09 -vn 0.01 0.99 -0.10 -vn 0.01 0.99 -0.15 -vn 0.02 0.99 -0.15 -vn 0.02 1.00 -0.10 -vn 0.02 0.99 -0.10 -vn 0.01 1.00 -0.03 -vn 0.02 1.00 -0.03 -vn 0.02 1.00 0.03 -vn 0.03 1.00 0.05 -vn 0.09 0.87 0.48 -vn 0.06 0.96 0.28 -vn 0.05 0.96 0.28 -vn 0.06 0.89 0.44 -vn 0.04 0.95 0.31 -vn 0.05 0.91 0.41 -vn 0.01 0.99 -0.12 -vn 0.01 1.00 -0.09 -vn 0.02 1.00 -0.04 -vn 0.02 1.00 0.08 -vn 0.01 -1.00 -0.01 -vn 0.01 -1.00 0.02 -vn 0.01 -1.00 0.07 -vn -0.00 -1.00 -0.06 -vn 0.01 -1.00 -0.04 -vn 0.00 -0.99 -0.10 -vn 0.02 -0.99 -0.10 -vn 0.01 -0.99 -0.14 -vn 0.00 -0.99 -0.16 -vn 0.00 -0.99 -0.11 -vn 0.01 -1.00 0.03 -vn 0.03 -0.97 0.23 -vn 0.04 -0.98 0.22 -vn 0.08 -0.97 0.23 -vn 0.13 -0.92 0.38 -vn 0.07 -0.93 0.36 -vn 0.05 -0.90 0.44 -vn 0.03 -0.96 0.28 -vn 0.05 -0.88 0.48 -vn 0.03 -0.94 0.33 -vn 0.04 -0.89 0.46 -vn 0.01 -1.00 0.04 -vn 0.88 0.48 -0.01 -vn -0.86 0.51 -0.03 -vn -0.84 0.54 -0.03 -vn -0.88 -0.48 0.01 -vn -0.89 -0.46 0.01 -vn -0.02 -1.00 0.03 -vn -0.01 -1.00 0.03 -vn 0.84 -0.54 0.03 -vn 0.86 -0.51 0.03 -vn 0.89 0.46 -0.01 -vn 0.00 -1.00 -0.09 -vn -0.01 -0.99 -0.10 -vn -0.01 -0.99 -0.16 -vn -0.01 -0.99 -0.17 -vn -0.00 -0.99 -0.13 -vn 0.01 -0.99 -0.12 -vn 0.01 -0.99 -0.10 -vn 0.11 -0.07 -0.99 -vn 0.02 1.00 -0.07 -vn 0.01 0.09 1.00 -vn 0.02 0.18 0.98 -vn 0.00 -0.96 0.29 -vn -0.00 -1.00 0.01 -vn -0.02 -0.62 -0.78 -vn -1.00 0.05 0.00 -vn 1.00 -0.05 -0.00 -vn 0.99 -0.06 -0.14 -vn 0.99 -0.06 -0.10 -vn 0.99 -0.05 -0.10 -vn 0.98 -0.04 0.19 -vn 0.85 -0.11 -0.52 -vn 0.83 -0.07 -0.55 -vn 0.94 -0.10 -0.32 -vn -1.00 0.08 0.01 -vn -1.00 0.07 0.01 -vn -0.99 0.12 0.05 -vn -1.00 0.08 0.06 -vn -1.00 0.01 0.00 -vn -0.98 0.13 0.12 -vn -0.99 0.11 -0.07 -vn -1.00 0.07 -0.04 -vn -0.88 -0.04 0.48 -vn -0.99 -0.11 0.08 -vn -1.00 0.01 0.01 -vn -0.96 -0.13 0.23 -vn -0.90 -0.01 -0.44 -vn 0.13 0.99 0.04 -vn 0.05 0.99 0.10 -vn 0.11 0.98 0.16 -vn 0.30 0.95 0.08 -vn 0.20 0.97 0.10 -vn 0.37 0.93 0.06 -vn 0.18 0.98 0.07 -vn 0.16 0.97 0.17 -vn 0.06 0.97 0.22 -vn 0.04 0.98 0.21 -vn 0.04 0.97 0.23 -vn 0.04 0.96 0.26 -vn 0.04 0.94 0.34 -vn 0.06 0.92 0.40 -vn 0.05 0.97 0.25 -vn 0.04 0.99 0.10 -vn 0.03 1.00 -0.02 -vn 0.02 1.00 -0.08 -vn 0.04 0.99 -0.11 -vn 0.04 0.99 -0.15 -vn 0.06 1.00 -0.05 -vn 0.05 1.00 -0.07 -vn 0.31 0.95 -0.06 -vn 0.17 0.98 -0.07 -vn 0.54 0.84 -0.08 -vn 0.31 0.95 -0.03 -vn 0.50 0.86 -0.04 -vn 0.08 1.00 -0.03 -vn 0.06 1.00 -0.02 -vn 0.01 -1.00 -0.03 -vn 0.08 -1.00 -0.04 -vn 0.02 -1.00 0.04 -vn 0.03 -0.97 0.25 -vn 0.03 -0.97 0.24 -vn 0.05 -0.89 0.45 -vn 0.04 -0.91 0.42 -vn 0.04 -0.93 0.38 -vn 0.06 -0.98 0.21 -vn 0.10 -0.97 0.22 -vn 0.11 -0.99 0.08 -vn 0.08 -1.00 0.03 -vn 0.10 -1.00 -0.01 -vn 0.11 -0.99 -0.03 -vn 0.07 -1.00 -0.03 -vn 0.05 -1.00 -0.03 -vn 0.09 -1.00 -0.03 -vn 0.05 -0.99 -0.13 -vn 0.06 -1.00 -0.04 -vn 0.03 -0.98 -0.20 -vn 0.01 -0.99 -0.11 -vn 0.00 -0.99 -0.17 -vn 0.11 -0.99 -0.04 -vn 0.24 -0.97 -0.02 -vn 0.24 -0.97 -0.03 -vn 0.31 -0.95 0.01 -vn 0.35 -0.94 0.05 -vn 0.22 -0.97 0.13 -vn 0.26 -0.96 0.09 -vn 0.11 -0.98 0.15 -vn 0.08 -0.98 0.15 -vn 0.08 -0.98 0.16 -vn 0.03 0.99 -0.11 -vn 0.02 0.99 -0.12 -vn 0.08 -1.00 0.01 -vn 0.10 -0.99 0.06 -vn -1.00 0.05 -0.02 -vn 1.00 -0.05 0.02 -vn 0.00 0.12 0.99 -vn -0.00 -1.00 0.03 -vn -0.00 -0.64 -0.77 -vn 0.00 0.11 0.99 -vn 0.05 -0.47 -0.88 -vn 0.07 -0.07 -1.00 -vn 0.05 0.63 -0.77 -vn 0.05 -0.19 -0.98 -vn 0.04 -0.08 -1.00 -vn 0.04 -0.11 -0.99 -vn -0.34 -0.94 0.05 -vn -0.19 0.98 -0.09 -vn -0.32 -0.95 0.05 -vn -0.99 0.06 0.14 -vn -1.00 -0.05 0.08 -vn -0.10 0.99 0.04 -vn -0.80 0.60 -0.05 -vn -0.85 0.11 0.52 -vn -0.94 0.10 0.32 -vn -0.00 -0.66 -0.75 -vn 0.01 1.00 -0.00 -vn -0.50 0.87 -0.01 -vn 0.52 0.85 0.00 -vn 0.88 0.47 0.01 -vn 0.89 0.46 0.01 -vn 1.00 -0.03 0.01 -vn 1.00 -0.05 0.01 -vn 0.86 -0.52 0.01 -vn 0.85 -0.53 0.01 -vn 0.50 -0.87 0.01 -vn 0.48 -0.88 0.01 -vn -0.01 -1.00 0.00 -vn -0.52 -0.85 -0.00 -vn -0.89 -0.46 -0.01 -vn -0.88 -0.47 -0.01 -vn -1.00 0.05 -0.01 -vn -1.00 0.03 -0.01 -vn -0.85 0.53 -0.01 -vn -0.86 0.52 -0.01 -vn -0.48 0.88 -0.01 -vn 0.01 0.95 -0.33 -vn 0.01 0.94 -0.35 -vn -0.48 0.82 -0.32 -vn -0.47 0.81 -0.34 -vn -0.82 0.47 -0.32 -vn -0.81 0.48 -0.34 -vn -0.95 0.01 -0.32 -vn -0.94 0.02 -0.34 -vn -0.83 -0.46 -0.32 -vn -0.83 -0.45 -0.34 -vn -0.49 -0.81 -0.32 -vn -0.48 -0.81 -0.34 -vn -0.02 -0.95 -0.31 -vn -0.01 -0.95 -0.33 -vn 0.45 -0.84 -0.30 -vn 0.45 -0.83 -0.32 -vn 0.80 -0.52 -0.29 -vn 0.80 -0.51 -0.31 -vn 0.95 -0.07 -0.30 -vn 0.94 -0.06 -0.32 -vn 0.00 0.73 -0.69 -vn -0.38 0.63 -0.68 -vn 0.85 0.42 -0.31 -vn 0.84 0.42 -0.33 -vn 0.50 0.80 -0.32 -vn 0.50 0.80 -0.34 -vn 0.39 0.61 -0.68 -vn -0.01 -0.05 -1.00 -vn -0.65 0.36 -0.67 -vn -0.75 -0.00 -0.66 -vn -0.66 -0.38 -0.65 -vn -0.39 -0.66 -0.64 -vn -0.01 -0.77 -0.64 -vn 0.36 -0.68 -0.63 -vn 0.64 -0.43 -0.64 -vn 0.75 -0.07 -0.65 -vn 0.67 0.31 -0.67 -vn -0.88 -0.44 0.16 -vn -0.86 -0.44 0.25 -vn -0.99 0.06 0.15 -vn -0.97 0.06 0.24 -vn -0.83 0.54 0.15 -vn -0.82 0.52 0.23 -vn -0.47 0.87 0.15 -vn -0.47 0.85 0.24 -vn 0.02 0.99 0.16 -vn 0.01 0.97 0.25 -vn 0.51 0.84 0.17 -vn 0.50 0.83 0.26 -vn 0.87 0.47 0.17 -vn 0.85 0.46 0.26 -vn 0.98 -0.02 0.17 -vn 0.96 -0.03 0.26 -vn 0.85 -0.50 0.17 -vn 0.83 -0.50 0.26 -vn 0.49 -0.85 0.17 -vn 0.48 -0.84 0.26 -vn -0.89 0.07 0.45 -vn -0.75 0.49 0.44 -vn -0.62 0.08 0.78 -vn -0.55 -0.24 0.80 -vn -0.79 -0.39 0.47 -vn -0.01 -0.99 0.17 -vn -0.01 -0.96 0.26 -vn -0.52 -0.84 0.17 -vn -0.51 -0.82 0.26 -vn -0.47 -0.74 0.48 -vn -0.32 -0.49 0.81 -vn 0.01 0.06 1.00 -vn -0.53 0.37 0.76 -vn -0.43 0.79 0.44 -vn 0.01 0.89 0.45 -vn 0.45 0.76 0.46 -vn 0.78 0.43 0.46 -vn 0.89 -0.01 0.46 -vn 0.76 -0.44 0.47 -vn 0.45 -0.76 0.47 -vn -0.01 -0.88 0.48 -vn 0.00 -0.59 0.81 -vn 0.32 -0.51 0.80 -vn 0.54 -0.29 0.79 -vn 0.63 0.02 0.78 -vn 0.55 0.33 0.77 -vn 0.32 0.56 0.76 -vn 0.01 0.65 0.76 -vn -0.30 0.58 0.76 -vn -0.99 0.04 -0.13 -vn 0.02 0.99 -0.13 -vn 0.03 0.99 -0.13 -vn 0.01 -1.00 -0.07 -vn 0.01 -1.00 -0.06 -vn 0.90 0.01 0.44 -vn -0.05 0.07 1.00 -vn -0.05 0.11 0.99 -# 299 vertex normals - -vt 0.55 0.02 0.00 -vt 0.58 0.02 0.00 -vt 0.86 0.72 0.00 -vt 0.86 0.69 0.00 -vt 0.93 0.75 0.00 -vt 0.95 0.70 0.00 -vt 0.86 0.64 0.00 -vt 0.95 0.66 0.00 -vt 0.86 0.59 0.00 -vt 0.95 0.59 0.00 -vt 0.87 0.54 0.00 -vt 0.95 0.55 0.00 -vt 0.87 0.50 0.00 -vt 0.80 0.50 0.00 -vt 0.80 0.48 0.00 -vt 0.75 0.48 0.00 -vt 0.79 0.54 0.00 -vt 0.74 0.54 0.00 -vt 0.79 0.60 0.00 -vt 0.75 0.60 0.00 -vt 0.79 0.64 0.00 -vt 0.74 0.64 0.00 -vt 0.78 0.71 0.00 -vt 0.79 0.68 0.00 -vt 0.74 0.67 0.00 -vt 0.73 0.70 0.00 -vt 0.64 0.67 0.00 -vt 0.63 0.69 0.00 -vt 0.65 0.50 0.00 -vt 0.64 0.54 0.00 -vt 0.66 0.60 0.00 -vt 0.65 0.64 0.00 -vt 0.20 0.10 0.00 -vt 0.20 0.17 0.00 -vt 0.25 0.11 0.00 -vt 0.16 0.16 0.00 -vt 0.15 0.22 0.00 -vt 0.11 0.21 0.00 -vt 0.10 0.25 0.00 -vt 0.06 0.24 0.00 -vt 0.05 0.32 0.00 -vt 0.08 0.33 0.00 -vt 0.14 0.33 0.00 -vt 0.15 0.26 0.00 -vt 0.18 0.26 0.00 -vt 0.19 0.22 0.00 -vt 0.21 0.23 0.00 -vt 0.23 0.17 0.00 -vt 0.27 0.11 0.00 -vt 0.29 0.13 0.00 -vt 0.26 0.19 0.00 -vt 0.24 0.24 0.00 -vt 0.21 0.27 0.00 -vt 0.23 0.28 0.00 -vt 0.19 0.35 0.00 -vt 0.21 0.36 0.00 -vt 0.16 0.34 0.00 -vt 0.39 0.68 0.00 -vt 0.25 0.68 0.00 -vt 0.39 0.69 0.00 -vt 0.25 0.69 0.00 -vt 0.25 0.70 0.00 -vt 0.39 0.70 0.00 -vt 0.25 0.71 0.00 -vt 0.39 0.71 0.00 -vt 0.17 0.09 0.00 -vt 0.12 0.15 0.00 -vt 0.08 0.20 0.00 -vt 0.06 0.20 0.00 -vt 0.08 0.14 0.00 -vt 0.06 0.14 0.00 -vt 0.10 0.08 0.00 -vt 0.06 0.07 0.00 -vt 0.13 0.08 0.00 -vt 0.48 0.02 0.00 -vt 0.51 0.02 0.00 -vt 0.53 0.02 0.00 -vt 0.55 0.03 0.00 -vt 0.87 0.46 0.00 -vt 0.95 0.50 0.00 -vt 0.95 0.45 0.00 -vt 0.37 0.72 0.00 -vt 0.38 0.71 0.00 -vt 0.37 0.73 0.00 -vt 0.39 0.73 0.00 -vt 0.39 0.72 0.00 -vt 0.38 0.74 0.00 -vt 0.01 0.74 0.00 -vt 0.02 0.73 0.00 -vt 0.04 0.73 0.00 -vt 0.03 0.73 0.00 -vt 0.77 0.13 0.00 -vt 0.87 0.13 0.00 -vt 0.77 0.11 0.00 -vt 0.78 0.11 0.00 -vt 0.85 0.11 0.00 -vt 0.20 0.52 0.00 -vt 0.20 0.50 0.00 -vt 0.22 0.51 0.00 -vt 0.21 0.50 0.00 -vt 0.21 0.57 0.00 -vt 0.20 0.55 0.00 -vt 0.23 0.56 0.00 -vt 0.23 0.55 0.00 -vt 0.21 0.58 0.00 -vt 0.23 0.57 0.00 -vt 0.23 0.59 0.00 -vt 0.21 0.51 0.00 -vt 0.21 0.53 0.00 -vt 0.20 0.53 0.00 -vt 0.21 0.56 0.00 -vt 0.21 0.54 0.00 -vt 0.22 0.54 0.00 -vt 0.22 0.58 0.00 -vt 0.23 0.58 0.00 -vt 0.48 0.06 0.00 -vt 0.47 0.06 0.00 -vt 0.39 0.62 0.00 -vt 0.44 0.63 0.00 -vt 0.40 0.64 0.00 -vt 0.38 0.63 0.00 -vt 0.38 0.65 0.00 -vt 0.37 0.63 0.00 -vt 0.38 0.66 0.00 -vt 0.40 0.67 0.00 -vt 0.44 0.65 0.00 -vt 0.44 0.67 0.00 -vt 0.54 0.66 0.00 -vt 0.54 0.68 0.00 -vt 0.54 0.63 0.00 -vt 0.54 0.60 0.00 -vt 0.54 0.54 0.00 -vt 0.44 0.54 0.00 -vt 0.45 0.52 0.00 -vt 0.40 0.54 0.00 -vt 0.40 0.53 0.00 -vt 0.38 0.54 0.00 -vt 0.39 0.49 0.00 -vt 0.38 0.59 0.00 -vt 0.37 0.59 0.00 -vt 0.40 0.59 0.00 -vt 0.44 0.59 0.00 -vt 0.12 0.42 0.00 -vt 0.10 0.50 0.00 -vt 0.14 0.43 0.00 -vt 0.16 0.43 0.00 -vt 0.18 0.43 0.00 -vt 0.16 0.51 0.00 -vt 0.14 0.51 0.00 -vt 0.15 0.54 0.00 -vt 0.13 0.54 0.00 -vt 0.13 0.50 0.00 -vt 0.12 0.54 0.00 -vt 0.09 0.53 0.00 -vt 0.09 0.55 0.00 -vt 0.05 0.54 0.00 -vt 0.05 0.52 0.00 -vt 0.04 0.52 0.00 -vt 0.06 0.49 0.00 -vt 0.01 0.53 0.00 -vt 0.04 0.49 0.00 -vt 0.07 0.41 0.00 -vt 0.05 0.41 0.00 -vt 0.12 0.56 0.00 -vt 0.13 0.56 0.00 -vt 0.14 0.56 0.00 -vt 0.54 0.51 0.00 -vt 0.65 0.01 0.00 -vt 0.65 0.02 0.00 -vt 0.52 0.01 0.00 -vt 0.52 0.02 0.00 -vt 0.62 0.03 0.00 -vt 0.66 0.02 0.00 -vt 0.62 0.02 0.00 -vt 0.22 0.56 0.00 -vt 0.20 0.49 0.00 -vt 0.21 0.49 0.00 -vt 0.23 0.54 0.00 -vt 0.24 0.56 0.00 -vt 0.24 0.57 0.00 -vt 0.75 0.10 0.00 -vt 0.88 0.11 0.00 -vt 0.75 0.09 0.00 -vt 0.88 0.10 0.00 -vt 0.88 0.08 0.00 -vt 0.75 0.08 0.00 -vt 0.88 0.06 0.00 -vt 0.75 0.05 0.00 -vt 0.88 0.03 0.00 -vt 0.75 0.03 0.00 -vt 0.88 0.02 0.00 -vt 0.75 0.01 0.00 -vt 0.88 0.01 0.00 -vt 0.75 0.00 0.00 -vt 0.94 0.09 0.00 -vt 0.94 0.08 0.00 -vt 0.94 0.07 0.00 -vt 0.94 0.06 0.00 -vt 0.94 0.04 0.00 -vt 0.94 0.03 0.00 -vt 0.99 0.07 0.00 -vt 0.99 0.06 0.00 -vt 0.99 0.05 0.00 -vt 0.73 0.03 0.00 -vt 0.73 0.05 0.00 -vt 0.73 0.08 0.00 -vt 0.73 0.09 0.00 -vt 0.73 0.10 0.00 -vt 0.73 0.02 0.00 -vt 0.70 0.05 0.00 -vt 0.70 0.07 0.00 -vt 0.68 0.05 0.00 -vt 0.68 0.04 0.00 -vt 0.70 0.03 0.00 -vt 0.73 0.01 0.00 -vt 0.70 0.02 0.00 -vt 0.67 0.05 0.00 -vt 0.67 0.06 0.00 -vt 0.70 0.08 0.00 -vt 0.70 0.09 0.00 -vt 0.68 0.03 0.00 -vt 0.67 0.07 0.00 -vt 0.48 0.03 0.00 -vt 0.64 0.44 0.00 -vt 0.40 0.52 0.00 -vt 0.01 0.32 0.00 -vt 0.49 0.03 0.00 -vt 0.48 0.01 0.00 -vt 0.66 0.01 0.00 -# 229 texture coords - -g P_51_Mustang_Left_Wing -f 1688/1032/1709 1689/1033/1709 1690/1033/1709 -f 1691/1034/1710 1692/1035/1711 1693/1036/1712 -f 1694/1037/1713 1693/1036/1712 1692/1035/1711 -f 1692/1035/1711 1695/1038/1714 1694/1037/1713 -f 1696/1039/1715 1694/1037/1713 1695/1038/1714 -f 1695/1038/1714 1697/1040/1716 1696/1039/1715 -f 1698/1041/1717 1696/1039/1715 1697/1040/1716 -f 1697/1040/1716 1699/1042/1718 1698/1041/1717 -f 1700/1043/1719 1698/1041/1717 1699/1042/1718 -f 1699/1042/1718 1701/1044/1720 1700/1043/1719 -f 1701/1044/1720 1699/1042/1718 1702/1045/1721 -f 1702/1045/1721 1703/1046/1721 1701/1044/1720 -f 1688/1047/1722 1703/1046/1721 1702/1045/1721 -f 1702/1045/1721 1704/1048/1723 1688/1047/1722 -f 1705/1049/1724 1688/1047/1722 1704/1048/1723 -f 1704/1048/1723 1706/1050/1725 1705/1049/1724 -f 1707/1051/1726 1705/1049/1724 1706/1050/1725 -f 1706/1050/1725 1708/1052/1727 1707/1051/1726 -f 1709/1053/1728 1707/1051/1726 1708/1052/1727 -f 1710/1054/1729 1711/1055/1730 1691/1034/1710 -f 1692/1035/1711 1691/1034/1710 1711/1055/1730 -f 1692/1035/1711 1711/1055/1730 1695/1038/1714 -f 1708/1052/1727 1695/1038/1714 1711/1055/1730 -f 1708/1052/1727 1706/1050/1725 1695/1038/1714 -f 1697/1040/1716 1695/1038/1714 1706/1050/1725 -f 1706/1050/1725 1704/1048/1723 1697/1040/1716 -f 1699/1042/1718 1697/1040/1716 1704/1048/1723 -f 1704/1048/1723 1702/1045/1721 1699/1042/1718 -f 1708/1052/1727 1711/1055/1730 1709/1053/1728 -f 1712/1056/1731 1709/1053/1728 1711/1055/1730 -f 1711/1055/1730 1710/1054/1729 1712/1056/1731 -f 1713/1057/1732 1712/1056/1731 1710/1054/1729 -f 1712/1056/1731 1713/1057/1732 1714/1058/1733 -f 1715/1059/1734 1714/1058/1733 1713/1057/1732 -f 1688/1047/1722 1705/1049/1724 1689/1060/1735 -f 1716/1061/1736 1689/1060/1735 1705/1049/1724 -f 1716/1061/1736 1705/1049/1724 1717/1062/1737 -f 1707/1051/1726 1717/1062/1737 1705/1049/1724 -f 1707/1051/1726 1709/1053/1728 1717/1062/1737 -f 1718/1063/1738 1717/1062/1737 1709/1053/1728 -f 1718/1063/1738 1709/1053/1728 1714/1058/1733 -f 1712/1056/1731 1714/1058/1733 1709/1053/1728 -f 1719/1064/1739 1720/1065/1740 1721/1066/1741 -f 1720/1065/1740 1719/1064/1739 1722/1067/1742 -f 1722/1067/1742 1723/1068/1743 1720/1065/1740 -f 1723/1068/1743 1722/1067/1742 1724/1069/1744 -f 1724/1069/1744 1725/1070/1745 1723/1068/1743 -f 1725/1070/1745 1724/1069/1744 1726/1071/1746 -f 1726/1071/1746 1690/1072/1747 1725/1070/1745 -f 1727/1073/1748 1725/1070/1745 1690/1072/1747 -f 1727/1073/1748 1728/1074/1743 1725/1070/1745 -f 1729/1075/1743 1725/1070/1745 1728/1074/1743 -f 1729/1075/1743 1728/1074/1743 1730/1076/1749 -f 1730/1076/1749 1731/1077/1740 1729/1075/1743 -f 1731/1077/1740 1730/1076/1749 1732/1078/1750 -f 1731/1077/1740 1732/1078/1750 1720/1065/1740 -f 1733/1079/1751 1720/1065/1740 1732/1078/1750 -f 1733/1079/1751 1721/1066/1741 1720/1065/1740 -f 1721/1066/1741 1733/1079/1751 1734/1080/1752 -f 1734/1080/1752 1733/1079/1751 1693/1081/1753 -f 1729/1075/1743 1723/1068/1743 1725/1070/1745 -f 1723/1068/1743 1729/1075/1743 1731/1077/1740 -f 1731/1077/1740 1720/1065/1740 1723/1068/1743 -f 1691/1082/1754 1693/1081/1753 1733/1079/1751 -f 1733/1079/1751 1732/1078/1750 1691/1082/1754 -f 1710/1083/1755 1691/1082/1754 1732/1078/1750 -f 1732/1078/1750 1735/1084/1756 1710/1083/1755 -f 1713/1085/1757 1710/1083/1755 1735/1084/1756 -f 1735/1084/1756 1736/1086/1758 1713/1085/1757 -f 1715/1087/1759 1713/1085/1757 1736/1086/1758 -f 1737/1088/1760 1730/1076/1749 1728/1074/1743 -f 1737/1088/1760 1736/1086/1758 1730/1076/1749 -f 1735/1084/1756 1730/1076/1749 1736/1086/1758 -f 1735/1084/1756 1732/1078/1750 1730/1076/1749 -f 1738/1089/1726 1739/1090/1725 1740/1091/1761 -f 1739/1090/1725 1738/1089/1726 1741/1092/1762 -f 1742/1091/1763 1741/1092/1762 1738/1089/1726 -f 1741/1092/1762 1742/1091/1763 1743/1093/1764 -f 1744/1094/1765 1743/1093/1764 1742/1091/1763 -f 1743/1093/1764 1744/1094/1765 1745/1095/1766 -f 1746/1096/1767 1745/1095/1766 1744/1094/1765 -f 1745/1095/1766 1746/1096/1767 1747/1093/1768 -f 1748/1094/1769 1747/1093/1768 1746/1096/1767 -f 1747/1093/1768 1748/1094/1769 1749/1092/1770 -f 1740/1091/1761 1749/1092/1770 1748/1094/1769 -f 1749/1092/1770 1740/1091/1761 1739/1090/1725 -f 1750/1091/1763 1751/1092/1762 1752/1089/1726 -f 1751/1092/1762 1750/1091/1763 1753/1093/1764 -f 1754/1094/1765 1753/1093/1764 1750/1091/1763 -f 1753/1093/1764 1754/1094/1765 1755/1095/1766 -f 1756/1096/1767 1755/1095/1766 1754/1094/1765 -f 1755/1095/1766 1756/1096/1767 1757/1093/1768 -f 1758/1094/1769 1757/1093/1768 1756/1096/1767 -f 1757/1093/1768 1758/1094/1769 1759/1092/1770 -f 1760/1091/1761 1759/1092/1770 1758/1094/1769 -f 1759/1092/1770 1760/1091/1761 1761/1090/1725 -f 1752/1089/1726 1761/1090/1725 1760/1091/1761 -f 1761/1090/1725 1752/1089/1726 1751/1092/1762 -f 1762/1094/1765 1763/1093/1764 1764/1091/1763 -f 1763/1093/1764 1762/1094/1765 1765/1095/1766 -f 1766/1096/1767 1765/1095/1766 1762/1094/1765 -f 1765/1095/1766 1766/1096/1767 1767/1093/1768 -f 1768/1094/1769 1767/1093/1768 1766/1096/1767 -f 1767/1093/1768 1768/1094/1769 1769/1092/1770 -f 1770/1091/1761 1769/1092/1770 1768/1094/1769 -f 1769/1092/1770 1770/1091/1761 1771/1090/1725 -f 1772/1089/1726 1771/1090/1725 1770/1091/1761 -f 1771/1090/1725 1772/1089/1726 1773/1092/1762 -f 1764/1091/1763 1773/1092/1762 1772/1089/1726 -f 1773/1092/1762 1764/1091/1763 1763/1093/1764 -f 1774/1097/1771 1722/1067/1742 1719/1064/1739 -f 1722/1067/1742 1774/1097/1771 1775/1098/1772 -f 1775/1098/1772 1724/1069/1744 1722/1067/1742 -f 1724/1069/1744 1775/1098/1772 1776/1099/1773 -f 1776/1099/1773 1726/1071/1746 1724/1069/1744 -f 1776/1099/1773 1777/1100/1774 1726/1071/1746 -f 1776/1099/1773 1778/1101/1775 1777/1100/1774 -f 1779/1102/1748 1777/1100/1774 1778/1101/1775 -f 1778/1101/1775 1780/1103/1776 1779/1102/1748 -f 1781/1104/1777 1779/1102/1748 1780/1103/1776 -f 1782/1105/1744 1775/1098/1772 1774/1097/1771 -f 1775/1098/1772 1782/1105/1744 1778/1101/1775 -f 1778/1101/1775 1776/1099/1773 1775/1098/1772 -f 1780/1103/1776 1778/1101/1775 1782/1105/1744 -f 1783/1106/1778 1779/1107/1778 1781/1106/1778 -f 1784/1107/1778 1779/1107/1778 1783/1106/1778 -f 1777/1108/1778 1779/1107/1778 1784/1107/1778 -f 1703/1108/1778 1777/1108/1778 1784/1107/1778 -f 1777/1108/1778 1703/1108/1778 1726/1109/1778 -f 1703/1108/1778 1688/1032/1778 1726/1109/1778 -f 1726/1109/1778 1688/1032/1778 1690/1033/1778 -f 1784/1110/1779 1701/1044/1720 1703/1046/1721 -f 1701/1044/1720 1784/1110/1779 1785/1111/1723 -f 1785/1111/1723 1700/1043/1719 1701/1044/1720 -f 1783/1112/1779 1785/1111/1723 1784/1110/1779 -f 1749/1113/1780 1739/1114/1780 1747/1115/1780 -f 1739/1114/1780 1743/1116/1780 1747/1115/1780 -f 1741/1117/1780 1743/1116/1780 1739/1114/1780 -f 1747/1115/1780 1743/1116/1780 1745/1118/1780 -f 1759/1113/1780 1761/1114/1780 1757/1115/1780 -f 1761/1114/1780 1753/1116/1780 1757/1115/1780 -f 1751/1117/1780 1753/1116/1780 1761/1114/1780 -f 1757/1115/1780 1753/1116/1780 1755/1118/1780 -f 1769/1113/1780 1771/1114/1780 1767/1115/1780 -f 1771/1114/1780 1763/1116/1780 1767/1115/1780 -f 1773/1117/1780 1763/1116/1780 1771/1114/1780 -f 1767/1115/1780 1763/1116/1780 1765/1118/1780 -f 1786/1119/1781 1787/1119/1781 1788/1119/1781 -f 1789/1119/1781 1788/1119/1781 1787/1119/1781 -f 1790/1120/1782 1791/1120/1782 1786/1120/1782 -f 1787/1120/1782 1786/1120/1782 1791/1120/1782 -f 1791/1120/1783 1790/1120/1783 1792/1121/1783 -f 1793/1121/1783 1792/1121/1783 1790/1120/1783 -f 1794/1121/1784 1795/1121/1784 1793/1122/1784 -f 1792/1122/1784 1793/1122/1784 1795/1121/1784 -f 1788/1123/1785 1794/1124/1785 1786/1125/1785 -f 1790/1126/1785 1794/1124/1785 1793/1127/1785 -f 1786/1125/1785 1794/1124/1785 1790/1126/1785 -f 1789/1123/1786 1787/1125/1786 1795/1124/1786 -f 1795/1124/1786 1787/1125/1786 1792/1127/1786 -f 1792/1127/1786 1787/1125/1786 1791/1126/1786 -f 1727/1128/1787 1690/1129/1787 1716/1130/1787 -f 1689/1131/1787 1716/1130/1787 1690/1129/1787 -f 1737/1132/1788 1728/1133/1789 1718/1134/1789 -f 1717/1135/1789 1718/1134/1789 1728/1133/1789 -f 1717/1135/1790 1728/1133/1790 1716/1130/1790 -f 1727/1128/1790 1716/1130/1790 1728/1133/1790 -f 1736/1136/1791 1737/1132/1791 1714/1137/1791 -f 1718/1134/1792 1714/1137/1792 1737/1132/1792 -f 1715/1138/1793 1736/1136/1793 1714/1137/1793 -f 1780/1139/1794 1782/1140/1794 1785/1128/1794 -f 1700/1141/1795 1785/1128/1795 1782/1140/1795 -f 1783/1129/1796 1781/1129/1796 1785/1128/1796 -f 1780/1139/1797 1785/1128/1797 1781/1129/1797 -f 1696/1142/1798 1698/1143/1798 1719/1135/1798 -f 1774/1144/1799 1719/1135/1799 1698/1143/1799 -f 1774/1144/1800 1698/1143/1800 1782/1140/1800 -f 1700/1141/1801 1782/1140/1801 1698/1143/1801 -f 1693/1138/1802 1694/1145/1802 1734/1146/1802 -f 1721/1137/1803 1694/1145/1803 1719/1135/1803 -f 1696/1142/1804 1719/1135/1804 1694/1145/1804 -f 1734/1146/1805 1694/1145/1805 1721/1137/1805 -f 1796/1147/1806 1797/1148/1806 1798/1148/1806 -f 1799/1149/1807 1800/1150/1808 1801/1151/1809 -f 1799/1149/1807 1801/1151/1809 1802/1152/1810 -f 1803/1153/1811 1802/1152/1810 1801/1151/1809 -f 1802/1152/1810 1803/1153/1811 1804/1154/1812 -f 1805/1153/1813 1804/1154/1812 1803/1153/1811 -f 1805/1153/1813 1803/1153/1811 1806/1155/1814 -f 1803/1153/1811 1801/1151/1809 1806/1155/1814 -f 1807/1156/1815 1806/1155/1814 1801/1151/1809 -f 1801/1151/1809 1808/1157/1816 1807/1156/1815 -f 1809/1158/1817 1807/1156/1815 1808/1157/1816 -f 1808/1157/1816 1810/1159/1818 1809/1158/1817 -f 1811/1160/1819 1809/1158/1817 1810/1159/1818 -f 1811/1160/1819 1810/1159/1818 1715/1059/1820 -f 1714/1058/1821 1715/1059/1820 1810/1159/1818 -f 1714/1058/1821 1810/1159/1818 1718/1063/1728 -f 1812/1161/1822 1718/1063/1728 1810/1159/1818 -f 1718/1063/1728 1812/1161/1822 1717/1062/1726 -f 1813/1162/1823 1717/1062/1726 1812/1161/1822 -f 1810/1159/1818 1808/1157/1816 1812/1161/1822 -f 1800/1150/1808 1812/1161/1822 1808/1157/1816 -f 1808/1157/1816 1801/1151/1809 1800/1150/1808 -f 1813/1162/1823 1814/1163/1824 1717/1062/1726 -f 1814/1163/1824 1813/1162/1823 1815/1164/1825 -f 1815/1164/1825 1816/1165/1826 1814/1163/1824 -f 1815/1164/1825 1817/1166/1827 1816/1165/1826 -f 1798/1167/1828 1816/1165/1826 1817/1166/1827 -f 1817/1166/1827 1818/1168/1829 1798/1167/1828 -f 1796/1169/1830 1798/1167/1828 1818/1168/1829 -f 1819/1168/1831 1796/1169/1830 1818/1168/1829 -f 1818/1168/1829 1820/1170/1832 1819/1168/1831 -f 1821/1171/1833 1819/1168/1831 1820/1170/1832 -f 1821/1171/1833 1820/1170/1832 1804/1154/1812 -f 1802/1152/1810 1804/1154/1812 1820/1170/1832 -f 1802/1152/1810 1820/1170/1832 1799/1149/1807 -f 1822/1172/1834 1799/1149/1807 1820/1170/1832 -f 1799/1149/1807 1822/1172/1834 1800/1150/1808 -f 1823/1173/1835 1800/1150/1808 1822/1172/1834 -f 1800/1150/1808 1823/1173/1835 1812/1161/1822 -f 1813/1162/1823 1812/1161/1822 1823/1173/1835 -f 1823/1173/1835 1815/1164/1825 1813/1162/1823 -f 1815/1164/1825 1823/1173/1835 1817/1166/1827 -f 1822/1172/1834 1817/1166/1827 1823/1173/1835 -f 1817/1166/1827 1822/1172/1834 1818/1168/1829 -f 1820/1170/1832 1818/1168/1829 1822/1172/1834 -f 1824/1174/1836 1825/1175/1837 1826/1176/1838 -f 1826/1176/1838 1737/1088/1740 1824/1174/1836 -f 1826/1176/1838 1827/1177/1839 1737/1088/1740 -f 1736/1086/1840 1737/1088/1740 1827/1177/1839 -f 1736/1086/1840 1827/1177/1839 1715/1087/1841 -f 1811/1178/1842 1715/1087/1841 1827/1177/1839 -f 1811/1178/1842 1827/1177/1839 1809/1179/1843 -f 1828/1180/1844 1809/1179/1843 1827/1177/1839 -f 1809/1179/1843 1828/1180/1844 1807/1181/1845 -f 1829/1182/1846 1807/1181/1845 1828/1180/1844 -f 1828/1180/1844 1830/1183/1847 1829/1182/1846 -f 1831/1184/1848 1829/1182/1846 1830/1183/1847 -f 1831/1184/1848 1830/1183/1847 1832/1185/1849 -f 1832/1185/1849 1833/1186/1850 1831/1184/1848 -f 1833/1186/1850 1832/1185/1849 1834/1187/1851 -f 1835/1188/1852 1834/1187/1851 1832/1185/1849 -f 1835/1188/1852 1797/1189/1850 1834/1187/1851 -f 1835/1188/1852 1836/1190/1853 1797/1189/1850 -f 1797/1189/1850 1796/1191/1854 1834/1187/1851 -f 1837/1192/1855 1797/1189/1850 1836/1190/1853 -f 1836/1190/1853 1838/1193/1777 1837/1192/1855 -f 1839/1194/1746 1837/1192/1855 1838/1193/1777 -f 1838/1193/1777 1727/1073/1856 1839/1194/1746 -f 1690/1072/1857 1839/1194/1746 1727/1073/1856 -f 1727/1073/1856 1838/1193/1777 1728/1074/1743 -f 1824/1174/1836 1728/1074/1743 1838/1193/1777 -f 1838/1193/1777 1836/1190/1853 1824/1174/1836 -f 1825/1175/1837 1824/1174/1836 1836/1190/1853 -f 1836/1190/1853 1835/1188/1852 1825/1175/1837 -f 1832/1185/1849 1825/1175/1837 1835/1188/1852 -f 1825/1175/1837 1832/1185/1849 1830/1183/1847 -f 1830/1183/1847 1826/1176/1838 1825/1175/1837 -f 1830/1183/1847 1828/1180/1844 1826/1176/1838 -f 1827/1177/1839 1826/1176/1838 1828/1180/1844 -f 1728/1074/1743 1824/1174/1836 1737/1088/1740 -f 1834/1187/1858 1796/1191/1858 1819/1187/1858 -f 1834/1187/1858 1819/1187/1858 1833/1186/1859 -f 1821/1186/1860 1833/1186/1859 1819/1187/1858 -f 1821/1186/1860 1804/1195/1861 1833/1186/1859 -f 1840/1195/1862 1833/1186/1859 1804/1195/1861 -f 1840/1195/1862 1804/1195/1861 1841/1196/1863 -f 1805/1196/1864 1841/1196/1863 1804/1195/1861 -f 1841/1196/1863 1805/1196/1864 1806/1197/1865 -f 1841/1196/1863 1806/1197/1865 1829/1182/1866 -f 1807/1181/1867 1829/1182/1866 1806/1197/1865 -f 1842/1198/1868 1814/1163/1824 1816/1165/1826 -f 1814/1163/1824 1842/1198/1868 1716/1061/1824 -f 1716/1061/1824 1717/1062/1726 1814/1163/1824 -f 1689/1060/1869 1716/1061/1824 1842/1198/1868 -f 1840/1195/1870 1831/1184/1848 1833/1186/1850 -f 1831/1184/1848 1840/1195/1870 1829/1182/1846 -f 1841/1196/1871 1829/1182/1846 1840/1195/1870 -f 1843/1127/1872 1844/1125/1872 1845/1124/1872 -f 1846/1123/1872 1845/1124/1872 1844/1125/1872 -f 1847/1123/1873 1848/1125/1873 1849/1124/1873 -f 1850/1127/1873 1849/1124/1873 1848/1125/1873 -f 1851/1119/1874 1852/1119/1874 1853/1119/1874 -f 1854/1119/1874 1853/1119/1874 1852/1119/1874 -f 1855/1199/1875 1856/1200/1875 1851/1201/1875 -f 1852/1202/1875 1851/1201/1875 1856/1200/1875 -f 1857/1121/1876 1858/1121/1876 1855/1122/1876 -f 1856/1122/1876 1855/1122/1876 1858/1121/1876 -f 1853/1123/1872 1857/1124/1872 1851/1125/1872 -f 1855/1127/1872 1851/1125/1872 1857/1124/1872 -f 1854/1123/1873 1852/1125/1873 1858/1124/1873 -f 1856/1127/1873 1858/1124/1873 1852/1125/1873 -f 1859/1119/1877 1860/1119/1877 1861/1119/1877 -f 1862/1119/1877 1861/1119/1877 1860/1119/1877 -f 1863/1199/1875 1864/1200/1875 1859/1201/1875 -f 1860/1202/1875 1859/1201/1875 1864/1200/1875 -f 1865/1121/1876 1866/1121/1876 1863/1122/1876 -f 1864/1122/1876 1863/1122/1876 1866/1121/1876 -f 1861/1123/1872 1865/1124/1872 1859/1125/1872 -f 1863/1127/1872 1859/1125/1872 1865/1124/1872 -f 1862/1123/1873 1860/1125/1873 1866/1124/1873 -f 1864/1127/1873 1866/1124/1873 1860/1125/1873 -f 1837/1200/1878 1839/1203/1878 1797/1204/1878 -f 1690/1033/1879 1689/1033/1879 1839/1203/1879 -f 1842/1205/1880 1816/1200/1880 1689/1033/1880 -f 1689/1033/1881 1816/1200/1881 1839/1203/1881 -f 1839/1203/1882 1816/1200/1882 1797/1204/1882 -f 1816/1200/1883 1798/1204/1883 1797/1204/1883 -f 1718/1206/1884 1717/1143/1884 1714/1145/1884 -f 1716/1139/1885 1689/1207/1885 1717/1143/1885 -f 1717/1143/1886 1689/1207/1886 1714/1145/1886 -f 1690/1208/1887 1727/1130/1887 1689/1207/1887 -f 1689/1207/1888 1727/1130/1888 1714/1145/1888 -f 1728/1209/1889 1737/1210/1889 1727/1130/1889 -f 1727/1130/1890 1737/1210/1890 1714/1145/1890 -f 1737/1210/1891 1736/1211/1891 1714/1145/1891 -f 1714/1145/1892 1736/1211/1892 1715/1138/1892 -f 1844/1119/1874 1848/1119/1874 1846/1119/1874 -f 1847/1119/1874 1846/1119/1874 1848/1119/1874 -f 1843/1199/1875 1850/1200/1875 1844/1201/1875 -f 1848/1202/1875 1844/1201/1875 1850/1200/1875 -f 1845/1121/1893 1849/1121/1893 1843/1122/1893 -f 1850/1122/1893 1843/1122/1893 1849/1121/1893 -f 1867/1212/1894 1868/1213/1894 1869/1214/1895 -f 1868/1213/1894 1867/1212/1894 1870/1215/1896 -f 1871/1214/1896 1870/1215/1896 1867/1212/1894 -f 1870/1215/1896 1871/1214/1896 1872/1216/1897 -f 1873/1217/1898 1872/1216/1897 1871/1214/1896 -f 1872/1216/1897 1873/1217/1898 1874/1218/1899 -f 1875/1219/1900 1874/1218/1899 1873/1217/1898 -f 1874/1218/1899 1875/1219/1900 1876/1220/1901 -f 1877/1221/1902 1876/1220/1901 1875/1219/1900 -f 1876/1220/1901 1877/1221/1902 1878/1222/1903 -f 1879/1223/1904 1878/1222/1903 1877/1221/1902 -f 1878/1222/1903 1879/1223/1904 1880/1224/1905 -f 1881/1225/1905 1880/1224/1905 1879/1223/1904 -f 1880/1224/1905 1881/1225/1905 1882/1222/1906 -f 1883/1223/1906 1882/1222/1906 1881/1225/1905 -f 1882/1222/1906 1883/1223/1906 1884/1220/1907 -f 1885/1221/1908 1884/1220/1907 1883/1223/1906 -f 1884/1220/1907 1885/1221/1908 1886/1218/1909 -f 1887/1219/1910 1886/1218/1909 1885/1221/1908 -f 1886/1218/1909 1887/1219/1910 1888/1216/1911 -f 1889/1217/1912 1888/1216/1911 1887/1219/1910 -f 1888/1216/1911 1889/1217/1912 1890/1215/1913 -f 1869/1214/1895 1890/1215/1913 1889/1217/1912 -f 1890/1215/1913 1869/1214/1895 1868/1213/1894 -f 1868/1213/1914 1891/1226/1915 1890/1215/1916 -f 1892/1227/1917 1890/1215/1916 1891/1226/1915 -f 1890/1215/1916 1892/1227/1917 1888/1216/1918 -f 1893/1228/1919 1888/1216/1918 1892/1227/1917 -f 1888/1216/1918 1893/1228/1919 1886/1218/1920 -f 1894/1229/1921 1886/1218/1920 1893/1228/1919 -f 1886/1218/1920 1894/1229/1921 1884/1220/1922 -f 1895/1230/1923 1884/1220/1922 1894/1229/1921 -f 1884/1220/1922 1895/1230/1923 1882/1222/1924 -f 1896/1231/1925 1882/1222/1924 1895/1230/1923 -f 1882/1222/1924 1896/1231/1925 1880/1224/1926 -f 1897/1231/1927 1880/1224/1926 1896/1231/1925 -f 1880/1224/1926 1897/1231/1927 1878/1222/1928 -f 1898/1231/1929 1878/1222/1928 1897/1231/1927 -f 1878/1222/1928 1898/1231/1929 1876/1220/1930 -f 1899/1230/1931 1876/1220/1930 1898/1231/1929 -f 1876/1220/1930 1899/1230/1931 1874/1218/1932 -f 1900/1229/1933 1874/1218/1932 1899/1230/1931 -f 1891/1226/1915 1901/1232/1934 1892/1227/1917 -f 1902/1232/1935 1892/1227/1917 1901/1232/1934 -f 1892/1227/1917 1902/1232/1935 1893/1228/1919 -f 1874/1218/1932 1900/1229/1933 1872/1216/1936 -f 1903/1228/1937 1872/1216/1936 1900/1229/1933 -f 1872/1216/1936 1903/1228/1937 1870/1215/1938 -f 1904/1227/1939 1870/1215/1938 1903/1228/1937 -f 1870/1215/1938 1904/1227/1939 1868/1213/1914 -f 1891/1226/1915 1868/1213/1914 1904/1227/1939 -f 1904/1227/1939 1905/1232/1940 1891/1226/1915 -f 1901/1232/1934 1891/1226/1915 1905/1232/1940 -f 1901/1232/1934 1905/1232/1940 1906/1233/1941 -f 1902/1232/1935 1901/1232/1934 1906/1233/1941 -f 1907/1233/1942 1902/1232/1935 1906/1233/1941 -f 1907/1233/1942 1893/1228/1919 1902/1232/1935 -f 1893/1228/1919 1907/1233/1942 1894/1229/1921 -f 1908/1233/1943 1894/1229/1921 1907/1233/1942 -f 1894/1229/1921 1908/1233/1943 1895/1230/1923 -f 1909/1234/1944 1895/1230/1923 1908/1233/1943 -f 1895/1230/1923 1909/1234/1944 1896/1231/1925 -f 1910/1234/1945 1896/1231/1925 1909/1234/1944 -f 1896/1231/1925 1910/1234/1945 1897/1231/1927 -f 1911/1234/1946 1897/1231/1927 1910/1234/1945 -f 1897/1231/1927 1911/1234/1946 1898/1231/1929 -f 1912/1234/1947 1898/1231/1929 1911/1234/1946 -f 1898/1231/1929 1912/1234/1947 1899/1230/1931 -f 1913/1234/1948 1899/1230/1931 1912/1234/1947 -f 1899/1230/1931 1913/1234/1948 1900/1229/1933 -f 1914/1233/1949 1900/1229/1933 1913/1234/1948 -f 1900/1229/1933 1914/1233/1949 1903/1228/1937 -f 1915/1233/1950 1903/1228/1937 1914/1233/1949 -f 1903/1228/1937 1915/1233/1950 1904/1227/1939 -f 1905/1232/1940 1904/1227/1939 1915/1233/1950 -f 1905/1232/1940 1915/1233/1950 1906/1233/1941 -f 1915/1233/1950 1914/1233/1949 1906/1233/1941 -f 1914/1233/1949 1913/1234/1948 1906/1233/1941 -f 1913/1234/1948 1912/1234/1947 1906/1233/1941 -f 1912/1234/1947 1911/1234/1946 1906/1233/1941 -f 1911/1234/1946 1910/1234/1945 1906/1233/1941 -f 1910/1234/1945 1909/1234/1944 1906/1233/1941 -f 1909/1234/1944 1908/1233/1943 1906/1233/1941 -f 1908/1233/1943 1907/1233/1942 1906/1233/1941 -f 1885/1221/1951 1916/1235/1952 1887/1219/1953 -f 1917/1236/1954 1887/1219/1953 1916/1235/1952 -f 1887/1219/1953 1917/1236/1954 1889/1217/1955 -f 1918/1237/1956 1889/1217/1955 1917/1236/1954 -f 1889/1217/1955 1918/1237/1956 1869/1214/1957 -f 1919/1238/1958 1869/1214/1957 1918/1237/1956 -f 1869/1214/1957 1919/1238/1958 1867/1212/1959 -f 1920/1239/1960 1867/1212/1959 1919/1238/1958 -f 1867/1212/1959 1920/1239/1960 1871/1214/1961 -f 1921/1238/1962 1871/1214/1961 1920/1239/1960 -f 1871/1214/1961 1921/1238/1962 1873/1217/1963 -f 1922/1237/1964 1873/1217/1963 1921/1238/1962 -f 1873/1217/1963 1922/1237/1964 1875/1219/1965 -f 1923/1236/1966 1875/1219/1965 1922/1237/1964 -f 1875/1219/1965 1923/1236/1966 1877/1221/1967 -f 1924/1235/1968 1877/1221/1967 1923/1236/1966 -f 1877/1221/1967 1924/1235/1968 1879/1223/1969 -f 1925/1240/1970 1879/1223/1969 1924/1235/1968 -f 1917/1236/1954 1926/1241/1971 1918/1237/1956 -f 1918/1237/1956 1927/1242/1972 1919/1238/1958 -f 1927/1242/1972 1918/1237/1956 1926/1241/1971 -f 1926/1241/1971 1928/1243/1973 1927/1242/1972 -f 1928/1243/1973 1926/1241/1971 1929/1244/1974 -f 1930/1245/1975 1929/1244/1974 1926/1241/1971 -f 1926/1241/1971 1917/1236/1954 1930/1245/1975 -f 1916/1235/1952 1930/1245/1975 1917/1236/1954 -f 1879/1223/1969 1925/1240/1970 1881/1225/1976 -f 1931/1246/1977 1881/1225/1976 1925/1240/1970 -f 1881/1225/1976 1931/1246/1977 1883/1223/1978 -f 1932/1240/1979 1883/1223/1978 1931/1246/1977 -f 1883/1223/1978 1932/1240/1979 1885/1221/1951 -f 1916/1235/1952 1885/1221/1951 1932/1240/1979 -f 1932/1240/1979 1933/1247/1980 1916/1235/1952 -f 1930/1245/1975 1916/1235/1952 1933/1247/1980 -f 1933/1247/1980 1934/1244/1981 1930/1245/1975 -f 1929/1244/1974 1930/1245/1975 1934/1244/1981 -f 1934/1244/1981 1935/1248/1982 1929/1244/1974 -f 1929/1244/1974 1935/1248/1982 1928/1243/1973 -f 1928/1243/1973 1935/1248/1982 1936/1249/1983 -f 1936/1249/1983 1927/1242/1972 1928/1243/1973 -f 1927/1242/1972 1936/1249/1983 1937/1250/1984 -f 1937/1250/1984 1919/1238/1958 1927/1242/1972 -f 1919/1238/1958 1937/1250/1984 1920/1239/1960 -f 1938/1251/1985 1920/1239/1960 1937/1250/1984 -f 1920/1239/1960 1938/1251/1985 1921/1238/1962 -f 1939/1250/1986 1921/1238/1962 1938/1251/1985 -f 1921/1238/1962 1939/1250/1986 1922/1237/1964 -f 1940/1242/1987 1922/1237/1964 1939/1250/1986 -f 1922/1237/1964 1940/1242/1987 1923/1236/1966 -f 1941/1241/1988 1923/1236/1966 1940/1242/1987 -f 1923/1236/1966 1941/1241/1988 1924/1235/1968 -f 1942/1245/1989 1924/1235/1968 1941/1241/1988 -f 1924/1235/1968 1942/1245/1989 1925/1240/1970 -f 1943/1247/1990 1925/1240/1970 1942/1245/1989 -f 1925/1240/1970 1943/1247/1990 1931/1246/1977 -f 1944/1247/1991 1931/1246/1977 1943/1247/1990 -f 1931/1246/1977 1944/1247/1991 1932/1240/1979 -f 1933/1247/1980 1932/1240/1979 1944/1247/1991 -f 1944/1247/1991 1945/1252/1992 1933/1247/1980 -f 1934/1244/1981 1933/1247/1980 1945/1252/1992 -f 1945/1252/1992 1935/1248/1982 1934/1244/1981 -f 1946/1244/1993 1935/1248/1982 1945/1252/1992 -f 1945/1252/1992 1944/1247/1991 1946/1244/1993 -f 1943/1247/1990 1946/1244/1993 1944/1247/1991 -f 1947/1244/1994 1935/1248/1982 1946/1244/1993 -f 1946/1244/1993 1943/1247/1990 1947/1244/1994 -f 1942/1245/1989 1947/1244/1994 1943/1247/1990 -f 1947/1244/1994 1942/1245/1989 1948/1243/1995 -f 1941/1241/1988 1948/1243/1995 1942/1245/1989 -f 1948/1243/1995 1941/1241/1988 1949/1249/1996 -f 1940/1242/1987 1949/1249/1996 1941/1241/1988 -f 1949/1249/1996 1940/1242/1987 1950/1253/1997 -f 1939/1250/1986 1950/1253/1997 1940/1242/1987 -f 1950/1253/1997 1939/1250/1986 1951/1253/1998 -f 1938/1251/1985 1951/1253/1998 1939/1250/1986 -f 1951/1253/1998 1938/1251/1985 1952/1253/1999 -f 1937/1250/1984 1952/1253/1999 1938/1251/1985 -f 1952/1253/1999 1937/1250/1984 1936/1249/1983 -f 1936/1249/1983 1935/1248/1982 1952/1253/1999 -f 1952/1253/1999 1935/1248/1982 1951/1253/1998 -f 1951/1253/1998 1935/1248/1982 1950/1253/1997 -f 1950/1253/1997 1935/1248/1982 1949/1249/1996 -f 1949/1249/1996 1935/1248/1982 1948/1243/1995 -f 1948/1243/1995 1935/1248/1982 1947/1244/1994 -f 1689/1106/2000 1953/1107/2000 1690/1254/2000 -f 1796/1169/1719 1953/1255/2001 1798/1256/1719 -f 1689/1060/2002 1798/1256/1719 1953/1255/2001 -f 1953/1257/1856 1796/1191/2003 1690/1072/1856 -f 1797/1189/2004 1690/1072/1856 1796/1191/2003 -f 1798/1258/2005 1797/1258/2005 1796/1254/2005 -f 1690/1204/2006 1797/1259/2006 1689/1260/2006 -f 1798/1259/2007 1689/1260/2007 1797/1259/2007 -# 500 faces - -# -# object P_51_Mustang_Left_Landing_Wheel -# - -v 19.25 -7.41 18.44 -v 19.26 -7.41 18.30 -v 20.79 -7.36 18.42 -v 20.79 -7.36 18.28 -v 20.30 -0.82 17.29 -v 19.89 -9.61 17.84 -v 20.06 -0.82 17.28 -v 20.05 -9.61 18.01 -v 20.47 -0.82 17.47 -v 20.04 -9.61 18.26 -v 20.45 -0.82 17.71 -v 19.86 -9.61 18.43 -v 20.27 -0.82 17.88 -v 19.61 -9.61 18.42 -v 20.03 -0.82 17.87 -v 19.45 -9.60 18.24 -v 19.87 -0.82 17.69 -v 19.46 -9.61 18.00 -v 19.88 -0.82 17.45 -v 19.64 -9.61 17.83 -v 18.91 -13.24 18.10 -v 18.69 -13.22 18.10 -v 19.03 -10.60 17.93 -v 18.70 -10.57 17.94 -v 19.21 -9.83 17.89 -v 19.03 -9.31 17.85 -v 19.56 -9.60 17.87 -v 19.59 -9.04 17.83 -v 19.58 -9.04 18.33 -v 19.02 -9.31 18.35 -v 19.56 -9.59 18.36 -v 19.20 -9.83 18.38 -v 18.70 -10.57 18.43 -v 19.03 -10.60 18.43 -v 18.59 -13.22 18.60 -v 18.90 -13.24 18.60 -v 23.32 -9.94 15.18 -v 21.57 -3.85 17.12 -v 23.08 -10.00 18.57 -v 20.86 -1.44 18.08 -v 20.94 -1.41 16.97 -v 20.73 -1.48 16.97 -v 21.36 -3.92 17.12 -v 20.65 -1.50 18.08 -v 22.86 -10.07 18.58 -v 23.11 -10.00 15.18 -v 20.80 -7.18 18.41 -v 20.80 -7.18 18.27 -v 19.27 -7.10 18.42 -v 19.27 -7.10 18.28 -v 20.80 -7.36 17.54 -v 19.27 -7.42 17.55 -v 20.81 -7.18 17.52 -v 19.28 -7.10 17.53 -v 19.28 -7.10 17.68 -v 19.26 -7.41 17.70 -v 20.81 -7.18 17.67 -v 20.80 -7.36 17.68 -v 18.93 -10.59 17.88 -v 18.90 -10.98 16.68 -v 18.93 -10.87 19.15 -v 18.91 -11.75 20.15 -v 18.87 -12.99 20.61 -v 18.74 -15.33 17.13 -v 18.80 -13.21 15.67 -v 18.76 -14.45 16.14 -v 18.85 -11.94 15.88 -v 19.50 -14.55 15.96 -v 19.55 -13.22 15.47 -v 19.60 -11.86 15.68 -v 19.65 -10.83 16.55 -v 19.68 -10.41 17.84 -v 19.68 -10.71 19.20 -v 19.66 -11.65 20.27 -v 19.62 -12.98 20.77 -v 18.82 -14.26 20.41 -v 19.57 -14.34 20.55 -v 18.78 -15.22 19.60 -v 19.52 -15.37 19.68 -v 20.42 -10.87 19.10 -v 20.40 -11.74 20.10 -v 20.36 -12.98 20.56 -v 20.31 -14.25 20.36 -v 20.27 -15.21 19.55 -v 19.49 -15.79 18.40 -v 20.24 -15.60 18.35 -v 19.48 -15.49 17.04 -v 20.23 -15.32 17.08 -v 18.75 -15.61 18.40 -v 20.25 -14.44 16.08 -v 20.29 -13.21 15.62 -v 20.34 -11.94 15.82 -v 20.39 -10.98 16.63 -v 20.42 -10.59 17.83 -# 94 vertices - -vn 0.04 -1.00 0.00 -vn 0.41 -0.08 -0.91 -vn -0.34 -0.04 -0.94 -vn 0.94 -0.07 -0.33 -vn 0.93 -0.07 -0.35 -vn 0.90 -0.02 0.44 -vn 0.91 -0.02 0.40 -vn 0.34 0.04 0.94 -vn 0.37 0.04 0.93 -vn -0.41 0.08 0.91 -vn -0.93 0.07 0.35 -vn -0.94 0.07 0.33 -vn -0.91 0.02 -0.40 -vn -0.90 0.02 -0.44 -vn -0.37 -0.04 -0.93 -vn -0.01 -0.06 -1.00 -vn 0.01 0.06 1.00 -vn -0.01 -1.00 0.00 -vn 0.01 1.00 -0.00 -vn 0.96 0.25 0.07 -vn -0.96 -0.25 -0.07 -vn 1.00 -0.05 0.01 -vn 0.05 1.00 -0.00 -vn -1.00 0.05 -0.01 -vn -0.43 0.90 -0.01 -vn -0.97 0.25 -0.01 -vn -1.00 0.04 -0.01 -vn -1.00 0.03 -0.04 -vn -0.98 -0.00 -0.18 -vn -0.98 -0.01 -0.20 -vn -0.06 -1.00 -0.01 -vn -0.08 -1.00 -0.00 -vn -0.07 -1.00 -0.01 -vn -0.09 -1.00 0.00 -vn 0.98 -0.22 0.01 -vn 0.55 -0.83 0.01 -vn -0.29 0.96 -0.00 -vn -0.01 0.05 1.00 -vn 0.29 -0.96 0.00 -vn -0.09 0.28 -0.96 -vn 0.02 -0.06 -1.00 -vn -1.00 0.04 0.01 -vn -0.26 -0.55 -0.79 -vn -0.27 -0.10 -0.96 -vn -0.03 -0.57 -0.82 -vn -0.03 -0.10 -0.99 -vn -0.27 0.40 -0.87 -vn -0.03 0.42 -0.91 -vn -0.26 0.80 -0.53 -vn -0.02 0.83 -0.56 -vn -0.24 0.97 -0.04 -vn -0.00 1.00 -0.05 -vn -0.22 0.87 0.45 -vn 0.01 0.89 0.45 -vn -0.20 0.55 0.81 -vn 0.03 0.57 0.82 -vn -0.20 0.10 0.97 -vn 0.03 0.10 0.99 -vn -0.21 -0.40 0.89 -vn 0.03 -0.42 0.91 -vn -0.22 -0.81 0.55 -vn 0.02 -0.83 0.56 -vn 0.25 0.87 0.44 -vn 0.26 0.55 0.79 -vn 0.27 0.10 0.96 -vn 0.27 -0.40 0.87 -vn 0.26 -0.80 0.53 -vn 0.00 -1.00 0.05 -vn 0.24 -0.97 0.04 -vn -0.01 -0.89 -0.45 -vn 0.22 -0.87 -0.45 -vn -0.24 -0.97 0.05 -vn -0.25 -0.87 -0.44 -vn 0.20 -0.55 -0.81 -vn 0.20 -0.10 -0.97 -vn 0.21 0.40 -0.89 -vn 0.22 0.81 -0.55 -vn 0.24 0.97 -0.05 -vn 1.00 -0.04 -0.01 -# 79 vertex normals - -vt 0.07 0.76 0.00 -vt 0.09 0.92 0.00 -vt 0.30 0.92 0.00 -vt 0.30 0.93 0.00 -vt 0.09 0.93 0.00 -vt 0.30 0.94 0.00 -vt 0.09 0.94 0.00 -vt 0.44 0.70 0.00 -vt 0.44 0.73 0.00 -vt 0.44 0.74 0.00 -vt 0.43 0.74 0.00 -vt 0.43 0.75 0.00 -vt 0.31 0.99 0.00 -vt 0.31 0.98 0.00 -vt 0.32 1.00 0.00 -vt 0.33 0.99 0.00 -vt 0.33 0.98 0.00 -vt 0.33 1.00 0.00 -vt 0.32 0.98 0.00 -vt 0.66 0.03 0.00 -vt 0.53 0.08 0.00 -vt 0.67 0.11 0.00 -vt 0.47 0.11 0.00 -vt 0.47 0.08 0.00 -vt 0.61 0.03 0.00 -vt 0.66 0.00 0.00 -vt 0.47 0.00 0.00 -vt 0.08 0.75 0.00 -vt 0.09 0.75 0.00 -vt 0.07 0.75 0.00 -vt 0.03 0.85 0.00 -vt 0.04 0.85 0.00 -vt 0.03 0.84 0.00 -vt 0.04 0.84 0.00 -vt 0.08 0.76 0.00 -vt 0.09 0.74 0.00 -vt 0.42 0.74 0.00 -vt 0.42 0.73 0.00 -vt 0.43 0.73 0.00 -vt 0.42 0.72 0.00 -vt 0.43 0.72 0.00 -vt 0.46 0.73 0.00 -vt 0.46 0.72 0.00 -vt 0.45 0.73 0.00 -vt 0.05 0.68 0.00 -vt 0.03 0.68 0.00 -vt 0.03 0.67 0.00 -vt 0.16 0.67 0.00 -vt 0.08 0.68 0.00 -vt 0.08 0.67 0.00 -vt 0.16 0.66 0.00 -vt 0.07 0.66 0.00 -vt 0.07 0.67 0.00 -vt 0.03 0.66 0.00 -vt 0.82 0.92 0.00 -vt 0.80 0.92 0.00 -vt 0.84 0.93 0.00 -vt 0.85 0.94 0.00 -vt 0.85 0.96 0.00 -vt 0.78 0.98 0.00 -vt 0.77 0.94 0.00 -vt 0.77 0.96 0.00 -vt 0.78 0.93 0.00 -vt 0.31 0.77 0.00 -vt 0.29 0.77 0.00 -vt 0.31 0.76 0.00 -vt 0.29 0.76 0.00 -vt 0.32 0.77 0.00 -vt 0.33 0.76 0.00 -vt 0.34 0.77 0.00 -vt 0.34 0.76 0.00 -vt 0.36 0.77 0.00 -vt 0.36 0.76 0.00 -vt 0.38 0.77 0.00 -vt 0.38 0.76 0.00 -vt 0.39 0.77 0.00 -vt 0.39 0.76 0.00 -vt 0.36 0.75 0.00 -vt 0.38 0.75 0.00 -vt 0.39 0.75 0.00 -vt 0.34 0.75 0.00 -vt 0.32 0.75 0.00 -vt 0.31 0.75 0.00 -vt 0.29 0.75 0.00 -vt 0.84 0.98 0.00 -vt 0.82 0.99 0.00 -vt 0.80 0.99 0.00 -# 87 texture coords - -g P_51_Mustang_Left_Landing_Wheel -f 1954/1261/2008 1955/1261/2008 1956/1261/2008 -f 1957/1261/2008 1956/1261/2008 1955/1261/2008 -f 1958/1262/2009 1959/1263/2009 1960/1262/2010 -f 1959/1263/2009 1958/1262/2009 1961/1264/2011 -f 1962/1265/2012 1961/1264/2011 1958/1262/2009 -f 1961/1264/2011 1962/1265/2012 1963/1266/2013 -f 1964/1267/2014 1963/1266/2013 1962/1265/2012 -f 1963/1266/2013 1964/1267/2014 1965/1266/2015 -f 1966/1267/2016 1965/1266/2015 1964/1267/2014 -f 1965/1266/2015 1966/1267/2016 1967/1266/2017 -f 1968/1267/2017 1967/1266/2017 1966/1267/2016 -f 1967/1266/2017 1968/1267/2017 1969/1266/2018 -f 1970/1267/2019 1969/1266/2018 1968/1267/2017 -f 1969/1266/2018 1970/1267/2019 1971/1264/2020 -f 1972/1265/2021 1971/1264/2020 1970/1267/2019 -f 1971/1264/2020 1972/1265/2021 1973/1263/2022 -f 1960/1262/2010 1973/1263/2022 1972/1265/2021 -f 1973/1263/2022 1960/1262/2010 1959/1263/2009 -f 1974/1268/2023 1975/1268/2023 1976/1269/2023 -f 1975/1268/2023 1977/1269/2023 1976/1269/2023 -f 1976/1269/2023 1977/1269/2023 1978/1270/2023 -f 1977/1269/2023 1979/1270/2023 1978/1270/2023 -f 1978/1270/2023 1979/1270/2023 1980/1271/2023 -f 1979/1270/2023 1981/1272/2023 1980/1271/2023 -f 1982/1272/2024 1983/1270/2024 1984/1271/2024 -f 1983/1270/2024 1985/1270/2024 1984/1271/2024 -f 1986/1269/2024 1985/1270/2024 1983/1270/2024 -f 1987/1269/2024 1985/1270/2024 1986/1269/2024 -f 1988/1268/2024 1987/1269/2024 1986/1269/2024 -f 1989/1268/2024 1987/1269/2024 1988/1268/2024 -f 1967/1273/2025 1969/1274/2025 1965/1275/2025 -f 1969/1274/2025 1961/1276/2025 1965/1275/2025 -f 1973/1277/2025 1961/1276/2025 1969/1274/2025 -f 1959/1277/2025 1961/1276/2025 1973/1277/2025 -f 1965/1275/2025 1961/1276/2025 1963/1278/2025 -f 1958/1279/2026 1960/1277/2026 1962/1274/2026 -f 1960/1277/2026 1966/1275/2026 1962/1274/2026 -f 1970/1276/2026 1966/1275/2026 1960/1277/2026 -f 1968/1278/2026 1966/1275/2026 1970/1276/2026 -f 1972/1277/2026 1970/1276/2026 1960/1277/2026 -f 1990/1280/2027 1991/1281/2027 1992/1282/2027 -f 1992/1282/2027 1991/1281/2027 1993/1283/2027 -f 1991/1281/2027 1994/1284/2027 1993/1283/2027 -f 1995/1280/2028 1996/1285/2028 1997/1286/2028 -f 1996/1285/2028 1998/1287/2028 1997/1286/2028 -f 1999/1284/2028 1998/1287/2028 1996/1285/2028 -f 1956/1288/2029 1957/1288/2029 2000/1288/2029 -f 2001/1288/2029 2000/1288/2029 1957/1288/2029 -f 2000/1288/2030 2001/1288/2030 2002/1289/2030 -f 2003/1289/2030 2002/1289/2030 2001/1288/2030 -f 2002/1290/2031 2003/1290/2031 1954/1290/2031 -f 1955/1290/2031 1954/1290/2031 2003/1290/2031 -f 2004/1291/2023 2005/1292/2023 2006/1293/2023 -f 2007/1294/2023 2006/1293/2023 2005/1292/2023 -f 2008/1293/2024 2009/1291/2024 2010/1294/2024 -f 2011/1292/2024 2010/1294/2024 2009/1291/2024 -f 2009/1290/2008 2005/1261/2008 2011/1288/2008 -f 2004/1295/2008 2011/1288/2008 2005/1261/2008 -f 2011/1289/2029 2004/1289/2029 2010/1289/2029 -f 2006/1289/2029 2010/1289/2029 2004/1289/2029 -f 2010/1288/2030 2006/1288/2030 2008/1288/2030 -f 2007/1288/2030 2008/1288/2030 2006/1288/2030 -f 2008/1296/2031 2007/1296/2031 2009/1296/2031 -f 2005/1296/2031 2009/1296/2031 2007/1296/2031 -f 1982/1297/2032 1981/1298/2032 1983/1271/2032 -f 1979/1299/2032 1983/1271/2032 1981/1298/2032 -f 1983/1298/2033 1979/1300/2033 1986/1299/2033 -f 1977/1301/2033 1986/1299/2033 1979/1300/2033 -f 1986/1299/2034 1977/1301/2035 1988/1302/2036 -f 1975/1303/2037 1988/1302/2036 1977/1301/2035 -f 1988/1299/2038 1975/1299/2039 1989/1271/2040 -f 1974/1271/2041 1989/1271/2040 1975/1299/2039 -f 1989/1298/2029 1974/1298/2029 1987/1304/2029 -f 1976/1304/2029 1987/1304/2029 1974/1298/2029 -f 1987/1304/2042 1976/1304/2042 1985/1302/2042 -f 1978/1302/2042 1985/1302/2042 1976/1304/2042 -f 1985/1297/2043 1978/1271/2043 1984/1297/2043 -f 1980/1271/2043 1984/1297/2043 1978/1271/2043 -f 1994/1305/2044 1995/1305/2044 1993/1306/2044 -f 1997/1306/2044 1993/1306/2044 1995/1305/2044 -f 1998/1307/2045 1992/1307/2045 1997/1308/2045 -f 1993/1308/2045 1997/1308/2045 1992/1307/2045 -f 1999/1306/2046 1990/1307/2046 1998/1309/2046 -f 1992/1310/2046 1998/1309/2046 1990/1307/2046 -f 1990/1311/2047 1999/1308/2047 1991/1312/2047 -f 1996/1313/2047 1991/1312/2047 1999/1308/2047 -f 1995/1307/2048 1994/1314/2048 1996/1313/2048 -f 1991/1312/2048 1996/1313/2048 1994/1314/2048 -f 1962/1274/2026 1966/1275/2026 1964/1273/2026 -f 1957/1291/2023 1955/1292/2023 2001/1293/2023 -f 2003/1294/2023 2001/1293/2023 1955/1292/2023 -f 2002/1293/2024 1954/1291/2024 2000/1294/2024 -f 1956/1292/2024 2000/1294/2024 1954/1291/2024 -f 1971/1279/2025 1973/1277/2025 1969/1274/2025 -f 2012/1315/2049 2013/1316/2049 2014/1317/2049 -f 2015/1318/2049 2014/1317/2049 2016/1319/2049 -f 2014/1317/2049 2013/1316/2049 2016/1319/2049 -f 2013/1316/2049 2017/1320/2049 2016/1319/2049 -f 2018/1321/2049 2017/1320/2049 2013/1316/2049 -f 2019/1322/2049 2017/1320/2049 2018/1321/2049 -f 2020/1323/2049 2018/1321/2049 2013/1316/2049 -f 2019/1324/2050 2018/1325/2051 2021/1326/2052 -f 2022/1327/2053 2021/1326/2052 2018/1325/2051 -f 2018/1325/2051 2020/1324/2054 2022/1327/2053 -f 2023/1326/2055 2022/1327/2053 2020/1324/2054 -f 2020/1324/2054 2013/1328/2056 2023/1326/2055 -f 2024/1329/2057 2023/1326/2055 2013/1328/2056 -f 2013/1328/2056 2012/1330/2058 2024/1329/2057 -f 2025/1331/2059 2024/1329/2057 2012/1330/2058 -f 2012/1330/2058 2014/1332/2060 2025/1331/2059 -f 2026/1333/2061 2025/1331/2059 2014/1332/2060 -f 2014/1332/2060 2015/1334/2062 2026/1333/2061 -f 2027/1335/2063 2026/1333/2061 2015/1334/2062 -f 2015/1334/2062 2016/1336/2064 2027/1335/2063 -f 2028/1337/2065 2027/1335/2063 2016/1336/2064 -f 2016/1336/2064 2029/1334/2066 2028/1337/2065 -f 2030/1335/2067 2028/1337/2065 2029/1334/2066 -f 2029/1334/2066 2031/1332/2068 2030/1335/2067 -f 2032/1333/2069 2030/1335/2067 2031/1332/2068 -f 2026/1333/2061 2027/1335/2063 2033/1338/2070 -f 2034/1339/2071 2033/1338/2070 2027/1335/2063 -f 2027/1335/2063 2028/1337/2065 2034/1339/2071 -f 2035/1340/2072 2034/1339/2071 2028/1337/2065 -f 2028/1337/2065 2030/1335/2067 2035/1340/2072 -f 2036/1339/2073 2035/1340/2072 2030/1335/2067 -f 2030/1335/2067 2032/1333/2069 2036/1339/2073 -f 2037/1338/2074 2036/1339/2073 2032/1333/2069 -f 2032/1333/2069 2038/1331/2075 2037/1338/2074 -f 2039/1341/2076 2037/1338/2074 2038/1331/2075 -f 2038/1331/2075 2040/1329/2077 2039/1341/2076 -f 2041/1342/2078 2039/1341/2076 2040/1329/2077 -f 2031/1332/2068 2042/1330/2079 2032/1333/2069 -f 2038/1331/2075 2032/1333/2069 2042/1330/2079 -f 2042/1330/2079 2017/1328/2080 2038/1331/2075 -f 2040/1329/2077 2038/1331/2075 2017/1328/2080 -f 2017/1328/2080 2019/1324/2050 2040/1329/2077 -f 2021/1326/2052 2040/1329/2077 2019/1324/2050 -f 2040/1329/2077 2021/1326/2052 2041/1342/2078 -f 2043/1343/2081 2041/1342/2078 2021/1326/2052 -f 2021/1326/2052 2022/1327/2053 2043/1343/2081 -f 2044/1344/2082 2043/1343/2081 2022/1327/2053 -f 2022/1327/2053 2023/1326/2055 2044/1344/2082 -f 2045/1343/2083 2044/1344/2082 2023/1326/2055 -f 2023/1326/2055 2024/1329/2057 2045/1343/2083 -f 2046/1342/2084 2045/1343/2083 2024/1329/2057 -f 2024/1329/2057 2025/1331/2059 2046/1342/2084 -f 2047/1341/2085 2046/1342/2084 2025/1331/2059 -f 2025/1331/2059 2026/1333/2061 2047/1341/2085 -f 2033/1338/2070 2047/1341/2085 2026/1333/2061 -f 2044/1319/2086 2045/1318/2086 2043/1345/2086 -f 2045/1318/2086 2047/1315/2086 2043/1345/2086 -f 2043/1345/2086 2047/1315/2086 2036/1322/2086 -f 2047/1315/2086 2034/1323/2086 2036/1322/2086 -f 2036/1322/2086 2034/1323/2086 2035/1321/2086 -f 2033/1316/2086 2034/1323/2086 2047/1315/2086 -f 2046/1317/2086 2047/1315/2086 2045/1318/2086 -f 2041/1346/2086 2043/1345/2086 2039/1347/2086 -f 2039/1347/2086 2043/1345/2086 2036/1322/2086 -f 2037/1320/2086 2039/1347/2086 2036/1322/2086 -f 2042/1347/2049 2031/1346/2049 2017/1320/2049 -f 2017/1320/2049 2031/1346/2049 2016/1319/2049 -f 2016/1319/2049 2031/1346/2049 2029/1345/2049 -# 162 faces - -# -# object P_51_Mustang_Left_Rockets -# - -v 28.30 -4.77 8.29 -v 28.33 -4.86 5.62 -v 28.36 -4.84 8.30 -v 28.39 -4.93 5.63 -v 30.30 -3.78 17.72 -v 30.11 -3.64 18.78 -v 29.93 -4.14 17.76 -v 29.98 -4.36 6.27 -v 29.58 -4.47 6.28 -v 29.44 -4.27 17.78 -v 29.18 -4.36 6.28 -v 28.96 -4.13 17.77 -v 28.90 -4.06 6.25 -v 28.63 -3.77 17.74 -v 28.82 -3.65 6.22 -v 28.52 -3.28 17.70 -v 28.94 -3.25 6.18 -v 28.67 -2.78 17.65 -v 29.25 -2.95 6.15 -v 29.04 -2.43 17.61 -v 29.65 -2.85 6.14 -v 29.53 -2.30 17.60 -v 30.05 -2.96 6.14 -v 30.01 -2.44 17.60 -v 28.80 -3.63 18.79 -v 29.07 -3.91 18.82 -v 29.44 -4.02 18.82 -v 29.82 -3.92 18.81 -v 29.46 -3.20 20.36 -v 30.23 -3.25 18.75 -v 30.46 -3.29 17.68 -v 30.29 -4.07 6.24 -v 30.41 -3.66 6.20 -v 29.13 -2.58 18.69 -v 28.84 -2.86 18.72 -v 28.72 -3.24 18.76 -v 29.51 -2.48 18.68 -v 30.32 -3.26 6.17 -v 30.35 -2.80 17.63 -v 30.15 -2.87 18.71 -v 29.89 -2.58 18.69 -v 29.57 -3.63 6.19 -v 29.64 -3.70 6.20 -v 30.92 -2.50 5.38 -v 30.85 -2.43 5.38 -v 29.61 -3.61 8.86 -v 29.55 -3.54 8.86 -v 30.89 -2.41 8.05 -v 30.82 -2.34 8.04 -v 30.77 -4.79 8.27 -v 29.63 -3.54 8.86 -v 30.70 -4.86 8.27 -v 29.56 -3.61 8.86 -v 28.48 -2.33 8.06 -v 28.41 -2.40 8.07 -v 30.73 -4.94 5.61 -v 29.59 -3.70 6.20 -v 28.44 -2.48 5.41 -v 28.51 -2.41 5.40 -v 29.66 -3.63 6.19 -v 30.80 -4.88 5.60 -v 30.94 -4.79 8.27 -v 30.97 -4.88 5.60 -v 31.00 -4.86 8.27 -v 31.03 -4.95 5.60 -v 32.94 -3.80 17.70 -v 32.75 -3.66 18.76 -v 32.57 -4.16 17.74 -v 32.62 -4.38 6.25 -v 32.21 -4.49 6.26 -v 32.08 -4.29 17.75 -v 31.82 -4.38 6.25 -v 31.60 -4.15 17.74 -v 31.54 -4.08 6.23 -v 31.26 -3.79 17.71 -v 31.45 -3.67 6.19 -v 31.16 -3.30 17.67 -v 31.58 -3.27 6.15 -v 31.31 -2.81 17.62 -v 31.89 -2.97 6.12 -v 31.68 -2.45 17.59 -v 32.29 -2.87 6.11 -v 32.17 -2.32 17.57 -v 32.68 -2.98 6.12 -v 32.65 -2.46 17.58 -v 31.44 -3.65 18.77 -v 31.70 -3.93 18.79 -v 32.08 -4.04 18.80 -v 32.46 -3.94 18.79 -v 32.09 -3.22 20.34 -v 32.87 -3.27 18.72 -v 33.09 -3.31 17.65 -v 32.92 -4.09 6.22 -v 33.05 -3.68 6.18 -v 31.77 -2.60 18.67 -v 31.48 -2.88 18.70 -v 31.36 -3.26 18.73 -v 32.15 -2.50 18.66 -v 32.96 -3.28 6.14 -v 32.99 -2.82 17.61 -v 32.79 -2.89 18.69 -v 32.52 -2.61 18.66 -v 32.21 -3.65 6.17 -v 32.28 -3.72 6.17 -v 33.55 -2.52 5.36 -v 33.49 -2.45 5.35 -v 32.25 -3.63 8.84 -v 32.18 -3.56 8.83 -v 33.52 -2.43 8.02 -v 33.46 -2.36 8.02 -v 33.41 -4.81 8.24 -v 32.27 -3.56 8.83 -v 33.34 -4.88 8.25 -v 32.19 -3.63 8.84 -v 31.12 -2.35 8.04 -v 31.05 -2.42 8.05 -v 33.37 -4.96 5.58 -v 32.22 -3.72 6.17 -v 31.08 -2.50 5.38 -v 31.15 -2.43 5.37 -v 32.29 -3.65 6.16 -v 33.44 -4.90 5.58 -v 33.69 -4.81 8.24 -v 33.72 -4.90 5.57 -v 33.75 -4.88 8.25 -v 33.78 -4.97 5.58 -v 35.69 -3.82 17.67 -v 35.50 -3.68 18.73 -v 35.32 -4.18 17.71 -v 35.37 -4.40 6.22 -v 34.96 -4.51 6.23 -v 34.83 -4.31 17.73 -v 34.57 -4.40 6.23 -v 34.35 -4.17 17.72 -v 34.29 -4.10 6.20 -v 34.01 -3.81 17.69 -v 34.21 -3.69 6.17 -v 33.91 -3.32 17.64 -v 34.33 -3.29 6.13 -v 34.06 -2.83 17.60 -v 34.64 -2.99 6.10 -v 34.43 -2.47 17.56 -v 35.04 -2.89 6.08 -v 34.92 -2.34 17.54 -v 35.44 -3.00 6.09 -v 35.40 -2.48 17.55 -v 34.19 -3.67 18.74 -v 34.45 -3.95 18.77 -v 34.83 -4.06 18.77 -v 35.21 -3.96 18.76 -v 34.85 -3.24 20.31 -v 35.62 -3.30 18.69 -v 35.84 -3.33 17.63 -v 35.67 -4.11 6.19 -v 35.80 -3.71 6.15 -v 34.52 -2.62 18.64 -v 34.23 -2.90 18.67 -v 34.11 -3.28 18.71 -v 34.90 -2.52 18.63 -v 35.71 -3.30 6.12 -v 35.74 -2.84 17.58 -v 35.54 -2.91 18.66 -v 35.27 -2.63 18.64 -v 34.96 -3.67 6.14 -v 35.03 -3.74 6.15 -v 36.31 -2.54 5.33 -v 36.24 -2.47 5.32 -v 35.00 -3.65 8.81 -v 34.93 -3.58 8.81 -v 36.28 -2.46 8.00 -v 36.21 -2.39 7.99 -v 36.16 -4.83 8.22 -v 35.02 -3.58 8.81 -v 36.09 -4.90 8.22 -v 34.94 -3.65 8.81 -v 33.87 -2.37 8.01 -v 33.80 -2.44 8.02 -v 36.12 -4.99 5.56 -v 34.97 -3.74 6.15 -v 33.83 -2.52 5.35 -v 33.90 -2.45 5.35 -v 35.05 -3.67 6.14 -v 36.19 -4.92 5.55 -# 183 vertices - -vn -0.73 -0.68 0.01 -vn 0.85 -0.51 0.11 -vn 0.82 -0.47 0.33 -vn 0.49 -0.86 0.12 -vn 0.50 -0.87 0.02 -vn -0.01 -1.00 0.02 -vn -0.01 -0.99 0.12 -vn -0.52 -0.85 0.01 -vn -0.52 -0.85 0.12 -vn -0.89 -0.46 -0.01 -vn -0.89 -0.45 0.10 -vn -1.00 0.05 -0.03 -vn -1.00 0.05 0.08 -vn -0.85 0.53 -0.04 -vn -0.85 0.53 0.06 -vn -0.48 0.87 -0.05 -vn -0.49 0.87 0.05 -vn 0.01 1.00 -0.05 -vn 0.01 1.00 0.06 -vn 0.52 0.85 -0.04 -vn 0.52 0.85 0.07 -vn -0.85 -0.42 0.32 -vn -0.50 -0.79 0.34 -vn -0.01 -0.94 0.35 -vn 0.47 -0.81 0.34 -vn -0.35 -0.53 0.78 -vn 0.92 -0.26 0.31 -vn 0.95 -0.29 0.10 -vn 0.86 -0.52 0.01 -vn 0.95 -0.30 0.01 -vn -0.46 0.85 0.27 -vn -0.81 0.52 0.28 -vn -0.95 0.07 0.30 -vn 0.01 0.96 0.27 -vn 0.45 0.77 0.46 -vn 0.88 0.47 -0.02 -vn 0.88 0.47 0.08 -vn 0.98 0.21 -0.01 -vn 0.97 0.22 0.09 -vn 0.84 0.46 0.30 -vn 0.93 0.23 0.30 -vn 0.49 0.82 0.29 -vn -0.01 -0.09 -1.00 -vn 0.27 0.17 -0.95 -vn 0.00 -0.08 -1.00 -vn -0.27 -0.33 -0.91 -vn -0.27 -0.17 0.95 -vn -0.00 0.08 1.00 -vn 0.01 0.09 1.00 -vn 0.27 0.33 0.91 -vn -0.69 0.72 -0.03 -vn 0.28 -0.19 0.94 -vn 0.02 0.08 1.00 -vn -0.25 0.35 0.90 -vn 0.25 -0.35 -0.90 -vn -0.02 -0.08 -1.00 -vn -0.28 0.19 -0.94 -vn 0.73 0.68 -0.01 -vn 0.69 -0.72 0.03 -# 59 vertex normals - -vt 0.81 0.65 0.00 -vt 0.71 0.65 0.00 -vt 0.83 0.57 0.00 -vt 0.85 0.57 0.00 -vt 0.64 0.57 0.00 -vt 0.64 0.58 0.00 -vt 0.83 0.58 0.00 -vt 0.64 0.59 0.00 -vt 0.83 0.59 0.00 -vt 0.64 0.60 0.00 -vt 0.83 0.60 0.00 -vt 0.85 0.58 0.00 -vt 0.89 0.58 0.00 -vt 0.85 0.59 0.00 -vt 0.85 0.60 0.00 -vt 0.89 0.60 0.00 -vt 0.64 0.61 0.00 -vt 0.83 0.61 0.00 -vt 0.85 0.61 0.00 -vt 0.37 0.73 0.00 -vt 0.37 0.74 0.00 -vt 0.39 0.74 0.00 -vt 0.39 0.72 0.00 -vt 0.39 0.73 0.00 -vt 0.38 0.74 0.00 -vt 0.69 0.65 0.00 -vt 0.75 0.65 0.00 -vt 0.91 0.70 0.00 -vt 0.91 0.66 0.00 -vt 0.98 0.70 0.00 -vt 0.98 0.66 0.00 -vt 0.91 0.63 0.00 -vt 0.98 0.63 0.00 -vt 0.37 0.72 0.00 -vt 0.38 0.71 0.00 -# 35 texture coords - -g P_51_Mustang_Left_Rockets -f 2048/1348/2087 2049/1349/2087 2050/1348/2087 -f 2051/1349/2087 2050/1348/2087 2049/1349/2087 -f 2052/1350/2088 2053/1351/2089 2054/1350/2090 -f 2054/1350/2090 2055/1352/2091 2052/1350/2088 -f 2055/1352/2091 2054/1350/2090 2056/1353/2092 -f 2057/1354/2093 2056/1353/2092 2054/1350/2090 -f 2056/1353/2092 2057/1354/2093 2058/1353/2094 -f 2059/1354/2095 2058/1353/2094 2057/1354/2093 -f 2058/1353/2094 2059/1354/2095 2060/1353/2096 -f 2061/1354/2097 2060/1353/2096 2059/1354/2095 -f 2060/1353/2096 2061/1354/2097 2062/1355/2098 -f 2063/1356/2099 2062/1355/2098 2061/1354/2097 -f 2062/1355/2098 2063/1356/2099 2064/1355/2100 -f 2065/1356/2101 2064/1355/2100 2063/1356/2099 -f 2064/1355/2100 2065/1356/2101 2066/1355/2102 -f 2067/1356/2103 2066/1355/2102 2065/1356/2101 -f 2066/1355/2102 2067/1356/2103 2068/1357/2104 -f 2069/1358/2105 2068/1357/2104 2067/1356/2103 -f 2068/1357/2104 2069/1358/2105 2070/1357/2106 -f 2071/1358/2107 2070/1357/2106 2069/1358/2105 -f 2061/1354/2097 2072/1359/2108 2063/1356/2099 -f 2072/1359/2108 2061/1354/2097 2073/1359/2109 -f 2059/1354/2095 2073/1359/2109 2061/1354/2097 -f 2073/1359/2109 2059/1354/2095 2074/1359/2110 -f 2057/1354/2093 2074/1359/2110 2059/1354/2095 -f 2074/1359/2110 2057/1354/2093 2075/1351/2111 -f 2054/1350/2090 2075/1351/2111 2057/1354/2093 -f 2075/1351/2111 2054/1350/2090 2053/1351/2089 -f 2075/1351/2111 2053/1351/2089 2076/1360/2112 -f 2053/1351/2089 2077/1351/2113 2076/1360/2112 -f 2053/1351/2089 2052/1350/2088 2077/1351/2113 -f 2078/1350/2114 2077/1351/2113 2052/1350/2088 -f 2052/1350/2088 2079/1352/2115 2078/1350/2114 -f 2080/1352/2116 2078/1350/2114 2079/1352/2115 -f 2081/1361/2117 2082/1361/2118 2076/1360/2112 -f 2082/1361/2118 2083/1361/2119 2076/1360/2112 -f 2083/1361/2119 2072/1359/2108 2076/1360/2112 -f 2072/1359/2108 2073/1359/2109 2076/1360/2112 -f 2073/1359/2109 2074/1359/2110 2076/1360/2112 -f 2074/1359/2110 2075/1351/2111 2076/1360/2112 -f 2084/1362/2120 2081/1361/2117 2076/1363/2121 -f 2070/1357/2106 2071/1358/2107 2085/1357/2122 -f 2086/1358/2123 2085/1357/2122 2071/1358/2107 -f 2085/1357/2122 2086/1358/2123 2080/1364/2124 -f 2078/1365/2125 2080/1364/2124 2086/1358/2123 -f 2086/1358/2123 2087/1362/2126 2078/1365/2125 -f 2077/1366/2127 2078/1365/2125 2087/1362/2126 -f 2077/1366/2127 2087/1362/2126 2076/1363/2121 -f 2087/1362/2126 2088/1362/2128 2076/1363/2121 -f 2088/1362/2128 2084/1362/2120 2076/1363/2121 -f 2088/1362/2128 2071/1358/2107 2084/1362/2120 -f 2069/1358/2105 2084/1362/2120 2071/1358/2107 -f 2084/1362/2120 2069/1358/2105 2081/1361/2117 -f 2067/1356/2103 2081/1361/2117 2069/1358/2105 -f 2081/1361/2117 2067/1356/2103 2082/1361/2118 -f 2065/1356/2101 2082/1361/2118 2067/1356/2103 -f 2082/1361/2118 2065/1356/2101 2083/1361/2119 -f 2063/1356/2099 2083/1361/2119 2065/1356/2101 -f 2083/1361/2119 2063/1356/2099 2072/1359/2108 -f 2087/1362/2126 2086/1358/2123 2088/1362/2128 -f 2071/1358/2107 2088/1362/2128 2086/1358/2123 -f 2085/1367/2129 2080/1367/2129 2070/1368/2129 -f 2080/1367/2129 2066/1369/2129 2070/1368/2129 -f 2058/1370/2129 2066/1369/2129 2080/1367/2129 -f 2062/1371/2129 2066/1369/2129 2058/1370/2129 -f 2060/1370/2129 2062/1371/2129 2058/1370/2129 -f 2070/1368/2129 2066/1369/2129 2068/1372/2129 -f 2064/1371/2129 2066/1369/2129 2062/1371/2129 -f 2049/1373/2130 2089/1374/2129 2051/1373/2130 -f 2090/1374/2131 2051/1373/2130 2089/1374/2129 -f 2090/1374/2131 2089/1374/2129 2091/1348/2132 -f 2092/1348/2132 2091/1348/2132 2089/1374/2129 -f 2050/1373/2133 2093/1374/2134 2048/1373/2133 -f 2094/1374/2135 2048/1373/2133 2093/1374/2134 -f 2093/1374/2134 2095/1348/2136 2094/1374/2135 -f 2096/1348/2136 2094/1374/2135 2095/1348/2136 -f 2048/1375/2137 2094/1376/2137 2049/1377/2137 -f 2089/1378/2137 2049/1377/2137 2094/1376/2137 -f 2094/1376/2137 2096/1379/2137 2089/1378/2137 -f 2092/1380/2137 2089/1378/2137 2096/1379/2137 -f 2097/1373/2138 2098/1374/2135 2099/1373/2138 -f 2100/1374/2139 2099/1373/2138 2098/1374/2135 -f 2098/1374/2135 2101/1348/2140 2100/1374/2139 -f 2102/1348/2140 2100/1374/2139 2101/1348/2140 -f 2099/1375/2087 2100/1376/2087 2103/1377/2087 -f 2104/1378/2087 2103/1377/2087 2100/1376/2087 -f 2100/1376/2087 2102/1379/2087 2104/1378/2087 -f 2105/1380/2087 2104/1378/2087 2102/1379/2087 -f 2105/1348/2141 2106/1348/2141 2104/1374/2142 -f 2107/1374/2129 2104/1374/2142 2106/1348/2141 -f 2107/1374/2129 2108/1373/2143 2104/1374/2142 -f 2103/1373/2143 2104/1374/2142 2108/1373/2143 -f 2101/1375/2144 2098/1376/2144 2106/1377/2144 -f 2107/1378/2144 2106/1377/2144 2098/1376/2144 -f 2098/1376/2144 2097/1379/2144 2107/1378/2144 -f 2108/1380/2144 2107/1378/2144 2097/1379/2144 -f 2079/1381/2129 2055/1381/2129 2080/1367/2129 -f 2055/1381/2129 2058/1370/2129 2080/1367/2129 -f 2056/1382/2129 2058/1370/2129 2055/1381/2129 -f 2095/1375/2145 2093/1376/2145 2091/1377/2145 -f 2090/1378/2145 2091/1377/2145 2093/1376/2145 -f 2093/1376/2145 2050/1379/2145 2090/1378/2145 -f 2051/1380/2145 2090/1378/2145 2050/1379/2145 -f 2095/1348/2144 2091/1349/2144 2096/1348/2144 -f 2092/1349/2144 2096/1348/2144 2091/1349/2144 -f 2099/1348/2145 2103/1349/2145 2097/1348/2145 -f 2108/1349/2145 2097/1348/2145 2103/1349/2145 -f 2101/1348/2137 2106/1349/2137 2102/1348/2137 -f 2105/1349/2137 2102/1348/2137 2106/1349/2137 -f 2079/1352/2115 2052/1350/2088 2055/1352/2091 -f 2109/1348/2087 2110/1349/2087 2111/1348/2087 -f 2112/1349/2087 2111/1348/2087 2110/1349/2087 -f 2113/1350/2088 2114/1351/2089 2115/1350/2090 -f 2115/1350/2090 2116/1352/2091 2113/1350/2088 -f 2116/1352/2091 2115/1350/2090 2117/1353/2092 -f 2118/1354/2093 2117/1353/2092 2115/1350/2090 -f 2117/1353/2092 2118/1354/2093 2119/1353/2094 -f 2120/1354/2095 2119/1353/2094 2118/1354/2093 -f 2119/1353/2094 2120/1354/2095 2121/1353/2096 -f 2122/1354/2097 2121/1353/2096 2120/1354/2095 -f 2121/1353/2096 2122/1354/2097 2123/1355/2098 -f 2124/1356/2099 2123/1355/2098 2122/1354/2097 -f 2123/1355/2098 2124/1356/2099 2125/1355/2100 -f 2126/1356/2101 2125/1355/2100 2124/1356/2099 -f 2125/1355/2100 2126/1356/2101 2127/1355/2102 -f 2128/1356/2103 2127/1355/2102 2126/1356/2101 -f 2127/1355/2102 2128/1356/2103 2129/1357/2104 -f 2130/1358/2105 2129/1357/2104 2128/1356/2103 -f 2129/1357/2104 2130/1358/2105 2131/1357/2106 -f 2132/1358/2107 2131/1357/2106 2130/1358/2105 -f 2122/1354/2097 2133/1359/2108 2124/1356/2099 -f 2133/1359/2108 2122/1354/2097 2134/1359/2109 -f 2120/1354/2095 2134/1359/2109 2122/1354/2097 -f 2134/1359/2109 2120/1354/2095 2135/1359/2110 -f 2118/1354/2093 2135/1359/2110 2120/1354/2095 -f 2135/1359/2110 2118/1354/2093 2136/1351/2111 -f 2115/1350/2090 2136/1351/2111 2118/1354/2093 -f 2136/1351/2111 2115/1350/2090 2114/1351/2089 -f 2136/1351/2111 2114/1351/2089 2137/1360/2112 -f 2114/1351/2089 2138/1351/2113 2137/1360/2112 -f 2114/1351/2089 2113/1350/2088 2138/1351/2113 -f 2139/1350/2114 2138/1351/2113 2113/1350/2088 -f 2113/1350/2088 2140/1352/2115 2139/1350/2114 -f 2141/1352/2116 2139/1350/2114 2140/1352/2115 -f 2142/1361/2117 2143/1361/2118 2137/1360/2112 -f 2143/1361/2118 2144/1361/2119 2137/1360/2112 -f 2144/1361/2119 2133/1359/2108 2137/1360/2112 -f 2133/1359/2108 2134/1359/2109 2137/1360/2112 -f 2134/1359/2109 2135/1359/2110 2137/1360/2112 -f 2135/1359/2110 2136/1351/2111 2137/1360/2112 -f 2145/1362/2120 2142/1361/2117 2137/1363/2121 -f 2131/1357/2106 2132/1358/2107 2146/1357/2122 -f 2147/1358/2123 2146/1357/2122 2132/1358/2107 -f 2146/1357/2122 2147/1358/2123 2141/1364/2124 -f 2139/1365/2125 2141/1364/2124 2147/1358/2123 -f 2147/1358/2123 2148/1362/2126 2139/1365/2125 -f 2138/1366/2127 2139/1365/2125 2148/1362/2126 -f 2138/1366/2127 2148/1362/2126 2137/1363/2121 -f 2148/1362/2126 2149/1362/2128 2137/1363/2121 -f 2149/1362/2128 2145/1362/2120 2137/1363/2121 -f 2149/1362/2128 2132/1358/2107 2145/1362/2120 -f 2130/1358/2105 2145/1362/2120 2132/1358/2107 -f 2145/1362/2120 2130/1358/2105 2142/1361/2117 -f 2128/1356/2103 2142/1361/2117 2130/1358/2105 -f 2142/1361/2117 2128/1356/2103 2143/1361/2118 -f 2126/1356/2101 2143/1361/2118 2128/1356/2103 -f 2143/1361/2118 2126/1356/2101 2144/1361/2119 -f 2124/1356/2099 2144/1361/2119 2126/1356/2101 -f 2144/1361/2119 2124/1356/2099 2133/1359/2108 -f 2148/1362/2126 2147/1358/2123 2149/1362/2128 -f 2132/1358/2107 2149/1362/2128 2147/1358/2123 -f 2146/1367/2129 2141/1367/2129 2131/1368/2129 -f 2141/1367/2129 2127/1369/2129 2131/1368/2129 -f 2119/1370/2129 2127/1369/2129 2141/1367/2129 -f 2123/1371/2129 2127/1369/2129 2119/1370/2129 -f 2121/1370/2129 2123/1371/2129 2119/1370/2129 -f 2131/1368/2129 2127/1369/2129 2129/1372/2129 -f 2125/1371/2129 2127/1369/2129 2123/1371/2129 -f 2110/1373/2130 2150/1374/2129 2112/1373/2130 -f 2151/1374/2131 2112/1373/2130 2150/1374/2129 -f 2151/1374/2131 2150/1374/2129 2152/1348/2132 -f 2153/1348/2132 2152/1348/2132 2150/1374/2129 -f 2111/1373/2133 2154/1374/2134 2109/1373/2133 -f 2155/1374/2135 2109/1373/2133 2154/1374/2134 -f 2154/1374/2134 2156/1348/2136 2155/1374/2135 -f 2157/1348/2136 2155/1374/2135 2156/1348/2136 -f 2109/1375/2137 2155/1376/2137 2110/1377/2137 -f 2150/1378/2137 2110/1377/2137 2155/1376/2137 -f 2155/1376/2137 2157/1379/2137 2150/1378/2137 -f 2153/1380/2137 2150/1378/2137 2157/1379/2137 -f 2158/1373/2138 2159/1374/2135 2160/1373/2138 -f 2161/1374/2139 2160/1373/2138 2159/1374/2135 -f 2159/1374/2135 2162/1348/2140 2161/1374/2139 -f 2163/1348/2140 2161/1374/2139 2162/1348/2140 -f 2160/1375/2087 2161/1376/2087 2164/1377/2087 -f 2165/1378/2087 2164/1377/2087 2161/1376/2087 -f 2161/1376/2087 2163/1379/2087 2165/1378/2087 -f 2166/1380/2087 2165/1378/2087 2163/1379/2087 -f 2166/1348/2141 2167/1348/2141 2165/1374/2142 -f 2168/1374/2129 2165/1374/2142 2167/1348/2141 -f 2168/1374/2129 2169/1373/2143 2165/1374/2142 -f 2164/1373/2143 2165/1374/2142 2169/1373/2143 -f 2162/1375/2144 2159/1376/2144 2167/1377/2144 -f 2168/1378/2144 2167/1377/2144 2159/1376/2144 -f 2159/1376/2144 2158/1379/2144 2168/1378/2144 -f 2169/1380/2144 2168/1378/2144 2158/1379/2144 -f 2140/1381/2129 2116/1381/2129 2141/1367/2129 -f 2116/1381/2129 2119/1370/2129 2141/1367/2129 -f 2117/1382/2129 2119/1370/2129 2116/1381/2129 -f 2156/1375/2145 2154/1376/2145 2152/1377/2145 -f 2151/1378/2145 2152/1377/2145 2154/1376/2145 -f 2154/1376/2145 2111/1379/2145 2151/1378/2145 -f 2112/1380/2145 2151/1378/2145 2111/1379/2145 -f 2156/1348/2144 2152/1349/2144 2157/1348/2144 -f 2153/1349/2144 2157/1348/2144 2152/1349/2144 -f 2160/1348/2145 2164/1349/2145 2158/1348/2145 -f 2169/1349/2145 2158/1348/2145 2164/1349/2145 -f 2162/1348/2137 2167/1349/2137 2163/1348/2137 -f 2166/1349/2137 2163/1348/2137 2167/1349/2137 -f 2140/1352/2115 2113/1350/2088 2116/1352/2091 -f 2170/1348/2087 2171/1349/2087 2172/1348/2087 -f 2173/1349/2087 2172/1348/2087 2171/1349/2087 -f 2174/1350/2088 2175/1351/2089 2176/1350/2090 -f 2176/1350/2090 2177/1352/2091 2174/1350/2088 -f 2177/1352/2091 2176/1350/2090 2178/1353/2092 -f 2179/1354/2093 2178/1353/2092 2176/1350/2090 -f 2178/1353/2092 2179/1354/2093 2180/1353/2094 -f 2181/1354/2095 2180/1353/2094 2179/1354/2093 -f 2180/1353/2094 2181/1354/2095 2182/1353/2096 -f 2183/1354/2097 2182/1353/2096 2181/1354/2095 -f 2182/1353/2096 2183/1354/2097 2184/1355/2098 -f 2185/1356/2099 2184/1355/2098 2183/1354/2097 -f 2184/1355/2098 2185/1356/2099 2186/1355/2100 -f 2187/1356/2101 2186/1355/2100 2185/1356/2099 -f 2186/1355/2100 2187/1356/2101 2188/1355/2102 -f 2189/1356/2103 2188/1355/2102 2187/1356/2101 -f 2188/1355/2102 2189/1356/2103 2190/1357/2104 -f 2191/1358/2105 2190/1357/2104 2189/1356/2103 -f 2190/1357/2104 2191/1358/2105 2192/1357/2106 -f 2193/1358/2107 2192/1357/2106 2191/1358/2105 -f 2183/1354/2097 2194/1359/2108 2185/1356/2099 -f 2194/1359/2108 2183/1354/2097 2195/1359/2109 -f 2181/1354/2095 2195/1359/2109 2183/1354/2097 -f 2195/1359/2109 2181/1354/2095 2196/1359/2110 -f 2179/1354/2093 2196/1359/2110 2181/1354/2095 -f 2196/1359/2110 2179/1354/2093 2197/1351/2111 -f 2176/1350/2090 2197/1351/2111 2179/1354/2093 -f 2197/1351/2111 2176/1350/2090 2175/1351/2089 -f 2197/1351/2111 2175/1351/2089 2198/1360/2112 -f 2175/1351/2089 2199/1351/2113 2198/1360/2112 -f 2175/1351/2089 2174/1350/2088 2199/1351/2113 -f 2200/1350/2114 2199/1351/2113 2174/1350/2088 -f 2174/1350/2088 2201/1352/2115 2200/1350/2114 -f 2202/1352/2116 2200/1350/2114 2201/1352/2115 -f 2203/1361/2117 2204/1361/2118 2198/1360/2112 -f 2204/1361/2118 2205/1361/2119 2198/1360/2112 -f 2205/1361/2119 2194/1359/2108 2198/1360/2112 -f 2194/1359/2108 2195/1359/2109 2198/1360/2112 -f 2195/1359/2109 2196/1359/2110 2198/1360/2112 -f 2196/1359/2110 2197/1351/2111 2198/1360/2112 -f 2206/1362/2120 2203/1361/2117 2198/1363/2121 -f 2192/1357/2106 2193/1358/2107 2207/1357/2122 -f 2208/1358/2123 2207/1357/2122 2193/1358/2107 -f 2207/1357/2122 2208/1358/2123 2202/1364/2124 -f 2200/1365/2125 2202/1364/2124 2208/1358/2123 -f 2208/1358/2123 2209/1362/2126 2200/1365/2125 -f 2199/1366/2127 2200/1365/2125 2209/1362/2126 -f 2199/1366/2127 2209/1362/2126 2198/1363/2121 -f 2209/1362/2126 2210/1362/2128 2198/1363/2121 -f 2210/1362/2128 2206/1362/2120 2198/1363/2121 -f 2210/1362/2128 2193/1358/2107 2206/1362/2120 -f 2191/1358/2105 2206/1362/2120 2193/1358/2107 -f 2206/1362/2120 2191/1358/2105 2203/1361/2117 -f 2189/1356/2103 2203/1361/2117 2191/1358/2105 -f 2203/1361/2117 2189/1356/2103 2204/1361/2118 -f 2187/1356/2101 2204/1361/2118 2189/1356/2103 -f 2204/1361/2118 2187/1356/2101 2205/1361/2119 -f 2185/1356/2099 2205/1361/2119 2187/1356/2101 -f 2205/1361/2119 2185/1356/2099 2194/1359/2108 -f 2209/1362/2126 2208/1358/2123 2210/1362/2128 -f 2193/1358/2107 2210/1362/2128 2208/1358/2123 -f 2207/1367/2129 2202/1367/2129 2192/1368/2129 -f 2202/1367/2129 2188/1369/2129 2192/1368/2129 -f 2180/1370/2129 2188/1369/2129 2202/1367/2129 -f 2184/1371/2129 2188/1369/2129 2180/1370/2129 -f 2182/1370/2129 2184/1371/2129 2180/1370/2129 -f 2192/1368/2129 2188/1369/2129 2190/1372/2129 -f 2186/1371/2129 2188/1369/2129 2184/1371/2129 -f 2171/1373/2130 2211/1374/2129 2173/1373/2130 -f 2212/1374/2131 2173/1373/2130 2211/1374/2129 -f 2212/1374/2131 2211/1374/2129 2213/1348/2132 -f 2214/1348/2132 2213/1348/2132 2211/1374/2129 -f 2172/1373/2133 2215/1374/2134 2170/1373/2133 -f 2216/1374/2135 2170/1373/2133 2215/1374/2134 -f 2215/1374/2134 2217/1348/2136 2216/1374/2135 -f 2218/1348/2136 2216/1374/2135 2217/1348/2136 -f 2170/1375/2137 2216/1376/2137 2171/1377/2137 -f 2211/1378/2137 2171/1377/2137 2216/1376/2137 -f 2216/1376/2137 2218/1379/2137 2211/1378/2137 -f 2214/1380/2137 2211/1378/2137 2218/1379/2137 -f 2219/1373/2138 2220/1374/2135 2221/1373/2138 -f 2222/1374/2139 2221/1373/2138 2220/1374/2135 -f 2220/1374/2135 2223/1348/2140 2222/1374/2139 -f 2224/1348/2140 2222/1374/2139 2223/1348/2140 -f 2221/1375/2087 2222/1376/2087 2225/1377/2087 -f 2226/1378/2087 2225/1377/2087 2222/1376/2087 -f 2222/1376/2087 2224/1379/2087 2226/1378/2087 -f 2227/1380/2087 2226/1378/2087 2224/1379/2087 -f 2227/1348/2141 2228/1348/2141 2226/1374/2142 -f 2229/1374/2129 2226/1374/2142 2228/1348/2141 -f 2229/1374/2129 2230/1373/2143 2226/1374/2142 -f 2225/1373/2143 2226/1374/2142 2230/1373/2143 -f 2223/1375/2144 2220/1376/2144 2228/1377/2144 -f 2229/1378/2144 2228/1377/2144 2220/1376/2144 -f 2220/1376/2144 2219/1379/2144 2229/1378/2144 -f 2230/1380/2144 2229/1378/2144 2219/1379/2144 -f 2201/1381/2129 2177/1381/2129 2202/1367/2129 -f 2177/1381/2129 2180/1370/2129 2202/1367/2129 -f 2178/1382/2129 2180/1370/2129 2177/1381/2129 -f 2217/1375/2145 2215/1376/2145 2213/1377/2145 -f 2212/1378/2145 2213/1377/2145 2215/1376/2145 -f 2215/1376/2145 2172/1379/2145 2212/1378/2145 -f 2173/1380/2145 2212/1378/2145 2172/1379/2145 -f 2217/1348/2144 2213/1349/2144 2218/1348/2144 -f 2214/1349/2144 2218/1348/2144 2213/1349/2144 -f 2221/1348/2145 2225/1349/2145 2219/1348/2145 -f 2230/1349/2145 2219/1348/2145 2225/1349/2145 -f 2223/1348/2137 2228/1349/2137 2224/1348/2137 -f 2227/1349/2137 2224/1348/2137 2228/1349/2137 -f 2201/1352/2115 2174/1350/2088 2177/1352/2091 -# 330 faces - -# -# object P_51_Mustang_Left_Wing_Flap -# - -v 4.70 -0.34 3.26 -v 5.20 -0.60 -0.73 -v 4.68 -0.83 3.28 -v 29.00 -0.53 5.74 -v 29.38 -0.84 2.43 -v 28.97 -1.13 5.77 -# 6 vertices - -vn -0.99 0.04 -0.13 -vn 0.01 1.00 -0.06 -vn 0.02 1.00 -0.09 -vn 0.01 1.00 -0.07 -vn -0.10 0.04 0.99 -vn -0.10 0.06 0.99 -vn -0.00 -1.00 -0.06 -vn -0.00 -1.00 -0.08 -vn -0.00 -1.00 -0.09 -vn 0.99 -0.04 0.12 -# 10 vertex normals - -vt 0.23 0.01 0.00 -vt 0.29 0.02 0.00 -vt 0.23 0.02 0.00 -vt 0.98 0.45 0.00 -vt 0.65 0.50 0.00 -vt 0.97 0.38 0.00 -vt 0.65 0.44 0.00 -vt 0.46 0.01 0.00 -vt 0.46 0.00 0.00 -vt 0.23 0.00 0.00 -vt 0.01 0.04 0.00 -vt 0.01 0.31 0.00 -vt 0.06 0.05 0.00 -vt 0.05 0.32 0.00 -vt 0.28 0.01 0.00 -vt 0.33 0.02 0.00 -vt 0.33 0.01 0.00 -# 17 texture coords - -g P_51_Mustang_Left_Wing_Flap -f 2231/1383/2146 2232/1384/2146 2233/1385/2146 -f 2231/1386/2147 2234/1387/2148 2232/1388/2149 -f 2235/1389/2148 2232/1388/2149 2234/1387/2148 -f 2233/1390/2150 2236/1383/2151 2231/1391/2150 -f 2234/1392/2151 2231/1391/2150 2236/1383/2151 -f 2232/1393/2152 2235/1394/2153 2233/1395/2152 -f 2236/1396/2154 2233/1395/2152 2235/1394/2153 -f 2235/1397/2155 2234/1398/2155 2236/1399/2155 -# 8 faces - -# -# object P_51_Mustang_Right_Elevator -# - -v -1.73 4.93 -32.15 -v -1.43 4.98 -35.87 -v -1.80 5.11 -32.31 -v -4.44 4.96 -31.91 -v -4.06 5.00 -35.35 -v -7.81 5.09 -34.62 -v -7.82 5.05 -31.65 -v -11.23 5.16 -33.95 -v -11.33 5.14 -31.30 -v -14.07 5.22 -33.39 -v -14.38 5.21 -32.45 -v -13.95 5.24 -30.69 -v -13.81 5.66 -30.77 -v -11.12 5.68 -31.09 -v -7.79 5.68 -31.43 -v -4.42 5.63 -31.75 -v -1.74 5.55 -32.08 -# 17 vertices - -vn 0.91 0.41 0.08 -vn -0.01 -1.00 -0.01 -vn -0.02 -1.00 -0.01 -vn -0.03 -1.00 -0.01 -vn -0.03 -1.00 -0.00 -vn -0.02 -1.00 -0.02 -vn -0.02 -1.00 -0.00 -vn -0.03 -1.00 0.03 -vn -0.03 0.99 -0.16 -vn -0.02 0.98 -0.17 -vn -0.02 0.99 -0.17 -vn -0.02 0.98 -0.18 -vn -0.01 0.98 -0.18 -vn -0.01 0.98 -0.17 -vn -0.03 0.98 -0.18 -vn -0.00 0.99 -0.16 -vn -0.01 0.99 -0.16 -vn 0.01 0.99 -0.15 -vn 0.98 -0.18 0.11 -# 19 vertex normals - -vt 0.96 0.79 0.00 -vt 0.96 0.78 0.00 -vt 0.02 0.62 0.00 -vt 0.06 0.63 0.00 -vt 0.01 0.57 0.00 -vt 0.05 0.58 0.00 -vt 0.11 0.59 0.00 -vt 0.11 0.63 0.00 -vt 0.16 0.60 0.00 -vt 0.16 0.63 0.00 -vt 0.20 0.60 0.00 -vt 0.20 0.62 0.00 -vt 0.20 0.64 0.00 -vt 0.29 0.23 0.00 -vt 0.29 0.27 0.00 -vt 0.25 0.22 0.00 -vt 0.25 0.27 0.00 -vt 0.29 0.32 0.00 -vt 0.24 0.32 0.00 -vt 0.28 0.37 0.00 -vt 0.23 0.37 0.00 -vt 0.22 0.41 0.00 -vt 0.28 0.41 0.00 -# 23 texture coords - -g P_51_Mustang_Right_Elevator -f 2237/1400/2156 2238/1401/2156 2239/1400/2156 -f 2237/1402/2157 2240/1403/2158 2238/1404/2157 -f 2241/1405/2158 2238/1404/2157 2240/1403/2158 -f 2241/1405/2158 2240/1403/2158 2242/1406/2159 -f 2243/1407/2159 2242/1406/2159 2240/1403/2158 -f 2242/1406/2159 2243/1407/2159 2244/1408/2158 -f 2245/1409/2160 2244/1408/2158 2243/1407/2159 -f 2246/1410/2161 2244/1408/2158 2245/1409/2160 -f 2247/1411/2162 2246/1410/2161 2245/1409/2160 -f 2248/1412/2163 2247/1411/2162 2245/1409/2160 -f 2249/1413/2164 2250/1414/2165 2246/1415/2166 -f 2244/1416/2167 2246/1415/2166 2250/1414/2165 -f 2250/1414/2165 2251/1417/2168 2244/1416/2167 -f 2242/1418/2168 2244/1416/2167 2251/1417/2168 -f 2251/1417/2168 2252/1419/2168 2242/1418/2168 -f 2241/1420/2169 2242/1418/2168 2252/1419/2168 -f 2241/1420/2170 2252/1419/2171 2238/1421/2172 -f 2253/1422/2173 2238/1421/2172 2252/1419/2171 -f 2253/1400/2174 2239/1400/2174 2238/1401/2174 -# 19 faces - -# -# object P_51_Mustang_Back_Wheel -# - -v 0.75 -3.90 -21.82 -v 0.72 -4.53 -21.59 -v 0.78 -3.45 -22.32 -v 0.67 -5.83 -22.72 -v 0.69 -5.68 -23.36 -v 0.67 -5.64 -22.12 -v 0.79 -3.49 -23.56 -v 0.79 -3.30 -22.96 -v 0.69 -5.17 -21.70 -v 0.29 -3.41 -23.61 -v 0.29 -3.21 -22.96 -v 0.27 -3.37 -22.27 -v 0.24 -3.85 -21.74 -v 0.21 -4.52 -21.50 -v 0.18 -5.20 -21.61 -v 0.16 -5.72 -22.06 -v 0.16 -5.92 -22.71 -v 0.17 -5.76 -23.40 -v 0.72 -5.24 -23.86 -v 0.20 -5.28 -23.93 -v 0.75 -4.61 -24.09 -v 0.24 -4.61 -24.17 -v 0.78 -3.97 -23.98 -v 0.27 -3.92 -24.06 -v -0.25 -3.96 -23.97 -v -0.23 -3.49 -23.55 -v -0.23 -3.30 -22.95 -v -0.24 -3.45 -22.31 -v -0.27 -3.89 -21.81 -v -0.30 -4.52 -21.58 -v -0.33 -5.16 -21.69 -v -0.35 -5.63 -22.11 -v -0.35 -5.82 -22.71 -v -0.33 -5.68 -23.35 -v -0.31 -5.23 -23.85 -v -0.28 -4.60 -24.08 -# 36 vertices - -vn 1.00 -0.05 0.01 -vn 0.18 0.82 -0.54 -vn 0.00 0.84 -0.55 -vn 0.19 0.98 -0.04 -vn 0.01 1.00 -0.04 -vn 0.18 0.87 0.46 -vn 0.01 0.89 0.46 -vn 0.18 0.55 0.82 -vn 0.01 0.56 0.83 -vn 0.18 0.09 0.98 -vn 0.01 0.09 1.00 -vn 0.18 -0.42 0.89 -vn 0.00 -0.43 0.90 -vn 0.18 -0.82 0.54 -vn -0.00 -0.84 0.55 -vn 0.17 -0.99 0.03 -vn -0.01 -1.00 0.04 -vn 0.16 -0.87 -0.46 -vn -0.01 -0.89 -0.46 -vn 0.16 -0.55 -0.82 -vn -0.01 -0.56 -0.83 -vn 0.17 -0.09 -0.98 -vn -0.01 -0.09 -1.00 -vn 0.18 0.42 -0.89 -vn -0.00 0.43 -0.90 -vn -0.18 0.42 -0.89 -vn -0.18 0.82 -0.54 -vn -0.17 0.99 -0.03 -vn -0.16 0.87 0.46 -vn -0.16 0.55 0.82 -vn -0.17 0.09 0.98 -vn -0.18 -0.42 0.89 -vn -0.18 -0.82 0.54 -vn -0.19 -0.98 0.04 -vn -0.18 -0.87 -0.46 -vn -0.18 -0.55 -0.82 -vn -0.18 -0.09 -0.98 -vn -1.00 0.05 -0.01 -# 38 vertex normals - -vt 0.79 0.99 0.00 -vt 0.81 0.99 0.00 -vt 0.78 0.97 0.00 -vt 0.85 0.95 0.00 -vt 0.85 0.93 0.00 -vt 0.85 0.97 0.00 -vt 0.78 0.93 0.00 -vt 0.77 0.95 0.00 -vt 0.83 0.99 0.00 -vt 0.31 0.75 0.00 -vt 0.31 0.76 0.00 -vt 0.30 0.75 0.00 -vt 0.30 0.76 0.00 -vt 0.33 0.75 0.00 -vt 0.32 0.76 0.00 -vt 0.34 0.75 0.00 -vt 0.34 0.76 0.00 -vt 0.36 0.75 0.00 -vt 0.36 0.76 0.00 -vt 0.37 0.75 0.00 -vt 0.37 0.76 0.00 -vt 0.38 0.75 0.00 -vt 0.39 0.76 0.00 -vt 0.33 0.77 0.00 -vt 0.31 0.77 0.00 -vt 0.30 0.77 0.00 -vt 0.34 0.77 0.00 -vt 0.36 0.77 0.00 -vt 0.37 0.77 0.00 -vt 0.38 0.77 0.00 -vt 0.83 0.92 0.00 -vt 0.79 0.92 0.00 -vt 0.81 0.91 0.00 -# 33 texture coords - -g P_51_Mustang_Back_Wheel -f 2254/1423/2175 2255/1424/2175 2256/1425/2175 -f 2257/1426/2175 2258/1427/2175 2259/1428/2175 -f 2258/1427/2175 2255/1424/2175 2259/1428/2175 -f 2260/1429/2175 2255/1424/2175 2258/1427/2175 -f 2256/1425/2175 2255/1424/2175 2260/1429/2175 -f 2261/1430/2175 2256/1425/2175 2260/1429/2175 -f 2259/1428/2175 2255/1424/2175 2262/1431/2175 -f 2260/1432/2176 2263/1433/2177 2261/1434/2178 -f 2264/1435/2179 2261/1434/2178 2263/1433/2177 -f 2261/1434/2178 2264/1435/2179 2256/1432/2180 -f 2265/1433/2181 2256/1432/2180 2264/1435/2179 -f 2256/1432/2180 2265/1433/2181 2254/1436/2182 -f 2266/1437/2183 2254/1436/2182 2265/1433/2181 -f 2254/1436/2182 2266/1437/2183 2255/1438/2184 -f 2267/1439/2185 2255/1438/2184 2266/1437/2183 -f 2255/1438/2184 2267/1439/2185 2262/1440/2186 -f 2268/1441/2187 2262/1440/2186 2267/1439/2185 -f 2262/1440/2186 2268/1441/2187 2259/1442/2188 -f 2269/1443/2189 2259/1442/2188 2268/1441/2187 -f 2259/1442/2188 2269/1443/2189 2257/1444/2190 -f 2270/1445/2191 2257/1444/2190 2269/1443/2189 -f 2257/1444/2190 2270/1445/2191 2258/1442/2192 -f 2271/1443/2193 2258/1442/2192 2270/1445/2191 -f 2258/1442/2192 2271/1443/2193 2272/1440/2194 -f 2273/1441/2195 2272/1440/2194 2271/1443/2193 -f 2272/1440/2194 2273/1441/2195 2274/1438/2196 -f 2275/1439/2197 2274/1438/2196 2273/1441/2195 -f 2274/1438/2196 2275/1439/2197 2276/1436/2198 -f 2277/1437/2199 2276/1436/2198 2275/1439/2197 -f 2276/1436/2198 2277/1437/2199 2260/1432/2176 -f 2263/1433/2177 2260/1432/2176 2277/1437/2199 -f 2277/1437/2199 2278/1446/2200 2263/1433/2177 -f 2279/1447/2201 2263/1433/2177 2278/1446/2200 -f 2263/1433/2177 2279/1447/2201 2264/1435/2179 -f 2280/1448/2202 2264/1435/2179 2279/1447/2201 -f 2264/1435/2179 2280/1448/2202 2265/1433/2181 -f 2281/1447/2203 2265/1433/2181 2280/1448/2202 -f 2265/1433/2181 2281/1447/2203 2266/1437/2183 -f 2282/1446/2204 2266/1437/2183 2281/1447/2203 -f 2266/1437/2183 2282/1446/2204 2267/1439/2185 -f 2283/1449/2205 2267/1439/2185 2282/1446/2204 -f 2267/1439/2185 2283/1449/2205 2268/1441/2187 -f 2284/1450/2206 2268/1441/2187 2283/1449/2205 -f 2268/1441/2187 2284/1450/2206 2269/1443/2189 -f 2285/1451/2207 2269/1443/2189 2284/1450/2206 -f 2269/1443/2189 2285/1451/2207 2270/1445/2191 -f 2286/1452/2208 2270/1445/2191 2285/1451/2207 -f 2270/1445/2191 2286/1452/2208 2271/1443/2193 -f 2287/1451/2209 2271/1443/2193 2286/1452/2208 -f 2271/1443/2193 2287/1451/2209 2273/1441/2195 -f 2288/1450/2210 2273/1441/2195 2287/1451/2209 -f 2273/1441/2195 2288/1450/2210 2275/1439/2197 -f 2289/1449/2211 2275/1439/2197 2288/1450/2210 -f 2275/1439/2197 2289/1449/2211 2277/1437/2199 -f 2278/1446/2200 2277/1437/2199 2289/1449/2211 -f 2285/1428/2212 2284/1431/2212 2286/1426/2212 -f 2286/1426/2212 2284/1431/2212 2288/1453/2212 -f 2288/1453/2212 2284/1431/2212 2280/1430/2212 -f 2278/1454/2212 2288/1453/2212 2280/1430/2212 -f 2279/1429/2212 2278/1454/2212 2280/1430/2212 -f 2289/1455/2212 2288/1453/2212 2278/1454/2212 -f 2287/1427/2212 2286/1426/2212 2288/1453/2212 -f 2272/1453/2175 2274/1455/2175 2258/1427/2175 -f 2274/1455/2175 2260/1429/2175 2258/1427/2175 -f 2276/1454/2175 2260/1429/2175 2274/1455/2175 -f 2281/1425/2212 2280/1430/2212 2282/1423/2212 -f 2280/1430/2212 2284/1431/2212 2282/1423/2212 -f 2282/1423/2212 2284/1431/2212 2283/1424/2212 -# 68 faces - -# -# object P_51_Mustang_Left_Elevator -# - -v 3.14 4.95 -35.92 -v 3.33 4.89 -32.33 -v 3.39 5.51 -32.16 -v 5.75 4.92 -35.46 -v 6.03 4.88 -32.03 -v 9.49 4.95 -34.81 -v 9.40 4.92 -31.81 -v 12.89 4.98 -34.22 -v 12.73 4.96 -31.49 -v 15.72 4.99 -33.73 -v 15.64 4.97 -32.81 -v 15.50 5.01 -31.28 -v 15.57 5.42 -31.45 -v 12.75 5.49 -31.56 -v 9.43 5.54 -31.80 -v 6.06 5.54 -32.00 -v 3.41 5.07 -32.37 -# 17 vertices - -vn -1.00 0.08 0.05 -vn -0.01 -1.00 -0.01 -vn 0.00 -1.00 -0.01 -vn -0.00 -1.00 -0.01 -vn 0.01 -1.00 -0.01 -vn 0.01 -1.00 -0.00 -vn 0.02 -1.00 0.02 -vn 0.03 0.98 -0.18 -vn 0.03 0.98 -0.19 -vn 0.02 0.98 -0.19 -vn 0.02 0.98 -0.18 -vn -0.00 0.98 -0.18 -vn 0.02 0.99 -0.16 -vn 0.01 0.99 -0.17 -vn 0.04 0.99 -0.15 -vn 0.78 -0.24 0.58 -# 16 vertex normals - -vt 0.94 0.79 0.00 -vt 0.93 0.78 0.00 -vt 0.01 0.57 0.00 -vt 0.05 0.58 0.00 -vt 0.02 0.62 0.00 -vt 0.06 0.63 0.00 -vt 0.11 0.59 0.00 -vt 0.11 0.63 0.00 -vt 0.16 0.59 0.00 -vt 0.16 0.64 0.00 -vt 0.20 0.60 0.00 -vt 0.20 0.62 0.00 -vt 0.20 0.64 0.00 -vt 0.29 0.61 0.00 -vt 0.26 0.62 0.00 -vt 0.29 0.57 0.00 -vt 0.25 0.57 0.00 -vt 0.29 0.52 0.00 -vt 0.24 0.52 0.00 -vt 0.28 0.47 0.00 -vt 0.23 0.47 0.00 -vt 0.28 0.43 0.00 -vt 0.22 0.43 0.00 -# 23 texture coords - -g P_51_Mustang_Left_Elevator -f 2290/1456/2213 2291/1457/2213 2292/1457/2213 -f 2290/1458/2214 2293/1459/2215 2291/1460/2216 -f 2294/1461/2217 2291/1460/2216 2293/1459/2215 -f 2293/1459/2215 2295/1462/2217 2294/1461/2217 -f 2296/1463/2217 2294/1461/2217 2295/1462/2217 -f 2295/1462/2217 2297/1464/2217 2296/1463/2217 -f 2298/1465/2218 2296/1463/2217 2297/1464/2217 -f 2299/1466/2215 2298/1465/2218 2297/1464/2217 -f 2300/1467/2215 2298/1465/2218 2299/1466/2215 -f 2301/1468/2219 2298/1465/2218 2300/1467/2215 -f 2302/1469/2220 2299/1470/2220 2303/1471/2221 -f 2297/1472/2221 2303/1471/2221 2299/1470/2220 -f 2303/1471/2221 2297/1472/2221 2304/1473/2222 -f 2295/1474/2222 2304/1473/2222 2297/1472/2221 -f 2304/1473/2222 2295/1474/2222 2305/1475/2223 -f 2293/1476/2223 2305/1475/2223 2295/1474/2222 -f 2305/1475/2224 2293/1476/2225 2292/1477/2226 -f 2290/1478/2227 2292/1477/2226 2293/1476/2225 -f 2306/1457/2228 2292/1457/2228 2291/1457/2228 -# 19 faces - -# -# object P_51_Mustang_Rudder -# - -v 1.94 16.37 -39.44 -v 1.85 16.90 -39.49 -v 1.94 16.37 -39.43 -v -0.40 3.34 -38.12 -v -0.34 5.20 -38.31 -v 0.05 2.94 -41.04 -v 0.27 4.65 -42.12 -v 0.29 7.13 -38.50 -v 0.58 6.72 -42.03 -v 0.67 6.59 -43.07 -v 0.75 7.71 -43.00 -v 1.10 7.67 -43.30 -v 1.43 15.17 -42.50 -v 1.44 7.70 -43.02 -v 1.76 15.18 -42.35 -v 1.50 7.81 -42.12 -v 1.78 15.24 -41.86 -v 1.75 8.22 -38.63 -v 1.92 15.54 -39.35 -v 1.82 16.10 -41.76 -v 1.82 16.67 -41.61 -v 0.34 8.23 -38.61 -v 0.87 15.54 -39.34 -v 0.67 7.82 -42.09 -v 0.92 16.38 -39.42 -v 1.07 15.25 -41.84 -v 1.10 15.19 -42.33 -v 1.49 17.19 -40.75 -v 1.48 17.32 -39.52 -v 1.06 16.91 -39.48 -v 1.15 16.68 -41.59 -v 1.10 16.10 -41.74 -v 1.14 16.05 -42.19 -v 1.47 16.03 -42.34 -v 1.80 16.05 -42.20 -v 1.81 16.63 -42.01 -v 1.82 16.83 -41.81 -v 1.17 16.83 -41.79 -v 1.50 16.81 -41.93 -v 1.17 16.63 -41.99 -v 1.49 16.61 -42.13 -v 0.94 4.41 -43.65 -v 0.48 4.74 -43.09 -v 1.05 6.55 -43.43 -v 1.41 4.73 -43.10 -v 1.44 3.03 -42.87 -v 1.58 4.64 -42.14 -v 1.61 2.93 -41.06 -v 2.02 3.32 -38.14 -v 1.63 1.73 -40.70 -v 1.99 1.54 -37.97 -v 1.44 1.15 -40.85 -v 1.75 0.67 -37.88 -v 0.74 0.99 -40.75 -v 0.67 0.46 -37.85 -v 0.05 1.17 -40.84 -v -0.39 0.69 -37.86 -v -0.54 1.56 -37.94 -v -0.09 1.74 -40.68 -v 0.78 1.47 -42.17 -v 0.24 1.84 -42.10 -v 1.35 1.83 -42.11 -v 0.84 2.58 -43.11 -v 0.29 3.04 -42.85 -v 2.09 4.08 -38.22 -v 2.14 5.18 -38.33 -v 1.49 6.71 -42.05 -v 1.69 7.13 -38.52 -v 1.41 6.58 -43.09 -# 69 vertices - -vn 1.00 0.09 -0.04 -vn 0.91 0.42 -0.05 -vn 0.99 0.16 -0.05 -vn -0.99 0.04 -0.16 -vn -0.97 0.15 -0.18 -vn -0.99 0.03 -0.16 -vn -0.98 0.10 -0.16 -vn -0.98 0.14 -0.13 -vn -0.99 0.11 -0.10 -vn -0.89 0.11 -0.45 -vn -0.88 0.09 -0.47 -vn -0.01 0.10 -1.00 -vn -0.01 0.13 -0.99 -vn 0.89 0.01 -0.46 -vn 0.83 0.04 -0.56 -vn 1.00 -0.03 -0.06 -vn 1.00 -0.04 -0.05 -vn 1.00 -0.04 -0.06 -vn 1.00 -0.03 -0.05 -vn 1.00 -0.02 -0.05 -vn 0.99 0.15 0.03 -vn -0.99 0.05 -0.10 -vn -0.99 0.06 -0.09 -vn -0.99 0.07 -0.10 -vn -0.99 0.14 -0.08 -vn -1.00 0.05 -0.08 -vn -0.82 0.12 -0.56 -vn 0.03 0.99 -0.13 -vn 0.02 0.99 -0.10 -vn -0.87 0.48 -0.08 -vn -0.97 0.24 -0.01 -vn -0.99 0.07 -0.08 -vn -0.79 0.19 -0.58 -vn -0.01 0.25 -0.97 -vn 0.80 0.12 -0.59 -vn 0.75 0.35 -0.55 -vn 0.71 0.64 -0.29 -vn -0.68 0.67 -0.30 -vn -0.00 0.83 -0.56 -vn -0.74 0.40 -0.55 -vn -0.01 0.51 -0.86 -vn 0.00 -0.04 -1.00 -vn -0.89 0.08 -0.45 -vn 0.00 0.09 -1.00 -vn 0.90 -0.01 -0.44 -vn 0.84 -0.22 -0.49 -vn 0.99 -0.01 -0.14 -vn 0.99 -0.06 -0.13 -vn 0.99 -0.05 -0.14 -vn 0.97 -0.15 -0.17 -vn 0.98 -0.17 -0.14 -vn 0.65 -0.71 -0.26 -vn 0.64 -0.75 -0.19 -vn -0.01 -0.97 -0.24 -vn -0.02 -0.98 -0.18 -vn -0.68 -0.67 -0.28 -vn -0.68 -0.70 -0.21 -vn -0.98 -0.08 -0.17 -vn -0.98 -0.06 -0.19 -vn -0.02 -0.80 -0.60 -vn -0.80 -0.39 -0.45 -vn 0.78 -0.46 -0.43 -vn -0.01 -0.46 -0.89 -vn -0.85 -0.14 -0.51 -vn -0.01 -0.10 -1.00 -vn 0.99 0.04 -0.13 -vn 1.00 0.03 -0.09 -vn 0.99 0.08 -0.07 -vn 0.90 0.02 -0.44 -vn 0.01 0.10 1.00 -# 70 vertex normals - -vt 0.93 0.98 0.00 -vt 0.93 0.99 0.00 -vt 0.93 0.83 0.00 -vt 0.93 0.85 0.00 -vt 0.96 0.83 0.00 -vt 0.98 0.85 0.00 -vt 0.93 0.87 0.00 -vt 0.97 0.87 0.00 -vt 0.98 0.87 0.00 -vt 0.98 0.88 0.00 -vt 0.99 0.88 0.00 -vt 0.97 0.97 0.00 -vt 0.97 0.88 0.00 -vt 0.96 0.97 0.00 -vt 0.93 0.89 0.00 -vt 0.93 0.97 0.00 -vt 0.96 0.98 0.00 -vt 0.96 0.99 0.00 -vt 0.95 0.99 0.00 -vt 0.93 1.00 0.00 -vt 0.97 0.98 0.00 -vt 0.97 0.99 0.00 -vt 1.00 0.84 0.00 -vt 0.99 0.85 0.00 -vt 0.99 0.87 0.00 -vt 0.99 0.83 0.00 -vt 0.96 0.81 0.00 -vt 0.93 0.81 0.00 -vt 0.96 0.80 0.00 -vt 0.93 0.80 0.00 -vt 0.96 0.79 0.00 -vt 0.93 0.79 0.00 -vt 0.98 0.80 0.00 -vt 0.98 0.81 0.00 -vt 0.99 0.82 0.00 -vt 0.93 0.84 0.00 -vt 0.65 0.02 0.00 -vt 0.65 0.03 0.00 -vt 0.66 0.02 0.00 -vt 0.64 0.03 0.00 -vt 0.56 0.01 0.00 -vt 0.55 0.03 0.00 -vt 0.55 0.01 0.00 -vt 0.53 0.03 0.00 -vt 0.52 0.01 0.00 -vt 0.48 0.03 0.00 -vt 0.48 0.01 0.00 -vt 0.48 0.02 0.00 -vt 0.56 0.03 0.00 -vt 0.49 0.03 0.00 -vt 0.51 0.03 0.00 -vt 0.49 0.01 0.00 -vt 0.53 0.01 0.00 -vt 0.64 0.01 0.00 -vt 0.65 0.01 0.00 -# 55 texture coords - -g P_51_Mustang_Rudder -f 2307/1479/2229 2308/1480/2230 2309/1479/2231 -f 2310/1481/2232 2311/1482/2233 2312/1483/2234 -f 2313/1484/2235 2312/1483/2234 2311/1482/2233 -f 2311/1482/2233 2314/1485/2236 2313/1484/2235 -f 2315/1486/2237 2313/1484/2235 2314/1485/2236 -f 2315/1486/2237 2316/1487/2238 2313/1484/2235 -f 2316/1487/2238 2315/1486/2237 2317/1488/2239 -f 2317/1488/2239 2318/1489/2240 2316/1487/2238 -f 2318/1489/2240 2317/1488/2239 2319/1490/2241 -f 2318/1489/2240 2319/1490/2241 2320/1488/2242 -f 2321/1490/2243 2320/1488/2242 2319/1490/2241 -f 2320/1488/2242 2321/1490/2243 2322/1491/2244 -f 2323/1492/2245 2322/1491/2244 2321/1490/2243 -f 2322/1491/2244 2323/1492/2245 2324/1493/2246 -f 2325/1494/2247 2324/1493/2246 2323/1492/2245 -f 2323/1492/2245 2326/1495/2248 2325/1494/2247 -f 2307/1479/2229 2325/1494/2247 2326/1495/2248 -f 2326/1495/2248 2327/1496/2249 2307/1479/2229 -f 2327/1496/2249 2308/1480/2230 2307/1479/2229 -f 2314/1485/2236 2328/1493/2250 2315/1486/2237 -f 2328/1493/2250 2329/1494/2251 2330/1491/2252 -f 2330/1491/2252 2315/1486/2237 2328/1493/2250 -f 2330/1491/2252 2317/1488/2239 2315/1486/2237 -f 2329/1494/2251 2331/1479/2253 2332/1492/2254 -f 2332/1492/2254 2330/1491/2252 2329/1494/2251 -f 2332/1492/2254 2333/1490/2255 2330/1491/2252 -f 2317/1488/2239 2330/1491/2252 2333/1490/2255 -f 2333/1490/2255 2319/1490/2241 2317/1488/2239 -f 2327/1496/2249 2334/1497/2256 2308/1480/2230 -f 2335/1498/2257 2308/1480/2230 2334/1497/2256 -f 2335/1498/2257 2334/1497/2256 2336/1480/2258 -f 2337/1496/2259 2336/1480/2258 2334/1497/2256 -f 2336/1480/2258 2337/1496/2259 2331/1479/2253 -f 2338/1495/2260 2331/1479/2253 2337/1496/2259 -f 2338/1495/2260 2332/1492/2254 2331/1479/2253 -f 2338/1495/2260 2339/1495/2261 2332/1492/2254 -f 2333/1490/2255 2332/1492/2254 2339/1495/2261 -f 2339/1495/2261 2340/1499/2262 2333/1490/2255 -f 2319/1490/2241 2333/1490/2255 2340/1499/2262 -f 2319/1490/2241 2340/1499/2262 2321/1490/2243 -f 2341/1495/2263 2321/1490/2243 2340/1499/2262 -f 2321/1490/2243 2341/1495/2263 2323/1492/2245 -f 2326/1495/2248 2323/1492/2245 2341/1495/2263 -f 2341/1495/2263 2342/1496/2264 2326/1495/2248 -f 2327/1496/2249 2326/1495/2248 2342/1496/2264 -f 2342/1496/2264 2343/1496/2265 2327/1496/2249 -f 2337/1496/2259 2334/1497/2256 2344/1496/2266 -f 2327/1496/2249 2343/1496/2265 2334/1497/2256 -f 2345/1496/2267 2334/1497/2256 2343/1496/2265 -f 2345/1496/2267 2344/1496/2266 2334/1497/2256 -f 2344/1496/2266 2345/1496/2267 2346/1496/2268 -f 2344/1496/2266 2346/1496/2268 2337/1496/2259 -f 2337/1496/2259 2346/1496/2268 2338/1495/2260 -f 2339/1495/2261 2338/1495/2260 2346/1496/2268 -f 2346/1496/2268 2347/1500/2269 2339/1495/2261 -f 2340/1499/2262 2339/1495/2261 2347/1500/2269 -f 2340/1499/2262 2347/1500/2269 2341/1495/2263 -f 2342/1496/2264 2341/1495/2263 2347/1500/2269 -f 2347/1500/2269 2345/1496/2267 2342/1496/2264 -f 2343/1496/2265 2342/1496/2264 2345/1496/2267 -f 2347/1500/2269 2346/1496/2268 2345/1496/2267 -f 2348/1501/2270 2349/1502/2271 2350/1503/2272 -f 2348/1501/2270 2350/1503/2272 2351/1502/2273 -f 2351/1502/2273 2352/1504/2274 2348/1501/2270 -f 2351/1502/2273 2353/1484/2275 2352/1504/2274 -f 2354/1483/2276 2352/1504/2274 2353/1484/2275 -f 2355/1481/2277 2354/1483/2276 2353/1484/2275 -f 2354/1483/2276 2355/1481/2277 2356/1505/2278 -f 2357/1506/2279 2356/1505/2278 2355/1481/2277 -f 2356/1505/2278 2357/1506/2279 2358/1507/2280 -f 2359/1508/2281 2358/1507/2280 2357/1506/2279 -f 2358/1507/2280 2359/1508/2281 2360/1509/2282 -f 2361/1510/2283 2360/1509/2282 2359/1508/2281 -f 2360/1509/2282 2361/1510/2283 2362/1507/2284 -f 2363/1508/2285 2362/1507/2284 2361/1510/2283 -f 2363/1508/2285 2364/1506/2286 2362/1507/2284 -f 2365/1505/2287 2362/1507/2284 2364/1506/2286 -f 2364/1506/2286 2310/1481/2232 2365/1505/2287 -f 2312/1483/2234 2365/1505/2287 2310/1481/2232 -f 2366/1511/2288 2362/1507/2284 2367/1512/2289 -f 2362/1507/2284 2366/1511/2288 2360/1509/2282 -f 2366/1511/2288 2358/1507/2280 2360/1509/2282 -f 2366/1511/2288 2368/1512/2290 2358/1507/2280 -f 2356/1505/2278 2358/1507/2280 2368/1512/2290 -f 2356/1505/2278 2368/1512/2290 2354/1483/2276 -f 2352/1504/2274 2354/1483/2276 2368/1512/2290 -f 2352/1504/2274 2368/1512/2290 2369/1513/2291 -f 2369/1513/2291 2348/1501/2270 2352/1504/2274 -f 2369/1513/2291 2370/1504/2292 2348/1501/2270 -f 2349/1502/2271 2348/1501/2270 2370/1504/2292 -f 2366/1511/2288 2369/1513/2291 2368/1512/2290 -f 2366/1511/2288 2367/1512/2289 2369/1513/2291 -f 2370/1504/2292 2369/1513/2291 2367/1512/2289 -f 2371/1514/2293 2355/1481/2277 2372/1482/2294 -f 2372/1482/2294 2355/1481/2277 2353/1484/2275 -f 2353/1484/2275 2373/1486/2295 2372/1482/2294 -f 2374/1485/2296 2372/1482/2294 2373/1486/2295 -f 2374/1485/2296 2373/1486/2295 2324/1493/2246 -f 2322/1491/2244 2324/1493/2246 2373/1486/2295 -f 2322/1491/2244 2373/1486/2295 2320/1488/2242 -f 2375/1487/2297 2320/1488/2242 2373/1486/2295 -f 2320/1488/2242 2375/1487/2297 2318/1489/2240 -f 2350/1503/2272 2318/1489/2240 2375/1487/2297 -f 2350/1503/2272 2316/1487/2238 2318/1489/2240 -f 2316/1487/2238 2350/1503/2272 2349/1502/2271 -f 2349/1502/2271 2313/1484/2235 2316/1487/2238 -f 2349/1502/2271 2370/1504/2292 2313/1484/2235 -f 2312/1483/2234 2313/1484/2235 2370/1504/2292 -f 2370/1504/2292 2367/1512/2289 2312/1483/2234 -f 2365/1505/2287 2312/1483/2234 2367/1512/2289 -f 2365/1505/2287 2367/1512/2289 2362/1507/2284 -f 2373/1486/2295 2353/1484/2275 2375/1487/2297 -f 2351/1502/2273 2375/1487/2297 2353/1484/2275 -f 2375/1487/2297 2351/1502/2273 2350/1503/2272 -f 2336/1515/2298 2331/1516/2298 2335/1517/2298 -f 2331/1516/2298 2329/1518/2298 2335/1517/2298 -f 2329/1518/2298 2324/1519/2298 2335/1517/2298 -f 2314/1520/2298 2324/1519/2298 2329/1518/2298 -f 2374/1521/2298 2324/1519/2298 2314/1520/2298 -f 2314/1520/2298 2311/1522/2298 2374/1521/2298 -f 2311/1522/2298 2371/1523/2298 2374/1521/2298 -f 2363/1524/2298 2371/1523/2298 2311/1522/2298 -f 2359/1525/2298 2371/1523/2298 2363/1524/2298 -f 2361/1526/2298 2359/1525/2298 2363/1524/2298 -f 2328/1527/2298 2314/1520/2298 2329/1518/2298 -f 2364/1528/2298 2363/1524/2298 2310/1529/2298 -f 2310/1529/2298 2363/1524/2298 2311/1522/2298 -f 2357/1530/2298 2371/1523/2298 2359/1525/2298 -f 2371/1523/2298 2372/1531/2298 2374/1521/2298 -f 2324/1519/2298 2325/1532/2298 2335/1517/2298 -f 2325/1532/2298 2309/1533/2298 2335/1517/2298 -f 2309/1533/2298 2308/1515/2298 2335/1517/2298 -# 132 faces - diff --git a/showcase/original/models/resources/plane.png b/showcase/original/models/resources/plane.png deleted file mode 100644 index 58951ea3..00000000 Binary files a/showcase/original/models/resources/plane.png and /dev/null differ diff --git a/showcase/original/models/resources/plane_diffuse.png b/showcase/original/models/resources/plane_diffuse.png deleted file mode 100644 index 8cf75c7d..00000000 Binary files a/showcase/original/models/resources/plane_diffuse.png and /dev/null differ diff --git a/showcase/original/shaders/resources/models/watermill.obj b/showcase/original/shaders/resources/models/watermill.obj deleted file mode 100644 index a0a80d44..00000000 --- a/showcase/original/shaders/resources/models/watermill.obj +++ /dev/null @@ -1,5316 +0,0 @@ -# (c) 2018 Medieval Assets Pack by Alberto Cano -# Licensed as Creative Commons Attribution-NonCommercial 4.0 - -# -# object watermill -# - -v -13.1924 2.3021 -2.7990 -v -6.7437 5.5026 -2.5075 -v -6.9255 5.7207 -2.5075 -v -13.3742 2.5202 -2.7990 -v -13.1924 2.3021 -9.7624 -v -13.3742 2.5202 -9.7624 -v -6.9255 5.7207 -10.0539 -v -6.7437 5.5026 -10.0539 -v -12.6656 2.5635 -3.5030 -v -6.7437 5.5026 -3.5030 -v -6.9255 5.7207 -3.5030 -v -6.9255 5.7207 -9.0585 -v -12.6656 2.5635 -9.0585 -v -6.7437 5.5026 -9.0585 -v 10.7261 -0.0000 -2.3791 -v 10.7261 8.6527 -2.3791 -v -6.7437 8.6527 -2.3791 -v -6.7437 -0.0000 -2.3791 -v 10.7261 0.0000 -6.2807 -v 10.7261 13.1014 -6.2807 -v -6.7437 -0.0000 -10.1824 -v -6.7437 8.6527 -10.1824 -v 10.7261 8.6527 -10.1824 -v 10.7261 0.0000 -10.1824 -v 6.6390 8.4318 -1.8382 -v 7.3490 12.3719 -6.2807 -v 1.9912 11.9781 -6.2807 -v 1.9912 8.4318 -1.8381 -v 1.9912 8.0019 -1.8381 -v 6.6390 8.0019 -1.8382 -v 12.3149 8.4318 -11.0430 -v 12.5793 13.9616 -6.2807 -v 12.5793 13.3516 -6.2807 -v 12.3149 8.0019 -11.0430 -v 12.3150 8.4318 -1.5184 -v 12.3150 8.0019 -1.5184 -v 6.6390 8.4318 -10.7233 -v 1.9912 8.4318 -10.7233 -v 6.6390 8.0019 -10.7233 -v 1.9912 8.0019 -10.7233 -v -2.6566 8.4318 -1.8381 -v -3.3666 12.3719 -6.2807 -v -2.6566 8.0019 -1.8381 -v -8.5969 13.3516 -6.2807 -v -8.5969 13.9616 -6.2807 -v -8.3325 8.4318 -11.0430 -v -8.3325 8.0019 -11.0430 -v -8.3325 8.0019 -1.5184 -v -8.3325 8.4318 -1.5184 -v -2.6566 8.4318 -10.7233 -v -2.6566 8.0019 -10.7233 -v -3.3666 11.8666 -6.2807 -v 1.9912 11.4750 -6.2807 -v 7.3490 11.8666 -6.2807 -v -6.7437 -0.0000 -6.2807 -v -6.7437 13.1141 -6.2807 -v 8.9974 12.5399 -7.0188 -v 10.2888 12.8128 -7.0188 -v 10.3359 12.5903 -7.0188 -v 9.0444 12.3173 -7.0188 -v 8.9004 12.9984 -6.4117 -v 10.1919 13.2713 -6.4117 -v 8.9475 12.7759 -6.4117 -v 10.1888 13.2863 -6.2807 -v 8.8973 13.0134 -6.2807 -v 8.9443 12.7909 -6.2807 -v 10.3359 12.5903 -5.5426 -v 10.2888 12.8128 -5.5426 -v 8.9974 12.5399 -5.5426 -v 9.0444 12.3173 -5.5426 -v 10.1919 13.2713 -6.1497 -v 8.9004 12.9984 -6.1497 -v 8.9475 12.7759 -6.1497 -v 7.8352 12.2633 -7.0188 -v 9.1355 12.4905 -7.0188 -v 9.1747 12.2665 -7.0188 -v 7.8743 12.0393 -7.0188 -v 7.7545 12.7250 -6.4117 -v 9.0548 12.9522 -6.4117 -v 7.7937 12.5010 -6.4117 -v 9.0522 12.9673 -6.2807 -v 7.7519 12.7401 -6.2807 -v 7.7910 12.5161 -6.2807 -v 9.1747 12.2665 -5.5426 -v 9.1355 12.4905 -5.5426 -v 7.8352 12.2633 -5.5426 -v 7.8743 12.0393 -5.5426 -v 9.0548 12.9522 -6.1497 -v 7.7545 12.7250 -6.1497 -v 7.7937 12.5010 -6.1497 -v 6.6801 12.0216 -7.0188 -v 7.9904 12.1810 -7.0188 -v 8.0179 11.9552 -7.0188 -v 6.7075 11.7958 -7.0188 -v 6.6235 12.4869 -6.4117 -v 7.9338 12.6462 -6.4117 -v 6.6509 12.2611 -6.4117 -v 7.9320 12.6614 -6.2807 -v 6.6216 12.5021 -6.2807 -v 6.6491 12.2763 -6.2807 -v 8.0179 11.9552 -5.5426 -v 7.9904 12.1810 -5.5426 -v 6.6801 12.0216 -5.5426 -v 6.7075 11.7958 -5.5426 -v 7.9338 12.6462 -6.1497 -v 6.6235 12.4869 -6.1497 -v 6.6509 12.2611 -6.1497 -v 5.5013 11.7586 -7.0188 -v 6.8116 11.9180 -7.0188 -v 6.8391 11.6922 -7.0188 -v 5.5287 11.5329 -7.0188 -v 5.4447 12.2239 -6.4117 -v 6.7551 12.3832 -6.4117 -v 5.4722 11.9981 -6.4117 -v 6.7532 12.3984 -6.2807 -v 5.4429 12.2391 -6.2807 -v 5.4703 12.0133 -6.2807 -v 6.8391 11.6922 -5.5426 -v 6.8116 11.9180 -5.5426 -v 5.5013 11.7586 -5.5426 -v 5.5287 11.5329 -5.5426 -v 6.7551 12.3832 -6.1497 -v 5.4447 12.2239 -6.1497 -v 5.4722 11.9981 -6.1497 -v 4.2453 11.6604 -7.0188 -v 5.5556 11.8198 -7.0188 -v 5.5831 11.5940 -7.0188 -v 4.2727 11.4346 -7.0188 -v 4.1887 12.1257 -6.4117 -v 5.4991 12.2850 -6.4117 -v 4.2161 11.8999 -6.4117 -v 5.4972 12.3002 -6.2807 -v 4.1868 12.1409 -6.2807 -v 4.2143 11.9151 -6.2807 -v 5.5831 11.5940 -5.5426 -v 5.5556 11.8198 -5.5426 -v 4.2453 11.6604 -5.5426 -v 4.2727 11.4346 -5.5426 -v 5.4991 12.2850 -6.1497 -v 4.1887 12.1257 -6.1497 -v 4.2161 11.8999 -6.1497 -v 3.3182 11.6102 -7.0188 -v 4.6363 11.6808 -7.0188 -v 4.6485 11.4537 -7.0188 -v 3.3304 11.3830 -7.0188 -v 3.2931 12.0782 -6.4117 -v 4.6113 12.1488 -6.4117 -v 3.3053 11.8511 -6.4117 -v 4.6104 12.1641 -6.2807 -v 3.2923 12.0935 -6.2807 -v 3.3045 11.8664 -6.2807 -v 4.6485 11.4537 -5.5426 -v 4.6363 11.6808 -5.5426 -v 3.3182 11.6102 -5.5426 -v 3.3304 11.3830 -5.5426 -v 4.6113 12.1488 -6.1497 -v 3.2931 12.0782 -6.1497 -v 3.3053 11.8511 -6.1497 -v -4.9956 12.5685 -7.0188 -v -3.6852 12.4092 -7.0188 -v -3.7127 12.1834 -7.0188 -v -5.0230 12.3427 -7.0188 -v -3.6561 12.6486 -6.4117 -v -3.6286 12.8744 -6.4117 -v -4.9390 13.0337 -6.4117 -v -4.9664 12.8080 -6.4117 -v -3.6268 12.8896 -6.2807 -v -3.6542 12.6638 -6.2807 -v -4.9371 13.0489 -6.2807 -v -4.9646 12.8232 -6.2807 -v -3.7127 12.1834 -5.5426 -v -3.6852 12.4092 -5.5426 -v -4.9956 12.5685 -5.5426 -v -5.0230 12.3427 -5.5426 -v -3.6561 12.6486 -6.1497 -v -3.6286 12.8744 -6.1497 -v -4.9390 13.0337 -6.1497 -v -4.9664 12.8080 -6.1497 -v -3.8354 12.0721 -7.0188 -v -3.8277 12.2994 -7.0188 -v -2.5085 12.2548 -7.0188 -v -2.5161 12.0275 -7.0188 -v -2.4926 12.7232 -6.4117 -v -3.8119 12.7678 -6.4117 -v -2.5003 12.4959 -6.4117 -v -3.8114 12.7831 -6.2807 -v -2.4921 12.7386 -6.2807 -v -2.4998 12.5112 -6.2807 -v -2.5085 12.2548 -5.5426 -v -3.8277 12.2994 -5.5426 -v -3.8354 12.0721 -5.5426 -v -2.5161 12.0275 -5.5426 -v -2.4926 12.7232 -6.1497 -v -3.8119 12.7678 -6.1497 -v -2.5003 12.4959 -6.1497 -v -2.5604 11.9055 -7.0188 -v -2.5410 12.1322 -7.0188 -v -1.2258 12.0191 -7.0188 -v -1.2452 11.7925 -7.0188 -v -1.1857 12.4861 -6.4117 -v -2.5008 12.5991 -6.4117 -v -1.2051 12.2595 -6.4117 -v -2.4995 12.6144 -6.2807 -v -1.1844 12.5014 -6.2807 -v -1.2038 12.2748 -6.2807 -v -1.2258 12.0191 -5.5426 -v -2.5410 12.1322 -5.5426 -v -2.5604 11.9055 -5.5426 -v -1.2452 11.7925 -5.5426 -v -1.1857 12.4861 -6.1497 -v -2.5008 12.5991 -6.1497 -v -1.2051 12.2595 -6.1497 -v -1.4316 11.6943 -7.0188 -v -1.4041 11.9201 -7.0188 -v -0.0938 11.7608 -7.0188 -v -0.1212 11.5350 -7.0188 -v -0.0372 12.2260 -6.4117 -v -1.3476 12.3854 -6.4117 -v -0.0647 12.0003 -6.4117 -v -1.3457 12.4006 -6.2807 -v -0.0354 12.2412 -6.2807 -v -0.0628 12.0155 -6.2807 -v -0.0938 11.7608 -5.5426 -v -1.4041 11.9201 -5.5426 -v -1.4316 11.6943 -5.5426 -v -0.1212 11.5350 -5.5426 -v -0.0372 12.2260 -6.1497 -v -1.3476 12.3854 -6.1497 -v -0.0647 12.0003 -6.1497 -v -0.2528 11.4404 -7.0188 -v -0.2254 11.6662 -7.0188 -v 1.0850 11.5068 -7.0188 -v 1.0575 11.2811 -7.0188 -v 1.1416 11.9721 -6.4117 -v -0.1688 12.1314 -6.4117 -v 1.1141 11.7463 -6.4117 -v -0.1669 12.1466 -6.2807 -v 1.1434 11.9873 -6.2807 -v 1.1159 11.7615 -6.2807 -v 1.0850 11.5068 -5.5426 -v -0.2254 11.6662 -5.5426 -v -0.2528 11.4404 -5.5426 -v 1.0575 11.2811 -5.5426 -v 1.1416 11.9721 -6.1497 -v -0.1688 12.1314 -6.1497 -v 1.1141 11.7463 -6.1497 -v 1.0355 11.3300 -7.0188 -v 1.0432 11.5573 -7.0188 -v 2.3624 11.5128 -7.0188 -v 2.3548 11.2855 -7.0188 -v 2.3783 11.9812 -6.4117 -v 1.0590 12.0257 -6.4117 -v 2.3706 11.7539 -6.4117 -v 1.0595 12.0410 -6.2807 -v 2.3788 11.9965 -6.2807 -v 2.3711 11.7692 -6.2807 -v 2.3624 11.5128 -5.5426 -v 1.0432 11.5573 -5.5426 -v 1.0355 11.3300 -5.5426 -v 2.3548 11.2855 -5.5426 -v 2.3783 11.9812 -6.1497 -v 1.0590 12.0257 -6.1497 -v 2.3706 11.7539 -6.1497 -v 2.1005 11.2570 -7.0188 -v 2.0730 11.4827 -7.0188 -v 3.3834 11.6421 -7.0188 -v 3.4108 11.4163 -7.0188 -v 3.3268 12.1074 -6.4117 -v 2.0165 11.9480 -6.4117 -v 3.3543 11.8816 -6.4117 -v 2.0146 11.9632 -6.2807 -v 3.3250 12.1226 -6.2807 -v 3.3524 11.8968 -6.2807 -v 3.3834 11.6421 -5.5426 -v 2.0730 11.4827 -5.5426 -v 2.1005 11.2570 -5.5426 -v 3.4108 11.4163 -5.5426 -v 3.3268 12.1074 -6.1497 -v 2.0165 11.9480 -6.1497 -v 3.3543 11.8816 -6.1497 -v -6.2966 12.8862 -7.0188 -v -4.9862 12.7268 -7.0188 -v -5.0137 12.5011 -7.0188 -v -6.3240 12.6604 -7.0188 -v -4.9571 12.9663 -6.4117 -v -4.9296 13.1921 -6.4117 -v -6.2400 13.3514 -6.4117 -v -6.2674 13.1257 -6.4117 -v -4.9278 13.2073 -6.2807 -v -4.9552 12.9815 -6.2807 -v -6.2381 13.3666 -6.2807 -v -6.2656 13.1409 -6.2807 -v -5.0137 12.5011 -5.5426 -v -4.9862 12.7268 -5.5426 -v -6.2966 12.8862 -5.5426 -v -6.3240 12.6604 -5.5426 -v -4.9571 12.9663 -6.1497 -v -4.9296 13.1921 -6.1497 -v -6.2400 13.3514 -6.1497 -v -6.2674 13.1257 -6.1497 -v -8.5583 13.8088 -7.0188 -v -7.3338 13.3157 -7.0188 -v -7.4188 13.1048 -7.0188 -v -8.6432 13.5978 -7.0188 -v -7.2437 13.5395 -6.4117 -v -7.1587 13.7505 -6.4117 -v -8.3832 14.2435 -6.4117 -v -8.4682 14.0326 -6.4117 -v -7.1530 13.7647 -6.2807 -v -7.2380 13.5537 -6.2807 -v -8.3775 14.2577 -6.2807 -v -8.4625 14.0468 -6.2807 -v -7.4188 13.1048 -5.5426 -v -7.3338 13.3157 -5.5426 -v -8.5583 13.8088 -5.5426 -v -8.6432 13.5978 -5.5426 -v -7.2437 13.5395 -6.1497 -v -7.1587 13.7505 -6.1497 -v -8.3832 14.2435 -6.1497 -v -8.4682 14.0326 -6.1497 -v -7.4860 13.1990 -7.0188 -v -6.1757 13.0397 -7.0188 -v -6.2031 12.8139 -7.0188 -v -7.5135 12.9732 -7.0188 -v -6.1465 13.2792 -6.4117 -v -6.1191 13.5049 -6.4117 -v -7.4294 13.6643 -6.4117 -v -7.4569 13.4385 -6.4117 -v -6.1172 13.5201 -6.2807 -v -6.1447 13.2943 -6.2807 -v -7.4276 13.6795 -6.2807 -v -7.4550 13.4537 -6.2807 -v -6.2031 12.8139 -5.5426 -v -6.1757 13.0397 -5.5426 -v -7.4860 13.1990 -5.5426 -v -7.5135 12.9732 -5.5426 -v -6.1465 13.2792 -6.1497 -v -6.1191 13.5049 -6.1497 -v -7.4294 13.6643 -6.1497 -v -7.4569 13.4385 -6.1497 -v 11.5790 13.1102 -7.0188 -v 11.5127 13.3278 -7.0188 -v 12.7755 13.7122 -7.0188 -v 12.8418 13.4947 -7.0188 -v 11.4425 13.5586 -6.4117 -v 11.3762 13.7761 -6.4117 -v 12.6390 14.1606 -6.4117 -v 12.7053 13.9430 -6.4117 -v 11.4380 13.5732 -6.2807 -v 11.3718 13.7908 -6.2807 -v 12.6345 14.1752 -6.2807 -v 12.7008 13.9577 -6.2807 -v 12.7755 13.7122 -5.5426 -v 11.5127 13.3278 -5.5426 -v 11.5790 13.1102 -5.5426 -v 12.8418 13.4947 -5.5426 -v 11.3762 13.7761 -6.1497 -v 11.4425 13.5586 -6.1497 -v 12.6390 14.1606 -6.1497 -v 12.7053 13.9430 -6.1497 -v 10.2689 12.9589 -7.0188 -v 11.5604 13.2318 -7.0188 -v 11.6074 13.0093 -7.0188 -v 10.3159 12.7364 -7.0188 -v 10.1720 13.4174 -6.4117 -v 11.4635 13.6904 -6.4117 -v 10.2190 13.1949 -6.4117 -v 11.4603 13.7054 -6.2807 -v 10.1688 13.4324 -6.2807 -v 10.2158 13.2099 -6.2807 -v 11.6074 13.0093 -5.5426 -v 11.5604 13.2318 -5.5426 -v 10.2689 12.9589 -5.5426 -v 10.3159 12.7364 -5.5426 -v 11.4635 13.6904 -6.1497 -v 10.1720 13.4174 -6.1497 -v 10.2190 13.1949 -6.1497 -v 1.8981 10.8573 -2.0736 -v -0.8458 8.7261 -2.0736 -v -0.8458 8.7261 -0.1199 -v 1.8981 11.3885 0.1367 -v 4.6419 8.7261 -0.1199 -v 4.6419 8.7261 -2.0736 -v 1.8981 11.7860 2.3471 -v 1.8981 12.0145 2.3471 -v -0.8458 8.7261 1.8338 -v -0.8458 8.4976 1.8338 -v 4.6419 8.4976 1.8338 -v 4.6419 8.7261 1.8338 -v 4.6419 8.4976 -2.0736 -v 4.6419 8.4976 -0.1199 -v 1.8981 11.7860 -6.4944 -v 1.8981 12.0145 -6.4944 -v 4.6419 8.7261 -5.9811 -v 4.6419 8.4976 -5.9811 -v -0.8458 8.4976 -5.9811 -v -0.8458 8.7261 -5.9811 -v -0.8458 8.4976 -2.0736 -v -0.8458 8.7261 -4.0274 -v -0.8458 8.4976 -4.0274 -v 1.8981 10.6287 -2.0736 -v 1.8981 11.1600 0.1367 -v 1.8981 11.1600 -4.2840 -v 1.8981 11.3885 -4.2840 -v 4.6419 8.7261 -4.0274 -v 4.6419 8.4976 -4.0274 -v -0.8458 8.4976 -0.1199 -v 2.6362 10.8058 -1.0937 -v 2.6362 11.0788 0.1977 -v 2.6362 10.8562 0.2448 -v 2.6362 10.5833 -1.0467 -v 2.0290 11.2644 -1.1907 -v 2.0291 11.5373 0.1008 -v 2.0290 11.0419 -1.1436 -v 1.8981 11.5523 0.0977 -v 1.8981 11.2794 -1.1938 -v 1.8981 11.0568 -1.1468 -v 1.1600 10.8562 0.2448 -v 1.1600 11.0788 0.1977 -v 1.1600 10.8058 -1.0937 -v 1.1600 10.5833 -1.0467 -v 1.7671 11.5373 0.1008 -v 1.7671 11.2644 -1.1907 -v 1.7671 11.0418 -1.1436 -v 2.6362 10.5205 -1.9756 -v 2.6362 10.7478 -0.6753 -v 2.6362 10.5237 -0.6362 -v 2.6362 10.2965 -1.9365 -v 2.0290 10.9822 -2.0563 -v 2.0290 11.2094 -0.7560 -v 2.0290 10.7582 -2.0172 -v 1.8981 11.2245 -0.7586 -v 1.8981 10.9973 -2.0589 -v 1.8981 10.7733 -2.0198 -v 1.1600 10.5237 -0.6362 -v 1.1600 10.7478 -0.6753 -v 1.1600 10.5205 -1.9756 -v 1.1600 10.2965 -1.9365 -v 1.7671 11.2094 -0.7560 -v 1.7671 10.9822 -2.0563 -v 1.7671 10.7582 -2.0172 -v 1.1982 10.4359 -2.0215 -v 1.0834 10.7076 -3.3081 -v 1.0844 10.4851 -3.3552 -v 1.1993 10.2134 -2.0685 -v 1.8009 10.9081 -1.9756 -v 1.6860 11.1798 -3.2622 -v 1.8019 10.6856 -2.0226 -v 1.8164 11.1977 -3.2701 -v 1.9313 10.9261 -1.9834 -v 1.9323 10.7036 -2.0305 -v 2.5550 10.5184 -3.4794 -v 2.5540 10.7409 -3.4324 -v 2.6688 10.4692 -2.1457 -v 2.6699 10.2467 -2.1928 -v 1.9469 11.1857 -3.2843 -v 2.0618 10.9141 -1.9976 -v 2.0629 10.6915 -2.0447 -v 1.1600 10.7338 -3.2444 -v 1.1600 10.8931 -4.5548 -v 1.1600 10.6673 -4.5823 -v 1.1600 10.5080 -3.2719 -v 1.7671 11.1990 -3.1879 -v 1.7671 11.3584 -4.4982 -v 1.7671 10.9733 -3.2153 -v 1.8981 11.3736 -4.4964 -v 1.8981 11.2142 -3.1860 -v 1.8981 10.9885 -3.2135 -v 2.6362 10.6673 -4.5823 -v 2.6362 10.8931 -4.5548 -v 2.6362 10.7338 -3.2445 -v 2.6362 10.5080 -3.2719 -v 2.0290 11.3584 -4.4982 -v 2.0290 11.1990 -3.1879 -v 2.0290 10.9733 -3.2153 -v 2.6362 11.2196 1.1507 -v 2.6362 11.4422 1.1037 -v 2.6362 11.7151 2.3952 -v 2.6362 11.4926 2.4422 -v 2.0290 11.6782 1.0538 -v 2.0290 11.9007 1.0068 -v 2.0290 12.1736 2.2983 -v 2.0290 11.9511 2.3453 -v 1.8981 11.6932 1.0507 -v 1.8981 11.9157 1.0036 -v 1.8981 12.1886 2.2951 -v 1.8981 11.9661 2.3421 -v 1.1600 11.7151 2.3952 -v 1.1600 11.4422 1.1037 -v 1.1600 11.2196 1.1507 -v 1.1600 11.4926 2.4422 -v 1.7671 11.9007 1.0068 -v 1.7671 11.6782 1.0538 -v 1.7671 12.1736 2.2983 -v 1.7671 11.9511 2.3453 -v 2.6362 11.1887 0.1778 -v 2.6362 11.4617 1.4693 -v 2.6362 11.2391 1.5163 -v 2.6362 10.9662 0.2248 -v 2.0291 11.6473 0.0809 -v 2.0291 11.9202 1.3724 -v 2.0291 11.4248 0.1279 -v 1.8981 11.9352 1.3692 -v 1.8981 11.6623 0.0777 -v 1.8981 11.4397 0.1247 -v 1.1600 11.2391 1.5163 -v 1.1600 11.4617 1.4693 -v 1.1600 11.1887 0.1778 -v 1.1600 10.9662 0.2248 -v 1.7671 11.9202 1.3724 -v 1.7671 11.6473 0.0809 -v 1.7671 11.4248 0.1279 -v 1.1600 11.0324 -4.4912 -v 1.1599 11.1918 -5.8016 -v 1.1599 10.9660 -5.8291 -v 1.1600 10.8067 -4.5187 -v 1.7671 11.4977 -4.4347 -v 1.7671 11.6570 -5.7450 -v 1.7671 11.2719 -4.4621 -v 1.8981 11.6722 -5.7432 -v 1.8981 11.5129 -4.4328 -v 1.8981 11.2871 -4.4603 -v 2.6362 10.9660 -5.8291 -v 2.6362 11.1918 -5.8016 -v 2.6362 11.0324 -4.4913 -v 2.6362 10.8067 -4.5187 -v 2.0290 11.6570 -5.7450 -v 2.0290 11.4977 -4.4347 -v 2.0290 11.2719 -4.4621 -v 1.6385 11.2224 1.2384 -v 2.1576 11.2224 1.2384 -v 2.1576 10.7301 1.2384 -v 1.6385 10.7301 1.2384 -v 2.1576 11.1032 5.0371 -v 2.1576 11.5955 5.0371 -v 1.6385 11.5955 5.0371 -v 1.6385 11.1032 5.0371 -v 2.1576 10.7372 3.3072 -v 1.6385 10.7372 3.3072 -v 2.1576 11.2294 3.3072 -v 1.6385 11.2294 3.3072 -v -6.9438 6.4623 -6.2807 -v -6.9438 8.0396 -6.2807 -v -6.9438 7.6647 -6.7971 -v -6.9438 6.4930 -6.7971 -v -7.0316 6.3524 -7.2009 -v -7.0316 6.5211 -7.2009 -v -6.9131 6.5211 -7.2009 -v -6.9131 6.3524 -7.2009 -v -7.0316 7.7709 -7.0675 -v -7.0316 8.3162 -6.2807 -v -6.9131 8.3162 -6.2807 -v -6.9131 7.7709 -7.0675 -v -7.0316 6.5211 -5.3605 -v -7.0316 6.3524 -5.3605 -v -6.9131 6.3524 -5.3605 -v -6.9131 6.5211 -5.3605 -v -7.0316 6.3524 -5.4939 -v -7.0316 6.2936 -6.2807 -v -6.9131 6.2936 -6.2807 -v -6.9131 6.3524 -5.4939 -v -7.1616 6.3524 -7.0675 -v -7.1616 6.4929 -6.7971 -v -7.1616 6.5211 -7.0675 -v -7.0316 7.6647 -6.7971 -v -7.0316 8.0396 -6.2807 -v -7.1616 6.5211 -5.4939 -v -7.1616 6.5039 -5.7644 -v -7.1616 6.3524 -5.4939 -v -7.1616 6.4623 -6.2807 -v -7.1616 6.2936 -6.2807 -v -6.9438 6.5039 -5.7644 -v -6.9438 7.6647 -5.7644 -v -7.0316 7.7709 -5.4939 -v -6.9131 7.7709 -5.4939 -v -7.0316 6.3524 -7.0675 -v -6.9131 6.3524 -7.0675 -v -7.0316 7.6647 -5.7644 -v -7.0316 6.4930 -6.7971 -v -7.0316 6.5039 -5.7644 -v -7.0316 6.4623 -6.2807 -v -7.0316 6.5211 -5.4939 -v -6.9131 6.5211 -5.4939 -v -7.0316 6.5211 -7.0675 -v -6.9131 6.5211 -7.0675 -v -7.1616 6.3524 -7.2009 -v -7.1616 6.5211 -7.2009 -v -7.1616 6.5211 -5.3605 -v -7.1616 6.3524 -5.3605 -v -5.7067 3.0829 -13.9368 -v -0.3334 3.0829 -13.9368 -v -0.3334 3.7395 -10.2128 -v -5.7067 3.7395 -10.2128 -v -0.3334 3.9558 -10.2510 -v -0.3334 3.2991 -13.9749 -v -5.7067 3.2991 -13.9749 -v -5.7067 3.9558 -10.2510 -v -6.7437 -0.0000 -2.8264 -v -6.7437 5.5026 -2.8264 -v -12.6656 2.5635 -2.8264 -v -12.6656 -0.0000 -2.8264 -v -6.7437 -0.0000 -9.5914 -v -12.6656 -0.0000 -9.5914 -v -12.6656 2.5635 -9.5914 -v -6.7437 5.5026 -9.5914 -v 1.8981 6.1673 -1.1123 -v 1.8981 9.7710 -1.1123 -v -0.0020 8.2690 -1.1123 -v -0.0020 6.1673 -1.1123 -v 4.3370 6.1014 -5.3857 -v 4.3370 8.9071 -5.3857 -v 4.3370 8.9071 1.2384 -v 4.3370 6.1014 1.2384 -v -0.5409 6.1014 1.2384 -v -0.5409 8.9071 1.2384 -v -0.5409 8.9071 -5.3857 -v -0.5409 6.1014 -5.3857 -v 3.7981 6.1673 -1.1123 -v 3.7981 8.2690 -1.1123 -v 3.7981 8.2690 1.2384 -v 3.7981 6.1673 1.2384 -v 1.8981 11.5136 1.2384 -v 1.8981 9.7710 1.2384 -v -0.0020 8.2690 1.2384 -v -0.0020 6.1673 1.2384 -v 1.8981 6.1673 1.2384 -v -3.1730 6.7688 -10.1848 -v -2.6566 7.1437 -10.1848 -v -2.6566 5.5664 -10.1848 -v -3.1730 5.5971 -10.1848 -v -3.5768 5.6252 -10.1540 -v -3.5768 5.6252 -10.2725 -v -3.5768 5.4565 -10.2725 -v -3.5768 5.4565 -10.1540 -v -2.6566 7.4203 -10.1540 -v -2.6566 7.4203 -10.2725 -v -3.4434 6.8751 -10.2725 -v -3.4434 6.8751 -10.1540 -v -1.7364 5.4565 -10.1540 -v -1.7364 5.4565 -10.2725 -v -1.7364 5.6252 -10.2725 -v -1.7364 5.6252 -10.1540 -v -2.6566 5.3977 -10.1540 -v -2.6566 5.3977 -10.2725 -v -1.8698 5.4565 -10.2725 -v -1.8698 5.4565 -10.1540 -v -3.4434 5.4565 -10.4025 -v -3.4434 5.6252 -10.4025 -v -3.1730 5.5971 -10.4025 -v -2.6566 7.1437 -10.2725 -v -3.1730 6.7688 -10.2725 -v -1.8698 5.6252 -10.4025 -v -1.8698 5.4565 -10.4025 -v -2.1403 5.6080 -10.4025 -v -2.6566 5.3977 -10.4025 -v -2.6566 5.5664 -10.4025 -v -2.1403 6.7688 -10.1848 -v -2.1403 5.6080 -10.1848 -v -1.8698 6.8751 -10.1540 -v -1.8698 6.8751 -10.2725 -v -3.4434 5.4565 -10.1540 -v -3.4434 5.4565 -10.2725 -v -2.1403 6.7688 -10.2725 -v -3.1730 5.5971 -10.2725 -v -2.1403 5.6080 -10.2725 -v -2.6566 5.5664 -10.2725 -v -1.8698 5.6252 -10.2725 -v -1.8698 5.6252 -10.1540 -v -3.4434 5.6252 -10.2725 -v -3.4434 5.6252 -10.1540 -v -3.5768 5.6252 -10.4025 -v -3.5768 5.4565 -10.4025 -v -1.7364 5.4565 -10.4025 -v -1.7364 5.6252 -10.4025 -v 10.7400 7.6647 -6.7971 -v 10.7400 8.0396 -6.2807 -v 10.7400 6.4623 -6.2807 -v 10.7400 6.4930 -6.7971 -v 10.7092 6.5211 -7.2009 -v 10.8277 6.5211 -7.2009 -v 10.8277 6.3524 -7.2009 -v 10.7092 6.3524 -7.2009 -v 10.7092 8.3162 -6.2807 -v 10.8277 8.3162 -6.2807 -v 10.8277 7.7710 -7.0676 -v 10.7092 7.7710 -7.0676 -v 10.7092 6.3524 -5.3605 -v 10.8277 6.3524 -5.3605 -v 10.8277 6.5211 -5.3605 -v 10.7092 6.5211 -5.3605 -v 10.7092 6.2936 -6.2807 -v 10.8277 6.2936 -6.2807 -v 10.8277 6.3524 -5.4939 -v 10.7092 6.3524 -5.4939 -v 10.9577 6.3524 -7.0676 -v 10.9577 6.5211 -7.0676 -v 10.9577 6.4930 -6.7971 -v 10.8277 8.0396 -6.2807 -v 10.8277 7.6647 -6.7971 -v 10.9577 6.5211 -5.4939 -v 10.9577 6.3524 -5.4939 -v 10.9577 6.5039 -5.7644 -v 10.9577 6.2936 -6.2807 -v 10.9577 6.4623 -6.2807 -v 10.7400 7.6647 -5.7644 -v 10.7400 6.5039 -5.7644 -v 10.7092 7.7710 -5.4939 -v 10.8277 7.7710 -5.4939 -v 10.7092 6.3524 -7.0676 -v 10.8277 6.3524 -7.0676 -v 10.8277 7.6647 -5.7644 -v 10.8277 6.4930 -6.7971 -v 10.8277 6.5039 -5.7644 -v 10.8277 6.4623 -6.2807 -v 10.8277 6.5211 -5.4939 -v 10.7092 6.5211 -5.4939 -v 10.8277 6.5211 -7.0676 -v 10.7092 6.5211 -7.0676 -v 10.9577 6.5211 -7.2009 -v 10.9577 6.3524 -7.2009 -v 10.9577 6.3524 -5.3605 -v 10.9577 6.5211 -5.3605 -v 4.7721 3.0631 -10.1932 -v 4.7721 3.0631 -10.4264 -v 4.5257 3.0631 -10.4264 -v 4.5257 3.0631 -10.1932 -v 4.7721 -0.0000 -10.4264 -v 4.7721 -0.0000 -10.1932 -v 4.5257 -0.0000 -10.4264 -v 4.5257 -0.0000 -10.1932 -v 4.1057 2.8480 -10.5415 -v 6.5122 3.0489 -10.5415 -v 6.5122 3.0489 -10.1932 -v 4.1057 2.8480 -10.1932 -v 4.1057 3.1343 -10.5415 -v 6.5122 3.3352 -10.5415 -v 4.1057 3.1343 -10.1932 -v 6.5122 3.3352 -10.1932 -v 8.9187 3.1343 -10.1932 -v 8.9187 2.8480 -10.1932 -v 8.9187 2.8480 -10.5415 -v 8.9187 3.1343 -10.5415 -v 8.4489 3.0631 -10.1932 -v 8.4489 3.0631 -10.4264 -v 8.2024 3.0631 -10.4264 -v 8.2024 3.0631 -10.1932 -v 8.4489 -0.0000 -10.4264 -v 8.4489 -0.0000 -10.1932 -v 8.2024 -0.0000 -10.4264 -v 8.2024 -0.0000 -10.1932 -v 6.1227 6.7688 -10.1848 -v 6.6390 7.1438 -10.1848 -v 6.6390 5.5664 -10.1848 -v 6.1227 5.5971 -10.1848 -v 5.7188 5.6252 -10.1540 -v 5.7188 5.6252 -10.2725 -v 5.7188 5.4565 -10.2725 -v 5.7188 5.4565 -10.1540 -v 6.6390 7.4203 -10.1540 -v 6.6390 7.4203 -10.2725 -v 5.8522 6.8751 -10.2725 -v 5.8522 6.8751 -10.1540 -v 7.5592 5.4565 -10.1540 -v 7.5592 5.4565 -10.2725 -v 7.5592 5.6252 -10.2725 -v 7.5592 5.6252 -10.1540 -v 6.6390 5.3977 -10.1540 -v 6.6390 5.3977 -10.2725 -v 7.4258 5.4565 -10.2725 -v 7.4258 5.4565 -10.1540 -v 5.8522 5.4565 -10.4026 -v 5.8522 5.6252 -10.4026 -v 6.1227 5.5971 -10.4026 -v 6.6390 7.1438 -10.2725 -v 6.1227 6.7688 -10.2725 -v 7.4258 5.6252 -10.4026 -v 7.4258 5.4565 -10.4026 -v 7.1553 5.6080 -10.4026 -v 6.6390 5.3977 -10.4026 -v 6.6390 5.5664 -10.4026 -v 7.1553 6.7688 -10.1848 -v 7.1553 5.6080 -10.1848 -v 7.4258 6.8751 -10.1540 -v 7.4258 6.8751 -10.2725 -v 5.8522 5.4565 -10.1540 -v 5.8522 5.4565 -10.2725 -v 7.1553 6.7688 -10.2725 -v 6.1227 5.5971 -10.2725 -v 7.1553 5.6080 -10.2725 -v 6.6390 5.5664 -10.2725 -v 7.4258 5.6252 -10.2725 -v 7.4258 5.6252 -10.1540 -v 5.8522 5.6252 -10.2725 -v 5.8522 5.6252 -10.1540 -v 5.7188 5.6252 -10.4025 -v 5.7188 5.4565 -10.4025 -v 7.5592 5.4565 -10.4026 -v 7.5592 5.6252 -10.4026 -v -0.1257 8.5720 1.3493 -v -0.1257 8.1054 1.3493 -v 1.0004 8.9625 1.3394 -v 0.8976 9.3296 1.3394 -v -0.1257 8.1054 0.7798 -v 1.0004 8.9625 0.8269 -v -0.1257 8.5720 0.7798 -v 0.8976 9.3296 0.8269 -v 1.8981 9.3882 1.3493 -v 1.8981 10.1187 1.3493 -v 1.8981 9.3882 0.7798 -v 1.8981 10.1187 0.7798 -v 3.8743 8.5720 1.3493 -v 2.8985 9.3296 1.3393 -v 2.7958 8.9625 1.3393 -v 3.8743 8.1054 1.3493 -v 2.7958 8.9625 0.8269 -v 3.8743 8.1054 0.7798 -v 2.8985 9.3296 0.8269 -v 3.8743 8.5720 0.7798 -v 2.0446 9.7973 1.2384 -v 2.0904 10.0820 2.4593 -v 1.7058 10.0819 2.4593 -v 1.7515 9.7973 1.2384 -v 2.0446 10.1751 1.2384 -v 2.0904 10.4244 2.2498 -v 1.7515 10.1751 1.2384 -v 1.7058 10.4244 2.2498 -v 2.0739 10.7611 3.2159 -v 1.7223 10.7611 3.2159 -v 2.0739 10.7611 2.7627 -v 1.7223 10.7611 2.7627 -v -12.3257 0.0143 -9.8101 -v -12.8953 0.0143 -9.8101 -v -12.8432 1.4775 -9.6989 -v -12.3307 1.4775 -9.6989 -v -12.3257 0.0143 -9.2405 -v -12.3307 1.4775 -9.1865 -v -12.8432 1.4775 -9.1865 -v -12.8953 0.0143 -9.2405 -v -12.8953 2.5418 -9.6505 -v -12.3258 3.0013 -9.6505 -v -12.3258 3.0013 -9.0809 -v -12.8953 2.5418 -9.0809 -v -12.3257 0.0143 -2.6443 -v -12.3307 1.4775 -2.7554 -v -12.8432 1.4775 -2.7554 -v -12.8953 0.0143 -2.6443 -v -12.3257 0.0143 -3.2139 -v -12.3307 1.4775 -3.2679 -v -12.8953 0.0143 -3.2139 -v -12.8432 1.4775 -3.2679 -v -12.3258 3.0013 -2.8039 -v -12.8953 2.5418 -2.8039 -v -12.3258 3.0013 -3.3735 -v -12.8953 2.5418 -3.3735 -v -12.6547 0.4863 -2.8264 -v -12.6547 0.4863 -9.5914 -v -12.7857 0.4863 -9.5914 -v -12.7857 0.4863 -2.8264 -v -12.7857 -0.0000 -9.5914 -v -12.7857 -0.0000 -2.8264 -v -12.6656 0.4863 -9.5780 -v -6.8956 0.4863 -9.5780 -v -6.8956 0.4863 -9.7089 -v -12.6656 0.4863 -9.7089 -v -6.8956 -0.0000 -9.7089 -v -12.6656 -0.0000 -9.7089 -v -6.8956 0.4863 -2.7219 -v -6.8956 0.4863 -2.8528 -v -12.6656 0.4863 -2.8528 -v -12.6656 0.4863 -2.7219 -v -6.8956 -0.0000 -2.7219 -v -12.6656 -0.0000 -2.7219 -v -7.3871 0.3840 -2.7893 -v -7.3871 -0.2451 -2.7893 -v -7.3871 -0.2451 -1.9671 -v -7.3871 0.3840 -1.9671 -v 11.2820 -0.2451 -1.9671 -v 11.2820 -0.2451 -2.7893 -v 11.2820 0.3840 -2.7893 -v 11.2820 0.3840 -1.9671 -v 1.9475 -0.6210 -1.9671 -v 1.9475 0.0080 -1.9671 -v 1.9475 0.0080 -2.7893 -v -5.8918 -1.1745 -2.6535 -v -6.6824 -1.1745 -2.6535 -v -6.6781 -2.2343 -2.4061 -v -5.8875 -2.2343 -2.4061 -v -6.6824 -1.1745 -3.4441 -v -6.6781 -2.2343 -3.1967 -v -5.8918 -1.1745 -3.4441 -v -5.8875 -2.2343 -3.1967 -v -5.8875 -0.0000 -2.4061 -v -6.6781 -0.0000 -2.4061 -v -6.6781 -0.0000 -3.1967 -v -5.8875 -0.0000 -3.1967 -v -2.5347 -1.1745 -2.6535 -v -3.3252 -1.1745 -2.6535 -v -3.3210 -2.2343 -2.4061 -v -2.5304 -2.2343 -2.4061 -v -3.3252 -1.1745 -3.4441 -v -3.3210 -2.2343 -3.1967 -v -2.5347 -1.1745 -3.4441 -v -2.5304 -2.2343 -3.1967 -v -2.5304 -0.0000 -2.4061 -v -3.3210 -0.0000 -2.4061 -v -3.3210 -0.0000 -3.1967 -v -2.5304 -0.0000 -3.1967 -v 0.7326 -1.1745 -2.6535 -v -0.0579 -1.1745 -2.6535 -v -0.0537 -2.2343 -2.4061 -v 0.7369 -2.2343 -2.4061 -v -0.0579 -1.1745 -3.4441 -v -0.0537 -2.2343 -3.1967 -v 0.7326 -1.1745 -3.4441 -v 0.7369 -2.2343 -3.1967 -v 0.7369 -0.0000 -2.4061 -v -0.0537 -0.0000 -2.4061 -v -0.0537 -0.0000 -3.1967 -v 0.7369 -0.0000 -3.1967 -v 3.9780 -1.1745 -2.6535 -v 3.1874 -1.1745 -2.6535 -v 3.1917 -2.2343 -2.4061 -v 3.9823 -2.2343 -2.4061 -v 3.1874 -1.1745 -3.4441 -v 3.1917 -2.2343 -3.1967 -v 3.9780 -1.1745 -3.4441 -v 3.9823 -2.2343 -3.1967 -v 3.9823 -0.0000 -2.4061 -v 3.1917 -0.0000 -2.4061 -v 3.1917 -0.0000 -3.1967 -v 3.9823 -0.0000 -3.1967 -v 7.2583 -1.1745 -2.6535 -v 6.4678 -1.1745 -2.6535 -v 6.4720 -2.2343 -2.4061 -v 7.2626 -2.2343 -2.4061 -v 6.4678 -1.1745 -3.4441 -v 6.4720 -2.2343 -3.1967 -v 7.2583 -1.1745 -3.4441 -v 7.2626 -2.2343 -3.1967 -v 7.2626 -0.0000 -2.4061 -v 6.4720 -0.0000 -2.4061 -v 6.4720 -0.0000 -3.1967 -v 7.2626 -0.0000 -3.1967 -v 10.6465 -1.1745 -2.6535 -v 9.8559 -1.1745 -2.6535 -v 9.8602 -2.2343 -2.4061 -v 10.6508 -2.2343 -2.4061 -v 9.8559 -1.1745 -3.4441 -v 9.8602 -2.2343 -3.1967 -v 10.6465 -1.1745 -3.4441 -v 10.6508 -2.2343 -3.1967 -v 10.6508 -0.0000 -2.4061 -v 9.8602 -0.0000 -2.4061 -v 9.8602 -0.0000 -3.1967 -v 10.6508 -0.0000 -3.1967 -v 0.6510 3.2326 -2.3791 -v 0.5856 4.7686 0.0009 -v -0.1260 4.7686 0.0009 -v -0.1915 3.2326 -2.3791 -v 0.6510 4.1788 -2.3791 -v 0.5856 5.0694 -0.6441 -v -0.1915 4.1788 -2.3791 -v -0.1260 5.0694 -0.6441 -v 0.6510 6.1014 0.9746 -v -0.1915 6.1014 0.9746 -v 0.6510 6.1014 0.1321 -v -0.1915 6.1014 0.1321 -v 3.9760 3.2326 -2.3791 -v 3.9106 4.7686 0.0009 -v 3.1989 4.7686 0.0009 -v 3.1335 3.2326 -2.3791 -v 3.9760 4.1788 -2.3791 -v 3.9106 5.0694 -0.6441 -v 3.1335 4.1788 -2.3791 -v 3.1989 5.0694 -0.6441 -v 3.9760 6.1014 0.9746 -v 3.1335 6.1014 0.9746 -v 3.9760 6.1014 0.1321 -v 3.1335 6.1014 0.1321 -v 2.2664 3.2138 -2.3791 -v 2.2664 3.2138 10.8189 -v 2.5022 2.7597 10.8189 -v 2.5022 2.7597 -2.3791 -v 1.7553 3.2367 -2.3791 -v 1.7553 3.2367 10.8189 -v 1.4799 2.8055 -2.3791 -v 1.4799 2.8055 10.8189 -v 1.7156 2.3514 -2.3791 -v 1.7156 2.3514 10.8189 -v 2.2267 2.3285 -2.3791 -v 2.2267 2.3285 10.8189 -v -1.3164 -0.1528 3.8302 -v -0.9563 -0.5129 3.8301 -v -0.9563 -0.5129 4.4788 -v -1.3164 -0.1528 4.4788 -v 5.2683 5.7118 4.4788 -v 5.2683 5.7118 3.8302 -v 4.9082 6.0719 3.8302 -v 4.9082 6.0719 4.4788 -v -1.6452 3.1171 5.3292 -v -3.0426 3.1798 5.3292 -v -2.8677 3.1720 6.3959 -v -1.6452 3.1171 6.3959 -v -2.8767 2.9720 6.3959 -v -3.0516 2.9799 5.3292 -v -1.6542 2.9172 5.3292 -v -1.6542 2.9172 6.3959 -v -1.6452 3.1171 4.2626 -v -1.6542 2.9172 4.2626 -v -2.8766 2.9720 4.2626 -v -2.8677 3.1720 4.2626 -v 2.1926 7.6130 4.5971 -v 4.5802 6.8570 4.5971 -v 4.5802 6.8570 3.7993 -v 2.1926 7.6130 3.7993 -v 2.1622 6.9376 4.5971 -v 4.2163 6.2872 4.5971 -v 2.1622 6.9376 3.7993 -v 4.2163 6.2872 3.7993 -v 6.2701 5.0084 4.5971 -v 6.2701 5.0084 3.7993 -v 5.6700 4.6970 4.5971 -v 5.6700 4.6970 3.7993 -v 6.8092 2.5626 4.5971 -v 6.8092 2.5626 3.7993 -v 6.1338 2.5929 4.5971 -v 6.1338 2.5929 3.7993 -v 6.0532 0.1749 4.5971 -v 6.0532 0.1749 3.7993 -v 5.4834 0.5389 4.5971 -v 5.4834 0.5389 3.7993 -v 4.2046 -1.5149 4.5971 -v 4.2046 -1.5149 3.7993 -v 3.8931 -0.9148 4.5971 -v 3.8931 -0.9148 3.7993 -v 1.7588 -2.0540 4.5971 -v 1.7588 -2.0540 3.7993 -v 1.7891 -1.3786 4.5971 -v 1.7891 -1.3786 3.7993 -v -0.6289 -1.2980 4.5971 -v -0.6289 -1.2980 3.7993 -v -0.2650 -0.7282 4.5971 -v -0.2650 -0.7282 3.7993 -v -2.3187 0.5506 4.5971 -v -2.3187 0.5506 3.7993 -v -1.7186 0.8620 4.5971 -v -1.7186 0.8620 3.7993 -v -2.8579 2.9964 4.5971 -v -2.8579 2.9964 3.7994 -v -2.1824 2.9661 4.5971 -v -2.1824 2.9661 3.7993 -v -2.1018 5.3841 4.5971 -v -2.1018 5.3841 3.7993 -v -1.5320 5.0201 4.5971 -v -1.5320 5.0201 3.7993 -v -0.2533 7.0739 4.5971 -v -0.2533 7.0739 3.7993 -v 0.0582 6.4738 4.5971 -v 0.0582 6.4738 3.7993 -v 2.1926 7.6130 6.9501 -v 4.5802 6.8570 6.9501 -v 4.5802 6.8570 6.1523 -v 2.1926 7.6130 6.1523 -v 2.1623 6.9376 6.9501 -v 4.2163 6.2872 6.9501 -v 2.1623 6.9376 6.1523 -v 4.2163 6.2872 6.1523 -v 6.2701 5.0084 6.9501 -v 6.2701 5.0084 6.1523 -v 5.6700 4.6970 6.9501 -v 5.6700 4.6970 6.1523 -v 6.8092 2.5626 6.9501 -v 6.8092 2.5626 6.1523 -v 6.1338 2.5929 6.9501 -v 6.1338 2.5929 6.1523 -v 6.0532 0.1749 6.9501 -v 6.0532 0.1749 6.1523 -v 5.4834 0.5389 6.9501 -v 5.4834 0.5389 6.1523 -v 4.2046 -1.5149 6.9501 -v 4.2046 -1.5149 6.1523 -v 3.8931 -0.9148 6.9501 -v 3.8931 -0.9148 6.1523 -v 1.7588 -2.0540 6.9501 -v 1.7588 -2.0540 6.1523 -v 1.7891 -1.3786 6.9501 -v 1.7891 -1.3786 6.1523 -v -0.6289 -1.2980 6.9501 -v -0.6289 -1.2980 6.1523 -v -0.2650 -0.7282 6.9501 -v -0.2650 -0.7282 6.1523 -v -2.3187 0.5506 6.9501 -v -2.3187 0.5506 6.1523 -v -1.7186 0.8620 6.9501 -v -1.7186 0.8620 6.1523 -v -2.8579 2.9964 6.9501 -v -2.8579 2.9964 6.1523 -v -2.1824 2.9661 6.9501 -v -2.1824 2.9661 6.1523 -v -2.1018 5.3841 6.9501 -v -2.1019 5.3841 6.1523 -v -1.5320 5.0201 6.9501 -v -1.5320 5.0201 6.1523 -v -0.2533 7.0739 6.9501 -v -0.2533 7.0739 6.1523 -v 0.0582 6.4738 6.9501 -v 0.0582 6.4738 6.1523 -v -1.2551 4.4490 5.3292 -v -2.5273 5.0306 5.3292 -v -2.3680 4.9578 6.3959 -v -1.2551 4.4490 6.3959 -v -2.4512 4.7757 6.3959 -v -2.6105 4.8486 5.3292 -v -1.3383 4.2669 5.3292 -v -1.3383 4.2669 6.3959 -v -1.2551 4.4490 4.2626 -v -1.3383 4.2669 4.2626 -v -2.4512 4.7757 4.2626 -v -2.3680 4.9578 4.2626 -v 1.5088 1.8799 3.5739 -v 2.5213 1.9253 3.5739 -v 2.5213 1.9253 4.6569 -v 1.5088 1.8799 4.6569 -v 1.7612 2.3664 3.1911 -v 2.2262 2.3872 3.1911 -v 2.9882 2.8249 3.5739 -v 2.9882 2.8249 4.6569 -v 2.4406 2.8004 3.1911 -v 2.4426 3.6791 3.5739 -v 2.4426 3.6791 4.6569 -v 2.1901 3.1926 3.1911 -v 1.4300 3.6337 3.5739 -v 1.4300 3.6337 4.6569 -v 1.7251 3.1718 3.1911 -v 0.9631 2.7341 3.5739 -v 0.9631 2.7341 4.6569 -v 1.5107 2.7586 3.1911 -v -2.4255 3.0341 3.8302 -v -2.4255 2.5248 3.8302 -v -2.4255 2.5248 4.4788 -v -2.4255 3.0341 4.4788 -v 6.3774 2.5248 4.4788 -v 6.3774 2.5248 3.8302 -v 6.3774 3.0342 3.8302 -v 6.3774 3.0342 4.4788 -v -0.9563 6.0719 3.8301 -v -1.3165 5.7118 3.8302 -v -1.3164 5.7118 4.4788 -v -0.9563 6.0719 4.4788 -v 4.9082 -0.5129 4.4788 -v 4.9082 -0.5129 3.8302 -v 5.2683 -0.1528 3.8302 -v 5.2683 -0.1528 4.4788 -v -0.3944 5.5377 5.3292 -v -1.3561 6.5535 5.3292 -v -1.2357 6.4263 6.3959 -v -0.3944 5.5377 6.3959 -v -1.3810 6.2887 6.3959 -v -1.5015 6.4159 5.3292 -v -0.5398 5.4001 5.3292 -v -0.5398 5.4001 6.3959 -v -0.3944 5.5377 4.2625 -v -0.5398 5.4001 4.2625 -v -1.3810 6.2887 4.2625 -v -1.2357 6.4263 4.2625 -v 0.8114 6.2247 5.3292 -v 0.3003 7.5268 5.3292 -v 0.3643 7.3638 6.3959 -v 0.8114 6.2247 6.3959 -v 0.1779 7.2906 6.3959 -v 0.1140 7.4536 5.3292 -v 0.6250 6.1516 5.3292 -v 0.6250 6.1516 6.3959 -v 0.8114 6.2247 4.2625 -v 0.6250 6.1516 4.2625 -v 0.1779 7.2906 4.2625 -v 0.3643 7.3638 4.2625 -v 1.7213 -1.6220 3.8301 -v 2.2306 -1.6220 3.8301 -v 2.2306 -1.6220 4.4788 -v 1.7213 -1.6220 4.4788 -v 2.2306 7.1810 4.4788 -v 2.2306 7.1810 3.8302 -v 1.7213 7.1810 3.8302 -v 1.7213 7.1810 4.4788 -v 5.3781 4.0634 5.3292 -v 6.6616 4.6196 5.3292 -v 6.5009 4.5499 6.3959 -v 5.3781 4.0633 6.3959 -v 6.4213 4.7336 6.3959 -v 6.5820 4.8032 5.3292 -v 5.2985 4.2470 5.3292 -v 5.2985 4.2470 6.3959 -v 5.3781 4.0634 4.2626 -v 5.2985 4.2470 4.2626 -v 6.4213 4.7336 4.2626 -v 6.5009 4.5499 4.2626 -v 2.1867 6.4100 5.3292 -v 2.2006 7.8087 5.3292 -v 2.1989 7.6336 6.3959 -v 2.1867 6.4100 6.3959 -v 1.9987 7.6356 6.3959 -v 2.0005 7.8107 5.3292 -v 1.9866 6.4120 5.3292 -v 1.9866 6.4120 6.3959 -v 2.1867 6.4100 4.2625 -v 1.9866 6.4120 4.2625 -v 1.9987 7.6356 4.2625 -v 2.1989 7.6336 4.2625 -v 3.5314 6.0666 5.3292 -v 4.0682 7.3582 5.3292 -v 4.0010 7.1965 6.3959 -v 3.5314 6.0666 6.3959 -v 3.8162 7.2733 6.3959 -v 3.8834 7.4351 5.3292 -v 3.3466 6.1434 5.3292 -v 3.3465 6.1434 6.3959 -v 3.5314 6.0666 4.2625 -v 3.3466 6.1434 4.2625 -v 3.8162 7.2733 4.2626 -v 4.0010 7.1965 4.2626 -v 4.6494 5.2444 5.3292 -v 5.6311 6.2410 5.3292 -v 5.5082 6.1162 6.3959 -v 4.6494 5.2444 6.3959 -v 5.3656 6.2566 6.3959 -v 5.4885 6.3814 5.3292 -v 4.5069 5.3849 5.3292 -v 4.5069 5.3849 6.3959 -v 4.6494 5.2444 4.2626 -v 4.5069 5.3849 4.2626 -v 5.3656 6.2566 4.2626 -v 5.5082 6.1162 4.2626 -v 1.7213 -1.6220 6.3903 -v 2.2306 -1.6220 6.3903 -v 2.2306 -1.6220 7.0389 -v 1.7213 -1.6220 7.0389 -v 2.2306 7.1810 7.0389 -v 2.2306 7.1810 6.3903 -v 1.7213 7.1810 6.3903 -v 1.7213 7.1810 7.0389 -v -1.3164 -0.1528 6.3903 -v -0.9563 -0.5129 6.3903 -v -0.9563 -0.5129 7.0389 -v -1.3164 -0.1528 7.0389 -v 5.2683 5.7118 7.0390 -v 5.2683 5.7118 6.3903 -v 4.9082 6.0719 6.3903 -v 4.9082 6.0719 7.0389 -v -0.9563 6.0719 6.3903 -v -1.3164 5.7118 6.3903 -v -1.3164 5.7118 7.0389 -v -0.9563 6.0719 7.0389 -v 4.9082 -0.5129 7.0389 -v 4.9082 -0.5129 6.3903 -v 5.2683 -0.1528 6.3903 -v 5.2683 -0.1528 7.0389 -v 1.5088 3.6791 7.3165 -v 2.5213 3.6337 7.3165 -v 2.5213 3.6337 6.2335 -v 1.5088 3.6791 6.2335 -v 1.7612 3.1926 7.6994 -v 2.2262 3.1718 7.6994 -v 2.9883 2.7341 7.3165 -v 2.9882 2.7341 6.2335 -v 2.4407 2.7586 7.6994 -v 2.4426 1.8799 7.3165 -v 2.4426 1.8799 6.2335 -v 2.1901 2.3664 7.6993 -v 1.4301 1.9253 7.3165 -v 1.4300 1.9253 6.2335 -v 1.7251 2.3872 7.6993 -v 0.9631 2.8249 7.3165 -v 0.9631 2.8249 6.2335 -v 1.5107 2.8004 7.6994 -v -2.4255 3.0341 6.3903 -v -2.4255 2.5248 6.3903 -v -2.4255 2.5248 7.0389 -v -2.4255 3.0341 7.0389 -v 6.3774 2.5248 7.0390 -v 6.3774 2.5248 6.3903 -v 6.3774 3.0342 6.3903 -v 6.3774 3.0342 7.0390 -v 3.3775 -0.5761 5.3292 -v 3.9782 -1.8393 5.3292 -v 3.9029 -1.6812 6.3959 -v 3.3775 -0.5761 6.3959 -v 4.0837 -1.5952 6.3959 -v 4.1589 -1.7534 5.3292 -v 3.5582 -0.4901 5.3292 -v 3.5582 -0.4901 6.3959 -v 3.3775 -0.5761 4.2625 -v 3.5582 -0.4901 4.2625 -v 4.0837 -1.5952 4.2625 -v 3.9030 -1.6812 4.2625 -v -1.3290 1.2614 5.3292 -v -2.5705 0.6170 5.3292 -v -2.4150 0.6977 6.3959 -v -1.3290 1.2614 6.3959 -v -2.3228 0.5201 6.3959 -v -2.4783 0.4394 5.3292 -v -1.2368 1.0838 5.3292 -v -1.2368 1.0838 6.3959 -v -1.3290 1.2614 4.2626 -v -1.2368 1.0838 4.2626 -v -2.3228 0.5201 4.2626 -v -2.4150 0.6977 4.2626 -v -0.5196 0.1341 5.3292 -v -1.4294 -0.9285 5.3292 -v -1.3155 -0.7955 6.3959 -v -0.5196 0.1341 6.3959 -v -1.1634 -0.9256 6.3959 -v -1.2773 -1.0587 5.3292 -v -0.3676 0.0039 5.3292 -v -0.3676 0.0039 6.3959 -v -0.5196 0.1341 4.2625 -v -0.3676 0.0039 4.2625 -v -1.1634 -0.9256 4.2625 -v -1.3154 -0.7955 4.2625 -v 4.5324 0.1934 5.3292 -v 5.5626 -0.7529 5.3292 -v 5.4336 -0.6344 6.3959 -v 4.5324 0.1934 6.3959 -v 5.5690 -0.4870 6.3959 -v 5.6980 -0.6055 5.3292 -v 4.6678 0.3408 5.3292 -v 4.6678 0.3408 6.3959 -v 4.5324 0.1934 4.2625 -v 4.6678 0.3408 4.2625 -v 5.5690 -0.4870 4.2625 -v 5.4336 -0.6344 4.2625 -v 10.8807 3.4479 -2.2299 -v 10.3030 3.4479 -2.2299 -v 10.2904 -0.0000 -2.0822 -v 11.0330 -0.0000 -2.0822 -v 10.3030 3.4479 -2.8076 -v 10.2904 -0.0000 -2.8247 -v 10.8807 3.4479 -2.8076 -v 11.0330 -0.0000 -2.8247 -v 11.0330 8.5873 -2.0822 -v 10.2904 8.5873 -2.0822 -v 10.2904 9.1802 -2.8247 -v 11.0330 9.1802 -2.8247 -v 2.0184 -0.8569 5.3292 -v 2.1021 -2.2531 5.3292 -v 2.0916 -2.0783 6.3959 -v 2.0184 -0.8569 6.3959 -v 2.2914 -2.0664 6.3959 -v 2.3019 -2.2412 5.3292 -v 2.2181 -0.8449 5.3292 -v 2.2181 -0.8449 6.3959 -v 2.0184 -0.8569 4.2625 -v 2.2182 -0.8449 4.2625 -v 2.2914 -2.0664 4.2625 -v 2.0916 -2.0783 4.2625 -v 0.6531 -0.6081 5.3292 -v 0.2076 -1.9341 5.3292 -v 0.2634 -1.7680 6.3959 -v 0.6531 -0.6081 6.3959 -v 0.4531 -1.8318 6.3959 -v 0.3973 -1.9978 5.3292 -v 0.8428 -0.6718 5.3292 -v 0.8428 -0.6718 6.3959 -v 0.6531 -0.6081 4.2625 -v 0.8428 -0.6718 4.2625 -v 0.4531 -1.8318 4.2625 -v 0.2634 -1.7680 4.2625 -v 5.3150 1.3395 5.3292 -v 6.6246 0.8480 5.3292 -v 6.4607 0.9096 6.3959 -v 5.3150 1.3395 6.3959 -v 6.5310 1.0969 6.3959 -v 6.6950 1.0354 5.3292 -v 5.3853 1.5269 5.3292 -v 5.3853 1.5269 6.3959 -v 5.3150 1.3395 4.2626 -v 5.3853 1.5269 4.2626 -v 6.5310 1.0969 4.2626 -v 6.4607 0.9096 4.2626 -v 5.6113 2.6953 5.3292 -v 7.0097 2.7302 5.3292 -v 6.8346 2.7258 6.3959 -v 5.6113 2.6953 6.3959 -v 6.8296 2.9259 6.3959 -v 7.0047 2.9303 5.3292 -v 5.6063 2.8954 5.3292 -v 5.6063 2.8954 6.3959 -v 5.6113 2.6953 4.2626 -v 5.6063 2.8954 4.2626 -v 6.8296 2.9259 4.2626 -v 6.8346 2.7258 4.2626 -v 3.9105 6.3911 1.7275 -v 3.9105 5.8571 1.7275 -v 4.5186 5.8571 1.7275 -v 4.5186 6.3911 1.7275 -v 4.5186 5.6880 -0.9886 -v 4.5186 6.2220 -0.9886 -v 3.9105 5.6880 -0.9886 -v 3.9105 6.2220 -0.9886 -v 4.5186 5.8571 -3.7047 -v 4.5186 6.3911 -3.7047 -v 3.9105 5.8571 -3.7047 -v 3.9105 6.3911 -3.7047 -v 3.9168 6.1014 1.3850 -v 4.4864 6.1014 1.3850 -v 4.4343 7.5645 1.2739 -v 3.9218 7.5645 1.2739 -v 3.9168 6.1014 0.8154 -v 3.9218 7.5645 0.7614 -v 4.4343 7.5645 0.7614 -v 4.4864 6.1014 0.8154 -v 4.4864 8.7979 1.3850 -v 3.9168 9.2575 1.3850 -v 3.9168 9.2575 0.8154 -v 4.4864 8.7979 0.8154 -v -0.8180 6.3911 0.8068 -v -0.8180 5.8571 0.8068 -v -0.8180 5.8571 1.4149 -v -0.8180 6.3911 1.4149 -v 4.6141 5.8571 1.4149 -v 4.6141 5.8571 0.8068 -v 4.6141 6.3911 0.8068 -v 4.6141 6.3911 1.4149 -v 1.8981 5.6880 1.4149 -v 1.8981 6.2220 1.4149 -v 1.8981 5.6880 0.8068 -v 1.8981 6.2220 0.8068 -v -0.1207 6.1014 1.3850 -v -0.1257 7.5645 1.2739 -v -0.6382 7.5645 1.2739 -v -0.6903 6.1014 1.3850 -v -0.1207 6.1014 0.8154 -v -0.1257 7.5645 0.7614 -v -0.6903 6.1014 0.8154 -v -0.6382 7.5645 0.7614 -v -0.1207 9.2575 1.3850 -v -0.6903 8.7979 1.3850 -v -0.1207 9.2575 0.8154 -v -0.6903 8.7979 0.8154 -v 10.9958 3.4479 -10.3012 -v 11.1481 0.0000 -10.4490 -v 10.4056 0.0000 -10.4490 -v 10.4182 3.4479 -10.3012 -v 10.4056 0.0000 -9.7064 -v 10.4182 3.4479 -9.7236 -v 11.1481 0.0000 -9.7064 -v 10.9958 3.4479 -9.7236 -v 10.4056 8.5873 -10.4490 -v 11.1481 8.5873 -10.4490 -v 10.4056 9.1802 -9.7064 -v 11.1481 9.1802 -9.7064 -v 10.8526 3.9181 -9.9190 -v 10.8526 3.9181 -2.4672 -v 10.6571 3.9181 -2.4672 -v 10.6571 3.9181 -9.9190 -v 10.8526 4.5472 -9.9190 -v 10.8526 4.5472 -2.4672 -v 10.6571 4.5472 -9.9190 -v 10.6571 4.5472 -2.4672 -v 10.3781 3.9181 -2.2788 -v -6.5928 3.9181 -2.2788 -v -6.5928 3.9181 -2.4743 -v 10.3781 3.9181 -2.4743 -v 10.3781 4.5472 -2.2788 -v -6.5928 4.5471 -2.2788 -v 10.3781 4.5472 -2.4743 -v -6.5928 4.5471 -2.4743 -v -0.7627 6.3911 1.7275 -v -0.7627 5.8571 1.7275 -v -0.1547 5.8571 1.7275 -v -0.1547 6.3911 1.7275 -v -0.1547 5.6880 -0.9886 -v -0.1547 6.2220 -0.9886 -v -0.7627 5.6880 -0.9886 -v -0.7627 6.2220 -0.9886 -v -0.1547 5.8571 -3.7047 -v -0.1547 6.3911 -3.7047 -v -0.7627 5.8571 -3.7047 -v -0.7627 6.3911 -3.7047 -v -9.5780 13.2240 -5.7084 -v -9.5780 13.2240 -6.8530 -v -9.5780 12.0794 -6.8530 -v -9.5780 12.0794 -5.7084 -v -7.0316 12.1154 -5.8837 -v -7.0316 11.4287 -5.8837 -v -7.0316 12.1154 -6.6777 -v -7.0316 11.4287 -6.6777 -v 13.3742 12.0794 -6.8530 -v 13.3742 13.2240 -6.8530 -v 13.3742 13.2240 -5.7084 -v 13.3742 12.0794 -5.7084 -v 10.8277 12.1154 -5.8837 -v 10.8277 11.4287 -5.8837 -v 10.8277 12.1154 -6.6777 -v 10.8277 11.4287 -6.6777 -v 4.5500 0.4863 -10.2550 -v -6.4192 0.4863 -10.2550 -v -6.4192 0.4863 -10.1240 -v 4.5500 0.4863 -10.1240 -v 4.5500 -0.0000 -10.2550 -v -6.4192 -0.0000 -10.2550 -v 8.4124 0.4863 -10.1240 -v 10.6462 0.4863 -10.1240 -v 10.6462 0.4863 -10.2550 -v 8.4124 0.4863 -10.2550 -v 10.6462 0.0000 -10.2550 -v 8.4124 0.0000 -10.2550 -v 10.7255 0.4863 -10.0665 -v 10.7256 0.4863 -2.4950 -v 10.8565 0.4863 -2.4950 -v 10.8565 0.4863 -10.0665 -v 10.8565 -0.0000 -2.4950 -v 10.8565 0.0000 -10.0665 -v -0.5905 1.5860 -13.8366 -v -0.4251 0.0182 -14.0014 -v -0.9883 0.0182 -14.0014 -v -0.9242 1.5860 -13.8366 -v -0.9883 0.0182 -13.5140 -v -0.9242 1.5860 -13.5666 -v -0.4251 0.0182 -13.5140 -v -0.5905 1.5860 -13.5666 -v -0.9320 3.1539 -13.8763 -v -0.5124 3.1539 -13.8763 -v -0.9319 3.1539 -13.5649 -v -0.5124 3.1539 -13.5649 -v -5.5213 1.5860 -13.8366 -v -5.1876 1.5860 -13.8366 -v -5.1235 0.0182 -14.0014 -v -5.6866 0.0182 -14.0014 -v -5.1876 1.5860 -13.5666 -v -5.1235 0.0182 -13.5140 -v -5.5213 1.5860 -13.5666 -v -5.6866 0.0182 -13.5140 -v -5.5994 3.1539 -13.8763 -v -5.1798 3.1539 -13.8763 -v -5.1798 3.1539 -13.5649 -v -5.5994 3.1539 -13.5649 -v -6.8947 3.4479 -10.2905 -v -6.3171 3.4479 -10.2905 -v -6.3044 -0.0000 -10.4383 -v -7.0470 -0.0000 -10.4383 -v -6.3171 3.4479 -9.7129 -v -6.3044 -0.0000 -9.6957 -v -6.8947 3.4479 -9.7129 -v -7.0470 -0.0000 -9.6957 -v -7.0470 8.5873 -10.4383 -v -6.3045 8.5873 -10.4383 -v -6.3045 9.1801 -9.6957 -v -7.0470 9.1801 -9.6957 -v -6.4257 3.9181 -10.2572 -v 10.5452 3.9181 -10.2572 -v 10.5452 3.9181 -10.0617 -v -6.4257 3.9181 -10.0617 -v -6.4257 4.5471 -10.2572 -v 10.5452 4.5472 -10.2572 -v -6.4257 4.5471 -10.0617 -v 10.5452 4.5472 -10.0617 -v -6.9209 3.4479 -2.2090 -v -7.0732 -0.0000 -2.0613 -v -6.3306 -0.0000 -2.0613 -v -6.3433 3.4479 -2.2090 -v -6.3306 -0.0000 -2.8038 -v -6.3433 3.4479 -2.7867 -v -7.0732 -0.0000 -2.8038 -v -6.9209 3.4479 -2.7867 -v -6.3306 8.5873 -2.0613 -v -7.0732 8.5873 -2.0613 -v -6.3306 9.1801 -2.8038 -v -7.0732 9.1801 -2.8038 -v 1.5088 1.8799 10.4382 -v 2.5213 1.9253 10.4382 -v 2.5213 1.9253 11.5212 -v 1.5088 1.8799 11.5212 -v 1.7613 2.3664 10.0553 -v 2.2262 2.3872 10.0553 -v 2.9883 2.8249 10.4382 -v 2.9882 2.8249 11.5212 -v 2.4407 2.8004 10.0553 -v 2.4426 3.6791 10.4382 -v 2.4426 3.6791 11.5212 -v 2.1901 3.1926 10.0553 -v 1.4301 3.6337 10.4382 -v 1.4300 3.6337 11.5212 -v 1.7251 3.1718 10.0553 -v 0.9631 2.7341 10.4382 -v 0.9631 2.7341 11.5212 -v 1.5107 2.7586 10.0553 -v 2.9369 4.0367 13.6746 -v 2.9369 3.7386 10.6560 -v 0.7733 3.7386 10.6560 -v 0.7733 4.0367 13.6746 -v 4.3514 -0.1928 14.0014 -v -0.6387 -0.1928 14.0014 -v 4.5400 -0.1928 10.6142 -v -0.8273 -0.1928 10.6142 -# 1595 vertices - -vn -0.0324 -0.0266 0.9991 -vn -0.0324 -0.0265 0.9991 -vn -0.0324 -0.0266 -0.9991 -vn -0.0324 -0.0265 -0.9991 -vn -0.7683 -0.6401 -0.0000 -vn 0.4444 -0.8958 -0.0000 -vn -0.4452 0.8955 0.0000 -vn -0.4450 0.8955 0.0000 -vn 0.0000 -0.0000 1.0000 -vn 1.0000 0.0000 -0.0000 -vn 1.0000 -0.0000 -0.0000 -vn -0.0000 0.0000 -1.0000 -vn -0.0317 0.7597 0.6495 -vn -0.1354 0.9908 0.0000 -vn 0.0000 1.0000 0.0000 -vn 0.0000 0.7816 0.6238 -vn 0.9985 0.0000 -0.0553 -vn 0.9984 0.0000 -0.0557 -vn 0.9984 -0.0000 0.0557 -vn 0.9985 -0.0000 0.0553 -vn -0.1110 0.7057 0.6997 -vn -0.2907 0.9568 0.0000 -vn -0.1110 0.7058 -0.6997 -vn -0.0317 0.7599 -0.6493 -vn -0.0000 0.7816 -0.6237 -vn -0.0557 -0.0000 0.9984 -vn -0.0561 -0.0000 0.9984 -vn -0.0557 0.0000 -0.9984 -vn -0.0561 0.0000 -0.9984 -vn 0.0308 0.7597 0.6495 -vn 0.1345 0.9909 0.0000 -vn -0.9984 0.0000 -0.0557 -vn -0.9985 0.0000 -0.0553 -vn -0.9984 -0.0000 0.0557 -vn -0.9985 -0.0000 0.0553 -vn 0.2911 0.9567 0.0000 -vn 0.1112 0.7057 0.6997 -vn 0.1112 0.7058 -0.6997 -vn 0.0308 0.7599 -0.6493 -vn 0.0565 -0.0000 0.9984 -vn 0.0564 -0.0000 0.9984 -vn 0.0565 0.0000 -0.9984 -vn 0.0564 0.0000 -0.9984 -vn -0.0316 -0.7660 -0.6421 -vn -0.0948 -0.7275 -0.6795 -vn -0.0000 -0.7714 -0.6363 -vn -0.0000 -0.7877 -0.6161 -vn -0.0316 -0.7658 0.6424 -vn 0.0000 -0.7877 0.6161 -vn 0.0000 -0.7714 0.6363 -vn -0.0948 -0.7275 0.6795 -vn 0.0944 -0.7275 -0.6796 -vn 0.1869 -0.6585 -0.7290 -vn 0.1068 -0.7147 -0.6912 -vn 0.0317 -0.7660 -0.6421 -vn -0.1068 -0.7147 -0.6912 -vn -0.1865 -0.6584 -0.7292 -vn 0.0944 -0.7275 0.6796 -vn 0.0317 -0.7658 0.6424 -vn 0.1068 -0.7147 0.6912 -vn 0.1869 -0.6584 0.7291 -vn -0.1864 -0.6584 0.7292 -vn -0.1068 -0.7147 0.6912 -vn -1.0000 -0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn -0.1637 0.7744 -0.6111 -vn -0.1638 0.7744 -0.6111 -vn -0.1640 0.7747 -0.6107 -vn -0.9784 -0.2067 0.0000 -vn -0.2053 0.9718 -0.1162 -vn -0.1636 0.7743 0.6113 -vn -0.1640 0.7747 0.6107 -vn -0.1637 0.7744 0.6111 -vn -0.1638 0.7743 0.6112 -vn -0.2053 0.9718 0.1162 -vn -0.2053 0.9718 0.1164 -vn -0.1364 0.7797 -0.6111 -vn -0.1362 0.7797 -0.6111 -vn -0.1366 0.7798 -0.6110 -vn -0.1366 0.7797 -0.6111 -vn -0.9851 -0.1720 0.0000 -vn -0.1707 0.9785 -0.1162 -vn -0.1711 0.9784 -0.1161 -vn -0.1364 0.7797 0.6111 -vn -0.1366 0.7797 0.6111 -vn -0.1366 0.7798 0.6110 -vn -0.1360 0.7797 0.6113 -vn -0.1711 0.9784 0.1161 -vn -0.1707 0.9785 0.1162 -vn -0.0956 0.7858 -0.6111 -vn -0.0948 0.7858 -0.6111 -vn -0.0956 0.7859 -0.6110 -vn -0.9927 -0.1209 0.0000 -vn -0.9927 -0.1205 0.0000 -vn -0.1200 0.9860 -0.1161 -vn -0.1196 0.9860 -0.1161 -vn -0.0956 0.7858 0.6111 -vn -0.0956 0.7859 0.6110 -vn -0.0948 0.7857 0.6112 -vn -0.1196 0.9860 0.1163 -vn -0.1200 0.9860 0.1161 -vn -0.1196 0.9860 0.1161 -vn -0.1203 0.9859 -0.1161 -vn -0.0948 0.7859 0.6110 -vn -0.1196 0.9860 0.1160 -vn -0.1203 0.9859 0.1161 -vn -0.0955 0.7858 -0.6111 -vn -0.0955 0.7859 -0.6110 -vn -0.0955 0.7858 0.6111 -vn -0.0422 0.7904 -0.6111 -vn -0.0422 0.7905 -0.6110 -vn -0.9986 -0.0534 0.0000 -vn -0.0534 0.9918 -0.1162 -vn -0.0542 0.9918 -0.1161 -vn -0.0421 0.7904 0.6111 -vn -0.0422 0.7904 0.6111 -vn -0.0422 0.7905 0.6110 -vn -0.0534 0.9918 0.1160 -vn -0.0542 0.9917 0.1163 -vn -0.0534 0.9918 0.1162 -vn 0.9927 -0.1205 -0.0000 -vn 0.9927 -0.1209 -0.0000 -vn 0.0948 0.7858 -0.6111 -vn 0.0955 0.7859 -0.6110 -vn 0.0955 0.7858 -0.6111 -vn 0.0956 0.7858 -0.6111 -vn -0.9927 0.1205 0.0000 -vn -0.9927 0.1209 0.0000 -vn 0.1196 0.9860 -0.1161 -vn 0.1196 0.9861 -0.1158 -vn 0.1203 0.9859 -0.1161 -vn 0.0948 0.7858 0.6111 -vn 0.0956 0.7858 0.6111 -vn 0.0955 0.7858 0.6111 -vn 0.1196 0.9860 0.1161 -vn 0.1196 0.9860 0.1163 -vn 0.1203 0.9859 0.1161 -vn 0.0271 0.7912 -0.6110 -vn 0.0271 0.7911 -0.6111 -vn 0.0263 0.7911 -0.6111 -vn 0.9994 -0.0339 -0.0000 -vn 0.9994 -0.0336 -0.0000 -vn 0.0339 0.9927 -0.1162 -vn 0.9994 -0.0339 0.0004 -vn 0.0271 0.7912 0.6110 -vn 0.0263 0.7911 0.6111 -vn 0.0271 0.7911 0.6111 -vn 0.0339 0.9927 0.1162 -vn 0.0339 0.9927 0.1160 -vn 0.9994 -0.0336 -0.0004 -vn 0.0677 0.7888 -0.6109 -vn 0.0677 0.7886 -0.6112 -vn 0.9963 -0.0858 -0.0000 -vn 0.9963 -0.0854 -0.0000 -vn 0.0850 0.9896 -0.1162 -vn 0.0842 0.9897 -0.1162 -vn 0.0677 0.7888 0.6109 -vn 0.0677 0.7886 0.6112 -vn 0.0677 0.7885 0.6113 -vn 0.0850 0.9896 0.1162 -vn 0.0842 0.9897 0.1160 -vn 0.0947 0.7858 -0.6111 -vn 0.1195 0.9860 -0.1161 -vn 0.0955 0.7859 0.6110 -vn 0.0947 0.7858 0.6112 -vn 0.1195 0.9860 0.1161 -vn 0.1195 0.9860 0.1163 -vn 0.0948 0.7859 -0.6110 -vn 0.0948 0.7859 0.6110 -vn 0.0263 0.7912 -0.6110 -vn 0.0338 0.9927 -0.1162 -vn 0.0331 0.9927 -0.1162 -vn 0.0338 0.9927 0.1162 -vn 0.0339 0.9926 0.1164 -vn 0.0331 0.9927 0.1162 -vn -0.0947 0.7858 -0.6111 -vn 0.9927 0.1205 -0.0000 -vn 0.9927 0.1209 -0.0000 -vn -0.1196 0.9861 -0.1158 -vn -0.1195 0.9861 -0.1158 -vn -0.1195 0.9860 -0.1161 -vn -0.0955 0.7859 0.6110 -vn -0.0947 0.7858 0.6112 -vn -0.1195 0.9860 0.1161 -vn 0.0956 0.7859 -0.6110 -vn 0.1203 0.9860 -0.1158 -vn 0.0956 0.7859 0.6110 -vn 0.1203 0.9859 0.1159 -vn 0.9277 -0.3734 -0.0000 -vn 0.9276 -0.3735 -0.0000 -vn 0.2962 0.7343 -0.6109 -vn 0.2962 0.7340 -0.6112 -vn -0.9277 0.3734 0.0000 -vn -0.9275 0.3738 0.0000 -vn 0.9277 -0.3734 0.0004 -vn 0.9275 -0.3738 0.0004 -vn 0.3708 0.9214 -0.1162 -vn 0.3714 0.9212 -0.1158 -vn 0.3707 0.9215 -0.1158 -vn -0.9276 0.3735 0.0000 -vn 0.2962 0.7343 0.6107 -vn 0.2962 0.7340 0.6112 -vn 0.2962 0.7343 0.6109 -vn 0.9275 -0.3738 -0.0000 -vn 0.9277 -0.3734 -0.0004 -vn 0.3708 0.9214 0.1162 -vn 0.3713 0.9212 0.1163 -vn 0.9927 -0.1205 0.0004 -vn 0.9927 -0.1205 -0.0004 -vn 0.1196 0.9860 0.1160 -vn -0.9567 -0.2911 0.0000 -vn -0.9566 -0.2914 0.0000 -vn -0.2304 0.7572 -0.6111 -vn -0.2304 0.7572 -0.6113 -vn 0.9567 0.2911 -0.0000 -vn -0.2892 0.9503 -0.1158 -vn -0.2895 0.9501 -0.1158 -vn -0.2891 0.9502 -0.1162 -vn 0.9566 0.2914 -0.0000 -vn -0.2304 0.7572 0.6111 -vn -0.2304 0.7572 0.6113 -vn -0.2304 0.7573 0.6110 -vn -0.2891 0.9502 0.1162 -vn -0.2895 0.9501 0.1160 -vn -0.2891 0.9502 0.1163 -vn -0.1640 0.7744 -0.6111 -vn -0.1640 0.7745 -0.6110 -vn -0.9785 -0.2064 0.0000 -vn -0.2048 0.9719 -0.1161 -vn -0.1640 0.7745 0.6110 -vn -0.1637 0.7745 0.6110 -vn -0.1640 0.7743 0.6112 -vn -0.2052 0.9718 0.1159 -vn -0.2048 0.9719 0.1161 -vn -0.6136 0.7897 0.0000 -vn -0.6676 0.7439 -0.0319 -vn -0.0000 0.9769 -0.2139 -vn 0.6676 0.7439 -0.0319 -vn 0.6135 0.7897 0.0000 -vn -0.1835 -0.0000 0.9830 -vn -0.1842 -0.0000 0.9829 -vn 0.1843 -0.0000 0.9829 -vn 0.1842 -0.0000 0.9829 -vn 0.1843 0.0000 -0.9829 -vn 0.1842 0.0000 -0.9829 -vn -0.1835 0.0000 -0.9830 -vn -0.1842 0.0000 -0.9829 -vn -0.6658 -0.7462 -0.0000 -vn -0.6135 -0.7897 -0.0000 -vn -0.6676 -0.7439 0.0319 -vn -0.7092 -0.6886 0.1512 -vn 0.6662 -0.7458 -0.0000 -vn 0.6131 -0.7900 -0.0000 -vn 0.6671 -0.7442 -0.0319 -vn 0.7097 -0.6882 -0.1508 -vn 0.0000 0.9768 0.2143 -vn 0.0000 0.9621 0.2726 -vn -0.7141 0.6975 0.0589 -vn -0.6675 0.7439 0.0323 -vn -0.7141 0.6975 -0.0590 -vn -0.0000 0.9621 -0.2726 -vn 0.7141 0.6975 0.0591 -vn 0.6676 0.7439 0.0323 -vn 0.7141 0.6975 -0.0590 -vn -0.7093 -0.6886 -0.1508 -vn -0.7406 -0.6466 -0.1831 -vn -0.7141 -0.6975 -0.0591 -vn -0.6676 -0.7439 -0.0319 -vn -0.7141 -0.6976 0.0594 -vn -0.7406 -0.6466 0.1831 -vn 0.7097 -0.6882 0.1511 -vn 0.7409 -0.6462 0.1830 -vn 0.7137 -0.6979 0.0594 -vn 0.6671 -0.7442 0.0319 -vn 0.7137 -0.6979 -0.0591 -vn 0.7409 -0.6462 -0.1829 -vn 0.6112 0.7744 -0.1635 -vn 0.6113 0.7743 -0.1635 -vn -0.0000 -0.2068 -0.9784 -vn 0.1166 0.9717 -0.2053 -vn 0.1158 0.9718 -0.2052 -vn 0.1166 0.9717 -0.2054 -vn -0.6112 0.7744 -0.1635 -vn -0.1166 0.9717 -0.2053 -vn -0.1158 0.9718 -0.2052 -vn 0.6112 0.7797 -0.1361 -vn 0.6112 0.7797 -0.1360 -vn -0.0000 -0.1720 -0.9851 -vn 0.1165 0.9784 -0.1710 -vn 0.1158 0.9785 -0.1707 -vn 0.1165 0.9783 -0.1711 -vn -0.0000 -0.1724 -0.9850 -vn -0.6112 0.7797 -0.1361 -vn -0.6112 0.7797 -0.1360 -vn -0.1165 0.9784 -0.1707 -vn -0.1158 0.9784 -0.1711 -vn -0.9962 -0.0225 0.0842 -vn -0.9962 -0.0225 0.0841 -vn -0.6126 0.7606 0.2149 -vn -0.6124 0.7607 0.2152 -vn -0.6128 0.7603 0.2154 -vn 0.0873 -0.2056 0.9747 -vn 0.0872 -0.2060 0.9747 -vn -0.1203 0.9691 0.2155 -vn -0.1203 0.9691 0.2156 -vn -0.1203 0.9690 0.2158 -vn 0.0865 -0.2060 0.9747 -vn 0.0873 -0.2060 0.9747 -vn 0.9962 0.0225 -0.0841 -vn 0.9962 0.0225 -0.0842 -vn 0.9962 0.0225 -0.0846 -vn 0.6052 0.7881 0.1124 -vn 0.6052 0.7881 0.1123 -vn 0.6053 0.7881 0.1124 -vn 0.0865 -0.2056 0.9748 -vn 0.1113 0.9743 0.1959 -vn 0.1120 0.9742 0.1959 -vn 0.1113 0.9744 0.1955 -vn -0.6111 0.7858 0.0955 -vn -0.6111 0.7858 0.0954 -vn 0.0000 -0.1209 0.9927 -vn 0.0000 -0.1205 0.9927 -vn -0.1158 0.9860 0.1200 -vn -0.1165 0.9859 0.1200 -vn 0.6111 0.7858 0.0955 -vn 0.6111 0.7858 0.0954 -vn 0.6111 0.7858 0.0956 -vn 0.1158 0.9860 0.1199 -vn 0.1158 0.9860 0.1200 -vn 0.1165 0.9859 0.1200 -vn 0.6112 0.7744 -0.1636 -vn 0.0000 0.2068 0.9784 -vn 0.1158 0.9718 -0.2053 -vn -0.6112 0.7744 -0.1636 -vn -0.1158 0.9718 -0.2053 -vn -0.1166 0.9717 -0.2054 -vn 0.0000 -0.1202 0.9928 -vn 0.0000 -1.0000 0.0037 -vn 0.0000 -0.9944 0.1060 -vn -0.0000 1.0000 -0.0033 -vn -0.0000 0.9944 -0.1057 -vn 0.0000 -0.9783 0.2071 -vn -0.0000 0.9783 -0.2071 -vn -0.0000 0.8219 -0.5696 -vn 0.0000 -0.9972 0.0744 -vn -0.0000 -1.0000 -0.0000 -vn 0.0000 0.8219 0.5696 -vn -0.0000 -0.9972 -0.0746 -vn 0.0000 -0.8093 0.5874 -vn 0.0000 -0.8091 0.5877 -vn -0.0000 -0.8094 -0.5873 -vn -0.0000 -0.8090 -0.5878 -vn -0.0000 0.9968 -0.0805 -vn -0.0000 0.9968 -0.0801 -vn 0.0000 0.9982 0.0593 -vn 0.0000 0.9983 0.0591 -vn 0.0000 0.9946 0.1034 -vn -0.0000 0.9980 -0.0635 -vn -0.0000 0.9980 -0.0637 -vn -0.0000 -0.9972 -0.0744 -vn 0.0000 -0.9848 0.1736 -vn 0.0000 -0.9849 0.1732 -vn -0.0000 0.9848 -0.1739 -vn -0.0000 0.9848 -0.1736 -vn -0.0000 -0.1737 -0.9848 -vn -1.0000 -0.0000 0.0001 -vn -1.0000 -0.0000 0.0002 -vn -0.0000 1.0000 0.0000 -vn -0.5699 0.8217 0.0000 -vn 0.0752 -0.9972 -0.0000 -vn 0.5699 0.8217 0.0000 -vn -0.0745 -0.9972 -0.0000 -vn 0.5874 -0.8093 -0.0000 -vn -0.5874 -0.8093 -0.0000 -vn -0.0805 0.9968 0.0000 -vn -0.0804 0.9968 0.0000 -vn 0.0594 0.9982 0.0000 -vn 0.1038 0.9946 0.0000 -vn -0.0632 0.9980 0.0000 -vn 0.0745 -0.9972 -0.0000 -vn -0.0752 -0.9972 -0.0000 -vn 0.0827 -0.9966 -0.0000 -vn -0.0834 0.9965 0.0000 -vn -0.0832 -0.9965 -0.0000 -vn 0.0832 0.9965 0.0000 -vn -0.5694 0.8221 0.0000 -vn 0.0744 -0.9972 -0.0000 -vn 0.5696 0.8219 0.0000 -vn -0.0736 -0.9973 -0.0000 -vn 0.5873 -0.8094 -0.0000 -vn -0.5879 -0.8090 -0.0000 -vn 0.0593 0.9982 0.0000 -vn 0.1030 0.9947 0.0000 -vn -0.0631 0.9980 0.0000 -vn 0.0736 -0.9973 -0.0000 -vn -0.0744 -0.9972 -0.0000 -vn 0.0083 0.0002 1.0000 -vn 0.0090 -0.0000 1.0000 -vn 0.0008 -0.0000 1.0000 -vn -0.0030 -0.0004 1.0000 -vn 0.6059 -0.7955 0.0000 -vn 0.6059 -0.7955 -0.0000 -vn 0.5195 -0.8545 -0.0000 -vn 0.5197 -0.8543 -0.0000 -vn 0.0414 0.0013 -0.9991 -vn -0.0143 -0.0015 -0.9999 -vn 0.0038 -0.0002 -1.0000 -vn 0.0421 0.0000 -0.9991 -vn -0.5949 0.8038 0.0000 -vn -0.6071 0.7946 0.0000 -vn 0.0000 -0.0008 1.0000 -vn -0.0000 -0.0027 -1.0000 -vn -0.0097 0.0002 1.0000 -vn 0.0031 -0.0004 1.0000 -vn -0.0008 -0.0000 1.0000 -vn -0.0097 -0.0000 1.0000 -vn -0.6220 -0.7830 0.0000 -vn -0.5287 -0.8488 -0.0000 -vn -0.5285 -0.8489 -0.0000 -vn -0.6220 -0.7830 -0.0000 -vn -0.0045 0.0000 -1.0000 -vn 0.0151 -0.0015 -0.9999 -vn -0.0428 0.0015 -0.9991 -vn -0.0436 0.0000 -0.9990 -vn 0.6165 0.7874 0.0000 -vn 0.6130 0.7901 0.0000 -vn 0.0000 -0.9739 0.2271 -vn 0.0000 -0.8861 0.4635 -vn 0.9991 -0.0050 -0.0421 -vn 0.9990 0.0000 -0.0447 -vn 1.0000 -0.0027 -0.0083 -vn 1.0000 -0.0004 -0.0072 -vn -0.0000 0.9710 -0.2393 -vn -0.0000 0.9163 -0.4005 -vn -0.9991 -0.0050 -0.0418 -vn -1.0000 -0.0004 -0.0072 -vn -1.0000 -0.0027 -0.0083 -vn -0.9990 0.0000 -0.0447 -vn 0.0000 -0.7442 0.6680 -vn 0.9997 0.0221 0.0049 -vn 0.9997 0.0244 -0.0000 -vn -0.0000 0.8358 -0.5490 -vn -0.9997 0.0244 0.0000 -vn -0.9997 0.0221 0.0049 -vn -0.0000 0.0757 -0.9971 -vn 1.0000 0.0034 -0.0000 -vn 0.0000 -0.0369 0.9993 -vn -0.9994 0.0356 0.0000 -vn -0.0158 0.0371 -0.9992 -vn 1.0000 -0.0032 -0.0000 -vn 0.0342 -0.0806 0.9962 -vn -0.9988 -0.0490 0.0000 -vn 0.0000 0.0757 0.9971 -vn -0.0000 -0.0369 -0.9993 -vn -0.0158 0.0371 0.9992 -vn 0.0342 -0.0806 -0.9962 -vn 0.0402 0.9992 0.0000 -vn -0.0402 0.9992 0.0000 -vn 0.0000 0.2273 0.9738 -vn -1.0000 -0.0040 0.0000 -vn -0.0000 -0.2273 -0.9738 -vn 1.0000 0.0040 -0.0000 -vn 0.0000 -0.2061 0.9785 -vn -1.0000 0.0036 0.0000 -vn -0.0000 0.2061 -0.9785 -vn 1.0000 -0.0036 -0.0000 -vn 0.0000 -0.8402 0.5423 -vn 0.9996 0.0126 0.0243 -vn -0.0000 0.8896 -0.4567 -vn -0.9996 0.0126 0.0244 -vn 0.0000 -0.5899 0.8075 -vn 0.9988 -0.0481 -0.0097 -vn -0.0000 0.6011 -0.7992 -vn -0.9988 -0.0481 -0.0097 -vn 0.9996 0.0126 0.0244 -vn -0.9996 0.0126 0.0243 -vn 0.8876 0.4607 0.0000 -vn 0.0448 0.9990 0.0000 -vn -0.8427 0.5383 0.0000 -vn -0.8876 -0.4607 -0.0000 -vn -0.0448 -0.9990 -0.0000 -vn 0.8427 -0.5383 -0.0000 -vn -0.7071 -0.7071 0.0000 -vn 0.7071 0.7071 -0.0000 -vn -0.0000 -0.0000 1.0000 -vn 0.7071 -0.7071 -0.0000 -vn -0.7071 0.7071 0.0000 -vn 0.0448 0.9990 -0.0000 -vn -0.9858 0.0443 0.1620 -vn -0.9858 0.0442 -0.1620 -vn 0.3019 0.9534 -0.0000 -vn -0.3019 -0.9534 0.0000 -vn 0.0000 -0.0000 -1.0000 -vn 0.7381 0.6747 0.0000 -vn -0.0000 0.0000 1.0000 -vn -0.7381 -0.6747 -0.0000 -vn 0.9766 0.2153 0.0000 -vn -0.9766 -0.2153 -0.0000 -vn 0.9534 -0.3019 0.0000 -vn -0.9534 0.3018 -0.0000 -vn 0.6747 -0.7381 -0.0000 -vn 0.0000 0.0000 1.0000 -vn -0.6747 0.7381 -0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.2153 -0.9766 0.0000 -vn -0.2153 0.9766 -0.0000 -vn -0.3019 -0.9534 -0.0000 -vn 0.3019 0.9534 0.0000 -vn -0.0000 -0.0000 -1.0000 -vn -0.9766 -0.2153 0.0000 -vn 0.9766 0.2153 -0.0000 -vn -0.9534 0.3019 -0.0000 -vn 0.6747 -0.7381 0.0000 -vn -0.2153 0.9766 0.0000 -vn 0.7381 0.6747 -0.0000 -vn -0.7381 -0.6747 0.0000 -vn 0.9534 -0.3019 -0.0000 -vn -0.9534 0.3019 0.0000 -vn -0.6747 0.7381 0.0000 -vn 0.2153 -0.9766 -0.0000 -vn 0.4158 0.9095 -0.0000 -vn -0.4158 -0.9095 -0.0000 -vn -0.8974 0.4104 0.1620 -vn 0.4158 0.9095 0.0000 -vn -0.8974 0.4103 -0.1621 -vn 0.0448 -0.9990 -0.0000 -vn 0.0281 -0.6272 -0.7784 -vn 0.8876 -0.4607 0.0000 -vn 0.5572 -0.2892 -0.7784 -vn 0.8427 0.5383 0.0000 -vn 0.5291 0.3380 -0.7784 -vn -0.0448 0.9990 0.0000 -vn -0.0281 0.6272 -0.7784 -vn -0.8876 0.4607 -0.0000 -vn -0.5572 0.2892 -0.7784 -vn -0.8427 -0.5383 -0.0000 -vn -0.5291 -0.3380 -0.7784 -vn 0.0000 -1.0000 -0.0000 -vn 0.7262 0.6875 -0.0000 -vn -0.7262 -0.6875 0.0000 -vn -0.6784 0.7166 0.1620 -vn 0.7262 0.6875 0.0000 -vn -0.7262 -0.6875 -0.0000 -vn -0.6784 0.7166 -0.1620 -vn 0.9309 0.3654 -0.0000 -vn -0.9309 -0.3654 -0.0000 -vn -0.3605 0.9186 0.1620 -vn 0.9309 0.3654 0.0000 -vn -0.9309 -0.3654 0.0000 -vn -0.3605 0.9186 -0.1620 -vn 0.0000 -1.0000 0.0000 -vn 0.3976 -0.9175 -0.0000 -vn -0.3976 0.9175 -0.0000 -vn 0.9054 0.3924 0.1620 -vn 0.3976 -0.9175 0.0000 -vn -0.3976 0.9175 0.0000 -vn 0.9054 0.3924 -0.1620 -vn 1.0000 -0.0100 0.0000 -vn -1.0000 0.0099 -0.0000 -vn 0.0098 0.9867 0.1620 -vn 1.0000 -0.0100 -0.0000 -vn -1.0000 0.0099 0.0000 -vn 0.0098 0.9867 -0.1620 -vn 0.9234 -0.3838 0.0000 -vn -0.9234 0.3838 -0.0000 -vn 0.3788 0.9112 0.1620 -vn 0.9234 -0.3838 -0.0000 -vn 0.3787 0.9112 -0.1620 -vn 0.7124 -0.7018 0.0000 -vn -0.7124 0.7018 0.0000 -vn 0.6925 0.7030 0.1620 -vn -0.7124 0.7018 -0.0000 -vn 0.6925 0.7030 -0.1620 -vn 0.0281 0.6272 0.7784 -vn 0.8876 0.4607 -0.0000 -vn 0.5572 0.2892 0.7784 -vn 0.5291 -0.3380 0.7784 -vn -0.0448 -0.9990 0.0000 -vn -0.0281 -0.6272 0.7784 -vn -0.8876 -0.4607 0.0000 -vn -0.5572 -0.2892 0.7784 -vn -0.5291 0.3380 0.7784 -vn -0.9031 -0.4294 -0.0000 -vn 0.9031 0.4294 0.0000 -vn 0.4238 -0.8912 0.1620 -vn 0.9031 0.4294 -0.0000 -vn 0.4238 -0.8912 -0.1620 -vn -0.4607 0.8876 0.0000 -vn 0.4607 -0.8876 -0.0000 -vn -0.8758 -0.4546 0.1620 -vn -0.4607 0.8876 -0.0000 -vn 0.4607 -0.8876 0.0000 -vn -0.8758 -0.4546 -0.1620 -vn -0.7596 0.6504 -0.0000 -vn 0.7596 -0.6504 0.0000 -vn -0.6417 -0.7496 0.1620 -vn -0.6418 -0.7496 -0.1620 -vn -0.6765 -0.7365 -0.0000 -vn 0.6765 0.7365 0.0000 -vn 0.7267 -0.6676 0.1620 -vn -0.6765 -0.7365 0.0000 -vn 0.6765 0.7365 -0.0000 -vn 0.7267 -0.6676 -0.1620 -vn 0.0000 0.0428 0.9991 -vn -1.0000 0.0037 0.0000 -vn -0.0000 0.0050 -1.0000 -vn 0.9990 0.0441 -0.0000 -vn 0.0000 -0.0287 0.9996 -vn -1.0000 -0.0023 -0.0010 -vn -0.0000 -0.0030 -1.0000 -vn 0.9995 -0.0278 -0.0125 -vn -0.9982 -0.0598 0.0000 -vn 0.9982 0.0599 0.0000 -vn 0.0590 -0.9850 0.1620 -vn -0.9982 -0.0598 -0.0000 -vn 0.9982 0.0598 0.0000 -vn 0.0591 -0.9850 -0.1620 -vn -0.9479 0.3184 0.0000 -vn 0.9479 -0.3185 0.0000 -vn -0.3143 -0.9354 0.1620 -vn -0.9479 0.3184 -0.0000 -vn 0.9479 -0.3185 -0.0000 -vn -0.3143 -0.9354 -0.1620 -vn -0.3513 -0.9363 0.0000 -vn 0.3513 0.9363 0.0000 -vn 0.9239 -0.3467 0.1620 -vn -0.3513 -0.9363 -0.0000 -vn 0.3513 0.9363 -0.0000 -vn 0.9239 -0.3467 -0.1620 -vn 0.0250 -0.9997 -0.0000 -vn -0.0250 0.9997 -0.0000 -vn 0.9865 0.0247 0.1620 -vn -0.0250 0.9997 0.0000 -vn 0.9865 0.0246 -0.1620 -vn 0.0000 -0.9981 0.0621 -vn -0.0000 0.9981 -0.0621 -vn 0.0000 -0.9981 -0.0621 -vn -0.0000 0.9981 0.0621 -vn -1.0000 0.0034 0.0000 -vn 0.9994 0.0356 -0.0000 -vn -0.0319 -0.0752 0.9967 -vn -1.0000 -0.0029 0.0000 -vn 0.0156 0.0366 -0.9992 -vn 0.9991 -0.0423 -0.0000 -vn -0.0621 -0.9981 -0.0000 -vn 0.0621 0.9981 0.0000 -vn 0.0621 -0.9981 -0.0000 -vn -0.0621 0.9981 0.0000 -vn 0.0319 -0.0752 0.9967 -vn 1.0000 -0.0029 -0.0000 -vn -0.0156 0.0366 -0.9992 -vn -0.9991 -0.0423 0.0000 -vn -0.0000 0.0428 -0.9991 -vn 0.0000 0.0050 1.0000 -vn -0.0000 -0.0287 -0.9996 -vn -1.0000 -0.0023 0.0010 -vn 0.0000 -0.0030 1.0000 -vn 0.9995 -0.0278 0.0125 -vn -0.0000 1.0000 -0.0000 -vn -0.0000 -0.9981 -0.0621 -vn 0.0000 0.9981 0.0621 -vn 0.0687 -0.0000 0.9976 -vn 0.3992 0.9169 0.0000 -vn 0.0687 -0.0000 -0.9976 -vn -0.2476 -0.9689 0.0000 -vn -0.0687 0.0000 0.9976 -vn -0.3992 0.9169 0.0000 -vn -0.0687 -0.0000 -0.9976 -vn 0.2476 -0.9689 -0.0000 -vn -0.0000 0.1045 -0.9945 -vn -0.9992 0.0409 0.0000 -vn 0.0000 0.0335 0.9994 -vn 0.9945 0.1049 -0.0000 -vn -0.0000 -0.0253 -0.9997 -vn -1.0000 -0.0049 0.0000 -vn 0.0000 -0.0011 1.0000 -vn 0.9988 -0.0497 -0.0000 -vn 0.9992 0.0409 -0.0000 -vn -0.9945 0.1049 0.0000 -vn 1.0000 -0.0049 -0.0000 -vn -0.9988 -0.0497 0.0000 -vn 1.0000 0.0037 -0.0000 -vn -0.9990 0.0441 0.0000 -vn 1.0000 -0.0023 0.0010 -vn -0.9995 -0.0278 0.0125 -vn 1.0000 -0.0023 -0.0010 -vn -0.9995 -0.0278 -0.0125 -vn -0.8427 -0.5383 0.0000 -vn -0.0000 0.9952 -0.0983 -vn -0.0000 0.0770 0.9970 -vn 0.9377 0.3472 0.0115 -vn 0.0000 0.0106 -0.9999 -vn -0.9379 0.3466 0.0115 -# 693 vertex normals - -vt 0.1884 0.3161 0.0000 -vt 0.1688 0.2372 0.0000 -vt 0.1720 0.2371 0.0000 -vt 0.1916 0.3161 0.0000 -vt 0.1897 0.3947 0.0000 -vt 0.1929 0.3947 0.0000 -vt 0.1761 0.4742 0.0000 -vt 0.1729 0.4743 0.0000 -vt 0.8659 0.5518 0.0000 -vt 0.8811 0.5518 0.0000 -vt 0.2678 0.4000 0.0000 -vt 0.3731 0.4000 0.0000 -vt 0.3775 0.5142 0.0000 -vt 0.3625 0.5142 0.0000 -vt 0.2785 0.5142 0.0000 -vt 0.2634 0.5142 0.0000 -vt 0.8659 0.7423 0.0000 -vt 0.8811 0.7423 0.0000 -vt 0.2378 0.6247 0.0000 -vt 0.2378 0.7564 0.0000 -vt 0.0073 0.7564 0.0000 -vt 0.0073 0.6247 0.0000 -vt 0.3222 0.6253 0.0000 -vt 0.3222 0.8615 0.0000 -vt 0.3859 0.7813 0.0000 -vt 0.3859 0.6253 0.0000 -vt 0.3977 0.6216 0.0000 -vt 0.3977 0.7587 0.0000 -vt 0.6692 0.7587 0.0000 -vt 0.6692 0.6216 0.0000 -vt 0.2584 0.6253 0.0000 -vt 0.2584 0.7813 0.0000 -vt 0.6393 0.8948 0.0000 -vt 0.6603 0.9912 0.0000 -vt 0.5682 0.9915 0.0000 -vt 0.5679 0.8988 0.0000 -vt 0.4652 0.3844 0.0000 -vt 0.3951 0.3844 0.0000 -vt 0.3951 0.3767 0.0000 -vt 0.4652 0.3767 0.0000 -vt 0.5293 0.8048 0.0000 -vt 0.6002 0.8912 0.0000 -vt 0.6002 0.8852 0.0000 -vt 0.5293 0.7988 0.0000 -vt 0.6712 0.8048 0.0000 -vt 0.6712 0.7988 0.0000 -vt 0.7279 0.8770 0.0000 -vt 0.7512 0.9909 0.0000 -vt 0.0986 0.9914 0.0000 -vt 0.0076 0.9910 0.0000 -vt 0.0312 0.8770 0.0000 -vt 0.1198 0.8951 0.0000 -vt 0.1907 0.9919 0.0000 -vt 0.1911 0.8992 0.0000 -vt 0.5509 0.3767 0.0000 -vt 0.5509 0.3844 0.0000 -vt 0.3047 0.3948 0.0000 -vt 0.2353 0.3943 0.0000 -vt 0.2353 0.3891 0.0000 -vt 0.3047 0.3895 0.0000 -vt 0.3615 0.3951 0.0000 -vt 0.3615 0.3898 0.0000 -vt 0.4965 0.8953 0.0000 -vt 0.4761 0.9918 0.0000 -vt 0.3250 0.3844 0.0000 -vt 0.3250 0.3767 0.0000 -vt 0.3852 0.9921 0.0000 -vt 0.4078 0.8780 0.0000 -vt 0.3512 0.8786 0.0000 -vt 0.3737 0.9928 0.0000 -vt 0.2827 0.9924 0.0000 -vt 0.2625 0.8958 0.0000 -vt 0.2393 0.3844 0.0000 -vt 0.2393 0.3767 0.0000 -vt 0.4877 0.3906 0.0000 -vt 0.4876 0.3958 0.0000 -vt 0.4182 0.3954 0.0000 -vt 0.4182 0.3902 0.0000 -vt 0.1962 0.8161 0.0000 -vt 0.2250 0.8102 0.0000 -vt 0.2249 0.8378 0.0000 -vt 0.1972 0.8377 0.0000 -vt 0.2537 0.8163 0.0000 -vt 0.2525 0.8379 0.0000 -vt 0.2248 0.8654 0.0000 -vt 0.2247 0.8925 0.0000 -vt 0.1909 0.8859 0.0000 -vt 0.1961 0.8592 0.0000 -vt 0.1913 0.7894 0.0000 -vt 0.2251 0.7831 0.0000 -vt 0.2535 0.8594 0.0000 -vt 0.2585 0.8862 0.0000 -vt 0.2588 0.7896 0.0000 -vt 0.7429 0.6168 0.0000 -vt 0.7429 0.8534 0.0000 -vt 0.6776 0.7729 0.0000 -vt 0.6776 0.6168 0.0000 -vt 0.8082 0.6168 0.0000 -vt 0.8082 0.7729 0.0000 -vt 0.9227 0.9895 0.0000 -vt 0.9227 0.9512 0.0000 -vt 0.9293 0.9512 0.0000 -vt 0.9293 0.9895 0.0000 -vt 0.9004 0.9895 0.0000 -vt 0.9005 0.9511 0.0000 -vt 0.9267 0.9948 0.0000 -vt 0.9044 0.9948 0.0000 -vt 0.8966 0.9511 0.0000 -vt 0.8966 0.9894 0.0000 -vt 0.8966 0.9959 0.0000 -vt 0.9005 0.9962 0.0000 -vt 0.8639 0.9512 0.0000 -vt 0.8705 0.9512 0.0000 -vt 0.8705 0.9895 0.0000 -vt 0.8639 0.9896 0.0000 -vt 0.8928 0.9511 0.0000 -vt 0.8928 0.9895 0.0000 -vt 0.8888 0.9948 0.0000 -vt 0.8665 0.9948 0.0000 -vt 0.8927 0.9962 0.0000 -vt 0.9864 0.9556 0.0000 -vt 0.9864 0.9896 0.0000 -vt 0.9923 0.9896 0.0000 -vt 0.9923 0.9556 0.0000 -vt 0.9699 0.9941 0.0000 -vt 0.9899 0.9944 0.0000 -vt 0.9668 0.9894 0.0000 -vt 0.9668 0.9558 0.0000 -vt 0.9699 0.9511 0.0000 -vt 0.9899 0.9508 0.0000 -vt 0.9636 0.9900 0.0000 -vt 0.9666 0.9954 0.0000 -vt 0.9636 0.9552 0.0000 -vt 0.9666 0.9497 0.0000 -vt 0.9349 0.9896 0.0000 -vt 0.9408 0.9896 0.0000 -vt 0.9408 0.9556 0.0000 -vt 0.9349 0.9556 0.0000 -vt 0.9373 0.9944 0.0000 -vt 0.9573 0.9941 0.0000 -vt 0.9604 0.9894 0.0000 -vt 0.9604 0.9558 0.0000 -vt 0.9573 0.9511 0.0000 -vt 0.9373 0.9508 0.0000 -vt 0.9606 0.9954 0.0000 -vt 0.9606 0.9497 0.0000 -vt 0.1239 0.8661 0.0000 -vt 0.1267 0.7769 0.0000 -vt 0.0818 0.7722 0.0000 -vt 0.0642 0.8658 0.0000 -vt 0.8811 0.6471 0.0000 -vt 0.8811 0.5994 0.0000 -vt 0.8735 0.7423 0.0000 -vt 0.8659 0.6471 0.0000 -vt 0.8659 0.6947 0.0000 -vt 0.8735 0.6471 0.0000 -vt 0.8735 0.5994 0.0000 -vt 0.8735 0.6947 0.0000 -vt 0.1822 0.8667 0.0000 -vt 0.1730 0.7754 0.0000 -vt 0.0351 0.7642 0.0000 -vt 0.0061 0.8654 0.0000 -vt 0.8811 0.6947 0.0000 -vt 0.8659 0.5994 0.0000 -vt 0.8735 0.5518 0.0000 -vt 0.6444 0.2297 0.0000 -vt 0.6444 0.2727 0.0000 -vt 0.5991 0.2727 0.0000 -vt 0.5991 0.2297 0.0000 -vt 0.4953 0.2059 0.0000 -vt 0.4953 0.0967 0.0000 -vt 0.4666 0.0967 0.0000 -vt 0.4666 0.2059 0.0000 -vt 0.5046 0.2222 0.0000 -vt 0.5145 0.1045 0.0000 -vt 0.5422 0.1069 0.0000 -vt 0.5323 0.2246 0.0000 -vt 0.4953 0.0054 0.0000 -vt 0.4666 0.0054 0.0000 -vt 0.5025 0.0043 0.0000 -vt 0.5302 0.0067 0.0000 -vt 0.9428 0.4005 0.0000 -vt 0.9431 0.4547 0.0000 -vt 0.9608 0.4418 0.0000 -vt 0.9606 0.4015 0.0000 -vt 0.9778 0.3925 0.0000 -vt 0.9778 0.4048 0.0000 -vt 0.9864 0.4048 0.0000 -vt 0.9864 0.3925 0.0000 -vt 0.8648 0.4175 0.0000 -vt 0.8648 0.4561 0.0000 -vt 0.8691 0.4561 0.0000 -vt 0.8691 0.4175 0.0000 -vt 0.9700 0.3925 0.0000 -vt 0.9700 0.4048 0.0000 -vt 0.9875 0.3622 0.0000 -vt 0.9713 0.3620 0.0000 -vt 0.9713 0.3644 0.0000 -vt 0.9874 0.3646 0.0000 -vt 0.9862 0.3834 0.0000 -vt 0.9757 0.3888 0.0000 -vt 0.9862 0.3899 0.0000 -vt 0.9623 0.4520 0.0000 -vt 0.9428 0.4662 0.0000 -vt 0.9428 0.4766 0.0000 -vt 0.9725 0.4560 0.0000 -vt 0.9252 0.3899 0.0000 -vt 0.9356 0.3892 0.0000 -vt 0.9252 0.3834 0.0000 -vt 0.9557 0.3876 0.0000 -vt 0.9557 0.3811 0.0000 -vt 0.9251 0.4021 0.0000 -vt 0.9253 0.4419 0.0000 -vt 0.8648 0.4948 0.0000 -vt 0.8691 0.4948 0.0000 -vt 0.9551 0.3618 0.0000 -vt 0.9551 0.3641 0.0000 -vt 0.9233 0.4520 0.0000 -vt 0.9131 0.4560 0.0000 -vt 0.8751 0.3692 0.0000 -vt 0.8751 0.4273 0.0000 -vt 0.8790 0.4273 0.0000 -vt 0.8790 0.3692 0.0000 -vt 0.8751 0.4589 0.0000 -vt 0.8790 0.4589 0.0000 -vt 0.8751 0.4906 0.0000 -vt 0.8790 0.4906 0.0000 -vt 0.8751 0.5481 0.0000 -vt 0.8790 0.5481 0.0000 -vt 0.9280 0.3763 0.0000 -vt 0.9513 0.3758 0.0000 -vt 0.9513 0.3736 0.0000 -vt 0.9279 0.3740 0.0000 -vt 0.9746 0.3753 0.0000 -vt 0.9746 0.3731 0.0000 -vt 0.9131 0.4088 0.0000 -vt 0.9233 0.4082 0.0000 -vt 0.8691 0.5453 0.0000 -vt 0.8648 0.5453 0.0000 -vt 0.8648 0.3670 0.0000 -vt 0.8691 0.3670 0.0000 -vt 0.9725 0.4088 0.0000 -vt 0.9623 0.4078 0.0000 -vt 0.9868 0.3695 0.0000 -vt 0.9745 0.3698 0.0000 -vt 0.9868 0.3728 0.0000 -vt 0.9512 0.3703 0.0000 -vt 0.9278 0.3707 0.0000 -vt 0.9156 0.3709 0.0000 -vt 0.9157 0.3743 0.0000 -vt 0.9875 0.3597 0.0000 -vt 0.9713 0.3594 0.0000 -vt 0.9552 0.3592 0.0000 -vt 0.9929 0.3757 0.0000 -vt 0.9929 0.3727 0.0000 -vt 0.9869 0.3759 0.0000 -vt 0.9928 0.3694 0.0000 -vt 0.9914 0.3899 0.0000 -vt 0.9914 0.3834 0.0000 -vt 0.9524 0.3592 0.0000 -vt 0.9524 0.3617 0.0000 -vt 0.9524 0.3641 0.0000 -vt 0.9902 0.3646 0.0000 -vt 0.9902 0.3623 0.0000 -vt 0.9902 0.3597 0.0000 -vt 0.9200 0.3834 0.0000 -vt 0.9200 0.3899 0.0000 -vt 0.9096 0.3711 0.0000 -vt 0.9097 0.3744 0.0000 -vt 0.9097 0.3774 0.0000 -vt 0.9157 0.3773 0.0000 -vt 0.1289 0.3537 0.0000 -vt 0.0137 0.3537 0.0000 -vt 0.0137 0.4382 0.0000 -vt 0.1289 0.4382 0.0000 -vt 0.4766 0.4518 0.0000 -vt 0.4766 0.4572 0.0000 -vt 0.3830 0.4573 0.0000 -vt 0.3830 0.4518 0.0000 -vt 0.6096 0.4518 0.0000 -vt 0.6096 0.4572 0.0000 -vt 0.7033 0.4518 0.0000 -vt 0.7033 0.4572 0.0000 -vt 0.5240 0.7648 0.0000 -vt 0.5240 0.8937 0.0000 -vt 0.3951 0.8248 0.0000 -vt 0.3951 0.7648 0.0000 -vt 0.1505 0.2812 0.0000 -vt 0.1505 0.3422 0.0000 -vt 0.0082 0.3422 0.0000 -vt 0.0082 0.2812 0.0000 -vt 0.0716 0.4485 0.0000 -vt 0.0716 0.5484 0.0000 -vt 0.0217 0.5068 0.0000 -vt 0.0217 0.4485 0.0000 -vt 0.8234 0.8593 0.0000 -vt 0.8234 0.9411 0.0000 -vt 0.9925 0.9411 0.0000 -vt 0.9925 0.8593 0.0000 -vt 0.1215 0.4485 0.0000 -vt 0.1215 0.5068 0.0000 -vt 0.8901 0.5180 0.0000 -vt 0.8901 0.7490 0.0000 -vt 0.9156 0.6965 0.0000 -vt 0.9156 0.5234 0.0000 -vt 0.2486 0.4756 0.0000 -vt 0.1896 0.5421 0.0000 -vt 0.1896 0.4976 0.0000 -vt 0.2355 0.4593 0.0000 -vt 0.1306 0.4756 0.0000 -vt 0.1436 0.4593 0.0000 -vt 0.6350 0.2846 0.0000 -vt 0.6350 0.3431 0.0000 -vt 0.5881 0.3431 0.0000 -vt 0.5881 0.2846 0.0000 -vt 0.6820 0.2846 0.0000 -vt 0.6820 0.3431 0.0000 -vt 0.9915 0.8501 0.0000 -vt 0.8954 0.8501 0.0000 -vt 0.8954 0.7507 0.0000 -vt 0.9915 0.7507 0.0000 -vt 0.3786 0.1451 0.0000 -vt 0.3786 0.3326 0.0000 -vt 0.3891 0.3326 0.0000 -vt 0.3891 0.1451 0.0000 -vt 0.7667 0.3346 0.0000 -vt 0.7673 0.4164 0.0000 -vt 0.7555 0.4165 0.0000 -vt 0.7548 0.3347 0.0000 -vt 0.4133 0.1416 0.0000 -vt 0.4006 0.2464 0.0000 -vt 0.4186 0.2464 0.0000 -vt 0.4313 0.1416 0.0000 -vt 0.2607 0.1423 0.0000 -vt 0.2607 0.2438 0.0000 -vt 0.2461 0.2438 0.0000 -vt 0.2461 0.1423 0.0000 -vt 0.2607 0.1303 0.0000 -vt 0.2461 0.1303 0.0000 -vt 0.2607 0.3453 0.0000 -vt 0.2607 0.3573 0.0000 -vt 0.2461 0.3573 0.0000 -vt 0.2461 0.3453 0.0000 -vt 0.7679 0.4982 0.0000 -vt 0.7561 0.4983 0.0000 -vt 0.4133 0.3512 0.0000 -vt 0.4313 0.3512 0.0000 -vt 0.4482 0.2391 0.0000 -vt 0.4482 0.2206 0.0000 -vt 0.4893 0.2545 0.0000 -vt 0.4855 0.2691 0.0000 -vt 0.9854 0.7385 0.0000 -vt 0.9580 0.7382 0.0000 -vt 0.9610 0.6700 0.0000 -vt 0.9857 0.6703 0.0000 -vt 0.9502 0.7399 0.0000 -vt 0.9501 0.6811 0.0000 -vt 0.9264 0.6809 0.0000 -vt 0.9239 0.7397 0.0000 -vt 0.5220 0.2714 0.0000 -vt 0.5220 0.3003 0.0000 -vt 0.9593 0.6220 0.0000 -vt 0.9868 0.6223 0.0000 -vt 0.9510 0.6222 0.0000 -vt 0.9246 0.6221 0.0000 -vt 0.5941 0.2391 0.0000 -vt 0.5585 0.2691 0.0000 -vt 0.5548 0.2545 0.0000 -vt 0.5941 0.2206 0.0000 -vt 0.9881 0.5079 0.0000 -vt 0.9869 0.5744 0.0000 -vt 0.9621 0.5741 0.0000 -vt 0.9607 0.5076 0.0000 -vt 0.9272 0.5632 0.0000 -vt 0.9509 0.5634 0.0000 -vt 0.9517 0.5063 0.0000 -vt 0.9254 0.5061 0.0000 -vt 0.4201 0.0039 0.0000 -vt 0.4228 0.0782 0.0000 -vt 0.4000 0.0782 0.0000 -vt 0.4027 0.0039 0.0000 -vt 0.5790 0.0082 0.0000 -vt 0.5482 0.0194 0.0000 -vt 0.5565 0.1052 0.0000 -vt 0.5903 0.1113 0.0000 -vt 0.4550 0.0050 0.0000 -vt 0.4584 0.0840 0.0000 -vt 0.4292 0.0840 0.0000 -vt 0.4327 0.0050 0.0000 -vt 0.4218 0.1384 0.0000 -vt 0.4010 0.1384 0.0000 -vt 0.5435 0.1550 0.0000 -vt 0.5563 0.1901 0.0000 -vt 0.4572 0.1306 0.0000 -vt 0.4305 0.1306 0.0000 -vt 0.8039 0.3638 0.0000 -vt 0.7807 0.3638 0.0000 -vt 0.7828 0.4242 0.0000 -vt 0.8037 0.4242 0.0000 -vt 0.8351 0.3650 0.0000 -vt 0.8563 0.3650 0.0000 -vt 0.8522 0.4238 0.0000 -vt 0.8331 0.4238 0.0000 -vt 0.8101 0.3656 0.0000 -vt 0.8081 0.4227 0.0000 -vt 0.8272 0.4227 0.0000 -vt 0.8313 0.3656 0.0000 -vt 0.7807 0.4750 0.0000 -vt 0.8039 0.4940 0.0000 -vt 0.8563 0.4919 0.0000 -vt 0.8351 0.4919 0.0000 -vt 0.8101 0.4708 0.0000 -vt 0.8313 0.4708 0.0000 -vt 0.5601 0.4797 0.0000 -vt 0.3807 0.4797 0.0000 -vt 0.3807 0.4762 0.0000 -vt 0.5601 0.4762 0.0000 -vt 0.3807 0.4633 0.0000 -vt 0.5601 0.4633 0.0000 -vt 0.5889 0.5255 0.0000 -vt 0.3840 0.5255 0.0000 -vt 0.3840 0.5208 0.0000 -vt 0.5889 0.5208 0.0000 -vt 0.3840 0.5035 0.0000 -vt 0.5889 0.5035 0.0000 -vt 0.5706 0.5490 0.0000 -vt 0.5706 0.5533 0.0000 -vt 0.3808 0.5541 0.0000 -vt 0.3807 0.5498 0.0000 -vt 0.5705 0.5330 0.0000 -vt 0.3807 0.5338 0.0000 -vt 0.5090 0.3650 0.0000 -vt 0.5148 0.3650 0.0000 -vt 0.5148 0.3726 0.0000 -vt 0.5090 0.3726 0.0000 -vt 0.3303 0.3726 0.0000 -vt 0.3303 0.3650 0.0000 -vt 0.3361 0.3650 0.0000 -vt 0.3361 0.3726 0.0000 -vt 0.3313 0.3566 0.0000 -vt 0.4236 0.3528 0.0000 -vt 0.4236 0.3590 0.0000 -vt 0.3313 0.3628 0.0000 -vt 0.4226 0.3726 0.0000 -vt 0.4226 0.3650 0.0000 -vt 0.5159 0.3564 0.0000 -vt 0.5159 0.3626 0.0000 -vt 0.2855 0.3255 0.0000 -vt 0.2635 0.3255 0.0000 -vt 0.2636 0.2915 0.0000 -vt 0.2856 0.2915 0.0000 -vt 0.3158 0.3260 0.0000 -vt 0.2915 0.3260 0.0000 -vt 0.2991 0.2927 0.0000 -vt 0.3234 0.2927 0.0000 -vt 0.2856 0.3631 0.0000 -vt 0.2636 0.3631 0.0000 -vt 0.3234 0.3630 0.0000 -vt 0.2991 0.3630 0.0000 -vt 0.6413 0.0064 0.0000 -vt 0.6382 0.1433 0.0000 -vt 0.6038 0.1433 0.0000 -vt 0.6006 0.0064 0.0000 -vt 0.8881 0.1417 0.0000 -vt 0.9069 0.2171 0.0000 -vt 0.9339 0.2250 0.0000 -vt 0.9181 0.1117 0.0000 -vt 0.3745 0.0027 0.0000 -vt 0.3762 0.0672 0.0000 -vt 0.3946 0.0672 0.0000 -vt 0.3963 0.0027 0.0000 -vt 0.6413 0.2231 0.0000 -vt 0.6006 0.2231 0.0000 -vt 0.8952 0.2709 0.0000 -vt 0.9181 0.2937 0.0000 -vt 0.3745 0.1420 0.0000 -vt 0.3963 0.1420 0.0000 -vt 0.2243 0.5355 0.0000 -vt 0.3737 0.5358 0.0000 -vt 0.3737 0.5416 0.0000 -vt 0.2243 0.5412 0.0000 -vt 0.2244 0.5297 0.0000 -vt 0.3737 0.5300 0.0000 -vt 0.2244 0.5239 0.0000 -vt 0.3737 0.5242 0.0000 -vt 0.2244 0.5181 0.0000 -vt 0.3738 0.5184 0.0000 -vt 0.2243 0.5470 0.0000 -vt 0.3737 0.5474 0.0000 -vt 0.3737 0.5532 0.0000 -vt 0.2243 0.5528 0.0000 -vt 0.9692 0.3535 0.0000 -vt 0.9522 0.3535 0.0000 -vt 0.9522 0.3319 0.0000 -vt 0.9692 0.3319 0.0000 -vt 0.9670 0.0975 0.0000 -vt 0.9670 0.3286 0.0000 -vt 0.9536 0.3286 0.0000 -vt 0.9536 0.0975 0.0000 -vt 0.9928 0.1002 0.0000 -vt 0.9928 0.3274 0.0000 -vt 0.9761 0.3274 0.0000 -vt 0.9761 0.1002 0.0000 -vt 0.9286 0.0130 0.0000 -vt 0.9286 0.0967 0.0000 -vt 0.9842 0.0862 0.0000 -vt 0.9842 0.0130 0.0000 -vt 0.9440 0.3357 0.0000 -vt 0.9446 0.3624 0.0000 -vt 0.7859 0.3613 0.0000 -vt 0.7853 0.3347 0.0000 -vt 0.8517 0.3105 0.0000 -vt 0.8517 0.3273 0.0000 -vt 0.7609 0.3271 0.0000 -vt 0.7609 0.3103 0.0000 -vt 0.8729 0.0130 0.0000 -vt 0.8729 0.0862 0.0000 -vt 0.9426 0.3107 0.0000 -vt 0.9425 0.3275 0.0000 -vt 0.0106 0.5607 0.0000 -vt 0.0693 0.5607 0.0000 -vt 0.0693 0.5818 0.0000 -vt 0.0106 0.5818 0.0000 -vt 0.1315 0.2244 0.0000 -vt 0.1820 0.2084 0.0000 -vt 0.1909 0.2224 0.0000 -vt 0.1322 0.2410 0.0000 -vt 0.0484 0.5931 0.0000 -vt 0.0985 0.5931 0.0000 -vt 0.0985 0.6094 0.0000 -vt 0.0484 0.6094 0.0000 -vt 0.1312 0.2169 0.0000 -vt 0.1779 0.2021 0.0000 -vt 0.1708 0.1910 0.0000 -vt 0.1306 0.2037 0.0000 -vt 0.1280 0.5607 0.0000 -vt 0.1280 0.5818 0.0000 -vt 0.2177 0.1694 0.0000 -vt 0.2324 0.1770 0.0000 -vt 0.1486 0.5931 0.0000 -vt 0.1486 0.6094 0.0000 -vt 0.2110 0.1659 0.0000 -vt 0.1993 0.1598 0.0000 -vt 0.1867 0.5607 0.0000 -vt 0.1867 0.5818 0.0000 -vt 0.2291 0.1177 0.0000 -vt 0.2457 0.1169 0.0000 -vt 0.1987 0.5931 0.0000 -vt 0.1987 0.6094 0.0000 -vt 0.2216 0.1180 0.0000 -vt 0.2084 0.1186 0.0000 -vt 0.2455 0.5607 0.0000 -vt 0.2455 0.5818 0.0000 -vt 0.2131 0.0672 0.0000 -vt 0.2271 0.0583 0.0000 -vt 0.2488 0.5931 0.0000 -vt 0.2488 0.6094 0.0000 -vt 0.2068 0.0712 0.0000 -vt 0.1956 0.0784 0.0000 -vt 0.3042 0.5607 0.0000 -vt 0.3042 0.5818 0.0000 -vt 0.1740 0.0315 0.0000 -vt 0.1817 0.0167 0.0000 -vt 0.2989 0.5931 0.0000 -vt 0.2989 0.6094 0.0000 -vt 0.1706 0.0381 0.0000 -vt 0.1645 0.0499 0.0000 -vt 0.3629 0.5607 0.0000 -vt 0.3629 0.5818 0.0000 -vt 0.1223 0.0201 0.0000 -vt 0.1216 0.0035 0.0000 -vt 0.3490 0.5931 0.0000 -vt 0.3490 0.6094 0.0000 -vt 0.1227 0.0276 0.0000 -vt 0.1233 0.0408 0.0000 -vt 0.4216 0.5607 0.0000 -vt 0.4216 0.5818 0.0000 -vt 0.0719 0.0361 0.0000 -vt 0.0629 0.0221 0.0000 -vt 0.3991 0.5931 0.0000 -vt 0.3991 0.6094 0.0000 -vt 0.0759 0.0424 0.0000 -vt 0.0830 0.0535 0.0000 -vt 0.4803 0.5607 0.0000 -vt 0.4803 0.5818 0.0000 -vt 0.0361 0.0751 0.0000 -vt 0.0214 0.0675 0.0000 -vt 0.4492 0.5931 0.0000 -vt 0.4492 0.6094 0.0000 -vt 0.0428 0.0786 0.0000 -vt 0.0545 0.0847 0.0000 -vt 0.5391 0.5607 0.0000 -vt 0.5391 0.5818 0.0000 -vt 0.0247 0.1268 0.0000 -vt 0.0082 0.1276 0.0000 -vt 0.4993 0.5931 0.0000 -vt 0.4993 0.6094 0.0000 -vt 0.0322 0.1265 0.0000 -vt 0.0455 0.1259 0.0000 -vt 0.5978 0.5607 0.0000 -vt 0.5978 0.5818 0.0000 -vt 0.0407 0.1773 0.0000 -vt 0.0267 0.1862 0.0000 -vt 0.5494 0.5931 0.0000 -vt 0.5494 0.6094 0.0000 -vt 0.0470 0.1733 0.0000 -vt 0.0582 0.1661 0.0000 -vt 0.6565 0.5607 0.0000 -vt 0.6565 0.5818 0.0000 -vt 0.0798 0.2130 0.0000 -vt 0.0721 0.2278 0.0000 -vt 0.5995 0.5931 0.0000 -vt 0.5995 0.6094 0.0000 -vt 0.0832 0.2064 0.0000 -vt 0.0893 0.1946 0.0000 -vt 0.7152 0.5607 0.0000 -vt 0.7152 0.5818 0.0000 -vt 0.6496 0.5931 0.0000 -vt 0.6496 0.6094 0.0000 -vt 0.6391 0.3731 0.0000 -vt 0.6137 0.3731 0.0000 -vt 0.6137 0.3482 0.0000 -vt 0.6391 0.3482 0.0000 -vt 0.4544 0.3169 0.0000 -vt 0.4656 0.3226 0.0000 -vt 0.4647 0.3407 0.0000 -vt 0.4403 0.3282 0.0000 -vt 0.5881 0.3731 0.0000 -vt 0.5881 0.3482 0.0000 -vt 0.4773 0.3180 0.0000 -vt 0.4902 0.3307 0.0000 -vt 0.5642 0.3731 0.0000 -vt 0.5642 0.3482 0.0000 -vt 0.4817 0.3062 0.0000 -vt 0.4997 0.3049 0.0000 -vt 0.5440 0.3731 0.0000 -vt 0.5440 0.3482 0.0000 -vt 0.4757 0.2951 0.0000 -vt 0.4867 0.2808 0.0000 -vt 0.6808 0.3731 0.0000 -vt 0.6620 0.3731 0.0000 -vt 0.6620 0.3482 0.0000 -vt 0.6808 0.3482 0.0000 -vt 0.4582 0.2943 0.0000 -vt 0.4512 0.3047 0.0000 -vt 0.4334 0.3017 0.0000 -vt 0.4486 0.2789 0.0000 -vt 0.3379 0.1155 0.0000 -vt 0.3193 0.1155 0.0000 -vt 0.3187 0.0046 0.0000 -vt 0.3426 0.0045 0.0000 -vt 0.3659 0.1098 0.0000 -vt 0.3482 0.1098 0.0000 -vt 0.3478 0.0045 0.0000 -vt 0.3705 0.0045 0.0000 -vt 0.2816 0.0051 0.0000 -vt 0.2837 0.1095 0.0000 -vt 0.2662 0.1099 0.0000 -vt 0.2591 0.0056 0.0000 -vt 0.3131 0.0039 0.0000 -vt 0.3125 0.1094 0.0000 -vt 0.2949 0.1093 0.0000 -vt 0.2904 0.0039 0.0000 -vt 0.3431 0.2807 0.0000 -vt 0.3192 0.2807 0.0000 -vt 0.3702 0.2668 0.0000 -vt 0.3475 0.2849 0.0000 -vt 0.2881 0.2831 0.0000 -vt 0.2657 0.2837 0.0000 -vt 0.3130 0.2846 0.0000 -vt 0.2903 0.2665 0.0000 -vt 0.2214 0.3548 0.0000 -vt 0.2214 0.3722 0.0000 -vt 0.2040 0.3722 0.0000 -vt 0.2040 0.3548 0.0000 -vt 0.2046 0.3497 0.0000 -vt 0.2004 0.2816 0.0000 -vt 0.2136 0.2816 0.0000 -vt 0.2178 0.3497 0.0000 -vt 0.2411 0.3544 0.0000 -vt 0.2411 0.2795 0.0000 -vt 0.2237 0.2795 0.0000 -vt 0.2237 0.3544 0.0000 -vt 0.2046 0.2135 0.0000 -vt 0.2178 0.2135 0.0000 -vt 0.2411 0.2046 0.0000 -vt 0.2237 0.2046 0.0000 -vt 0.7023 0.3783 0.0000 -vt 0.7023 0.1337 0.0000 -vt 0.6961 0.1337 0.0000 -vt 0.6961 0.3783 0.0000 -vt 0.7427 0.2621 0.0000 -vt 0.7427 0.4473 0.0000 -vt 0.7270 0.4473 0.0000 -vt 0.7270 0.2621 0.0000 -vt 0.6997 0.4149 0.0000 -vt 0.3834 0.4149 0.0000 -vt 0.3834 0.4193 0.0000 -vt 0.6997 0.4193 0.0000 -vt 0.6785 0.4123 0.0000 -vt 0.3903 0.4123 0.0000 -vt 0.3903 0.4016 0.0000 -vt 0.6785 0.4016 0.0000 -vt 0.8832 0.8218 0.0000 -vt 0.8832 0.8488 0.0000 -vt 0.8562 0.8488 0.0000 -vt 0.8562 0.8218 0.0000 -vt 0.8710 0.7512 0.0000 -vt 0.8917 0.8200 0.0000 -vt 0.8540 0.8099 0.0000 -vt 0.8484 0.7451 0.0000 -vt 0.8182 0.7463 0.0000 -vt 0.8124 0.8205 0.0000 -vt 0.8508 0.8205 0.0000 -vt 0.8449 0.7463 0.0000 -vt 0.3820 0.4953 0.0000 -vt 0.5991 0.4958 0.0000 -vt 0.5991 0.4984 0.0000 -vt 0.3820 0.4979 0.0000 -vt 0.3820 0.4857 0.0000 -vt 0.5991 0.4862 0.0000 -vt 0.7115 0.5479 0.0000 -vt 0.5941 0.5479 0.0000 -vt 0.5941 0.5410 0.0000 -vt 0.7115 0.5410 0.0000 -vt 0.5941 0.5155 0.0000 -vt 0.7115 0.5155 0.0000 -vt 0.7457 0.4780 0.0000 -vt 0.5660 0.4780 0.0000 -vt 0.5660 0.4749 0.0000 -vt 0.7457 0.4749 0.0000 -vt 0.5660 0.4633 0.0000 -vt 0.7457 0.4633 0.0000 -vt 0.8057 0.5298 0.0000 -vt 0.7294 0.5298 0.0000 -vt 0.7294 0.6060 0.0000 -vt 0.8057 0.6060 0.0000 -vt 0.6612 0.1309 0.0000 -vt 0.6485 0.0073 0.0000 -vt 0.6916 0.0073 0.0000 -vt 0.6867 0.1309 0.0000 -vt 0.7121 0.1290 0.0000 -vt 0.6986 0.0054 0.0000 -vt 0.7386 0.0054 0.0000 -vt 0.7343 0.1290 0.0000 -vt 0.6873 0.2545 0.0000 -vt 0.6552 0.2545 0.0000 -vt 0.7344 0.2526 0.0000 -vt 0.7088 0.2526 0.0000 -vt 0.8292 0.1250 0.0000 -vt 0.8097 0.1250 0.0000 -vt 0.8090 0.0084 0.0000 -vt 0.8341 0.0084 0.0000 -vt 0.8586 0.1191 0.0000 -vt 0.8400 0.1191 0.0000 -vt 0.8396 0.0083 0.0000 -vt 0.8634 0.0083 0.0000 -vt 0.7677 0.0047 0.0000 -vt 0.7698 0.1145 0.0000 -vt 0.7514 0.1150 0.0000 -vt 0.7440 0.0053 0.0000 -vt 0.8025 0.0059 0.0000 -vt 0.8019 0.1168 0.0000 -vt 0.7834 0.1168 0.0000 -vt 0.7786 0.0059 0.0000 -vt 0.8346 0.2987 0.0000 -vt 0.8096 0.2987 0.0000 -vt 0.8632 0.2841 0.0000 -vt 0.8394 0.3032 0.0000 -vt 0.7745 0.2971 0.0000 -vt 0.7509 0.2976 0.0000 -vt 0.8024 0.3010 0.0000 -vt 0.7786 0.2819 0.0000 -vt 0.6958 0.4416 0.0000 -vt 0.3795 0.4416 0.0000 -vt 0.3795 0.4460 0.0000 -vt 0.6958 0.4460 0.0000 -vt 0.6755 0.4344 0.0000 -vt 0.3873 0.4344 0.0000 -vt 0.3873 0.4237 0.0000 -vt 0.6755 0.4237 0.0000 -vt 0.0717 0.1664 0.0000 -vt 0.0717 0.1020 0.0000 -vt 0.1177 0.1020 0.0000 -vt 0.1177 0.1664 0.0000 -vt 0.1846 0.1339 0.0000 -vt 0.1642 0.1838 0.0000 -vt 0.1382 0.1821 0.0000 -vt 0.1245 0.1299 0.0000 -vt 0.0073 0.2189 0.0000 -vt 0.0078 0.2710 0.0000 -vt 0.0457 0.2750 0.0000 -vt 0.0498 0.2189 0.0000 -vt 0.1935 0.0540 0.0000 -vt 0.1671 0.1244 0.0000 -vt 0.1288 0.1255 0.0000 -vt 0.0985 0.0566 0.0000 -# 797 texture coords - -o watermill -g watermill -f 1/1/1 2/2/2 3/3/2 -f 3/3/2 4/4/1 1/1/1 -f 5/5/3 6/6/3 7/7/4 -f 7/7/4 8/8/4 5/5/3 -f 4/4/5 6/6/5 5/5/5 -f 5/5/5 1/1/5 4/4/5 -f 9/9/6 10/10/6 2/10/6 -f 2/10/6 1/9/6 9/9/6 -f 6/11/7 4/12/7 3/13/8 -f 6/11/7 3/13/8 11/14/8 -f 6/11/7 11/14/8 12/15/8 -f 6/11/7 12/15/8 7/16/8 -f 13/17/6 5/17/6 8/18/6 -f 8/18/6 14/18/6 13/17/6 -f 1/9/6 5/17/6 13/17/6 -f 13/17/6 9/9/6 1/9/6 -f 15/19/9 16/20/9 17/21/9 -f 17/21/9 18/22/9 15/19/9 -f 19/23/10 20/24/11 16/25/11 -f 16/25/11 15/26/10 19/23/10 -f 21/27/12 22/28/12 23/29/12 -f 23/29/12 24/30/12 21/27/12 -f 19/23/10 24/31/10 23/32/11 -f 23/32/11 20/24/11 19/23/10 -f 25/33/13 26/34/14 27/35/15 -f 27/35/15 28/36/16 25/33/13 -f 25/37/9 28/38/9 29/39/9 -f 29/39/9 30/40/9 25/37/9 -f 31/41/17 32/42/18 33/43/18 -f 33/43/18 34/44/17 31/41/17 -f 33/43/19 32/42/19 35/45/20 -f 35/45/20 36/46/20 33/43/19 -f 26/34/14 25/33/13 35/47/21 -f 35/47/21 32/48/22 26/34/14 -f 26/49/14 32/50/22 31/51/23 -f 31/51/23 37/52/24 26/49/14 -f 27/53/15 26/49/14 37/52/24 -f 37/52/24 38/54/25 27/53/15 -f 30/40/26 36/55/27 35/56/27 -f 35/56/27 25/37/26 30/40/26 -f 37/57/28 31/58/29 34/59/29 -f 34/59/29 39/60/28 37/57/28 -f 38/61/12 37/57/12 39/60/12 -f 39/60/12 40/62/12 38/61/12 -f 41/63/30 28/36/16 27/35/15 -f 27/35/15 42/64/31 41/63/30 -f 29/39/9 28/38/9 41/65/9 -f 41/65/9 43/66/9 29/39/9 -f 44/43/32 45/42/32 46/41/33 -f 46/41/33 47/44/33 44/43/32 -f 44/43/34 48/46/35 49/45/35 -f 49/45/35 45/42/34 44/43/34 -f 42/64/31 45/67/36 49/68/37 -f 49/68/37 41/63/30 42/64/31 -f 46/69/38 45/70/36 42/71/31 -f 42/71/31 50/72/39 46/69/38 -f 50/72/39 42/71/31 27/53/15 -f 27/53/15 38/54/25 50/72/39 -f 49/73/40 48/74/40 43/66/41 -f 43/66/41 41/65/41 49/73/40 -f 47/75/42 46/76/42 50/77/43 -f 50/77/43 51/78/43 47/75/42 -f 51/78/12 50/77/12 38/61/12 -f 38/61/12 40/62/12 51/78/12 -f 43/79/44 52/80/45 53/81/46 -f 53/81/46 29/82/47 43/79/44 -f 51/83/48 40/84/49 53/81/50 -f 53/81/50 52/80/51 51/83/48 -f 54/85/52 33/86/53 36/87/54 -f 36/87/54 30/88/55 54/85/52 -f 53/81/46 54/85/52 30/88/55 -f 30/88/55 29/82/47 53/81/46 -f 52/80/45 43/79/44 48/89/56 -f 48/89/56 44/90/57 52/80/45 -f 54/85/58 39/91/59 34/92/60 -f 34/92/60 33/86/61 54/85/58 -f 53/81/50 40/84/49 39/91/59 -f 39/91/59 54/85/58 53/81/50 -f 52/80/51 44/90/62 47/93/63 -f 47/93/63 51/83/48 52/80/51 -f 55/94/64 56/95/65 22/96/65 -f 22/96/65 21/97/64 55/94/64 -f 55/94/64 18/98/64 17/99/65 -f 17/99/65 56/95/65 55/94/64 -f 57/100/12 58/101/12 59/102/12 -f 59/102/12 60/103/12 57/100/12 -f 58/101/66 57/100/67 61/104/66 -f 61/104/66 62/105/68 58/101/66 -f 57/100/69 60/106/69 63/107/69 -f 63/107/69 61/104/69 57/100/69 -f 64/108/70 62/105/70 61/104/70 -f 61/104/70 65/109/70 64/108/70 -f 66/110/69 65/109/69 61/104/69 -f 61/104/69 63/111/69 66/110/69 -f 67/112/9 68/113/9 69/114/9 -f 69/114/9 70/115/9 67/112/9 -f 68/113/71 71/116/72 72/117/73 -f 72/117/73 69/114/74 68/113/71 -f 69/114/69 72/117/69 73/118/69 -f 73/118/69 70/119/69 69/114/69 -f 72/117/75 71/116/76 64/108/75 -f 64/108/75 65/109/75 72/117/75 -f 66/110/69 73/120/69 72/117/69 -f 72/117/69 65/109/69 66/110/69 -f 74/100/12 75/101/12 76/102/12 -f 76/102/12 77/103/12 74/100/12 -f 75/101/77 74/100/78 78/104/79 -f 78/104/79 79/105/80 75/101/77 -f 74/100/81 77/106/81 80/107/81 -f 80/107/81 78/104/81 74/100/81 -f 81/108/82 79/105/83 78/104/83 -f 78/104/83 82/109/83 81/108/82 -f 83/110/81 82/109/81 78/104/81 -f 78/104/81 80/111/81 83/110/81 -f 84/112/9 85/113/9 86/114/9 -f 86/114/9 87/115/9 84/112/9 -f 85/113/84 88/116/85 89/117/86 -f 89/117/86 86/114/87 85/113/84 -f 86/114/81 89/117/81 90/118/81 -f 90/118/81 87/119/81 86/114/81 -f 89/117/88 88/116/88 81/108/89 -f 81/108/89 82/109/88 89/117/88 -f 83/110/81 90/120/81 89/117/81 -f 89/117/81 82/109/81 83/110/81 -f 91/100/12 92/101/12 93/102/12 -f 93/102/12 94/103/12 91/100/12 -f 92/101/90 91/100/91 95/104/92 -f 95/104/92 96/105/92 92/101/90 -f 91/100/93 94/106/94 97/107/94 -f 97/107/94 95/104/93 91/100/93 -f 98/108/95 96/105/95 95/104/96 -f 95/104/96 99/109/96 98/108/95 -f 100/110/94 99/109/93 95/104/93 -f 95/104/93 97/111/94 100/110/94 -f 101/112/9 102/113/9 103/114/9 -f 103/114/9 104/115/9 101/112/9 -f 102/113/97 105/116/98 106/117/97 -f 106/117/97 103/114/99 102/113/97 -f 103/114/93 106/117/93 107/118/94 -f 107/118/94 104/119/94 103/114/93 -f 106/117/100 105/116/101 98/108/101 -f 98/108/101 99/109/102 106/117/100 -f 100/110/94 107/120/94 106/117/93 -f 106/117/93 99/109/93 100/110/94 -f 108/100/12 109/101/12 110/102/12 -f 110/102/12 111/103/12 108/100/12 -f 109/101/90 108/100/90 112/104/91 -f 112/104/91 113/105/92 109/101/90 -f 108/100/93 111/106/93 114/107/94 -f 114/107/94 112/104/93 108/100/93 -f 115/108/96 113/105/103 112/104/96 -f 112/104/96 116/109/103 115/108/96 -f 117/110/94 116/109/94 112/104/93 -f 112/104/93 114/111/94 117/110/94 -f 118/112/9 119/113/9 120/114/9 -f 120/114/9 121/115/9 118/112/9 -f 119/113/97 122/116/97 123/117/104 -f 123/117/104 120/114/97 119/113/97 -f 120/114/93 123/117/93 124/118/94 -f 124/118/94 121/119/93 120/114/93 -f 123/117/105 122/116/106 115/108/102 -f 115/108/102 116/109/106 123/117/105 -f 117/110/94 124/120/94 123/117/93 -f 123/117/93 116/109/94 117/110/94 -f 125/100/12 126/101/12 127/102/12 -f 127/102/12 128/103/12 125/100/12 -f 126/101/90 125/100/107 129/104/108 -f 129/104/108 130/105/91 126/101/90 -f 125/100/94 128/106/93 131/107/93 -f 131/107/93 129/104/94 125/100/94 -f 132/108/96 130/105/96 129/104/96 -f 129/104/96 133/109/96 132/108/96 -f 134/110/93 133/109/93 129/104/93 -f 129/104/93 131/111/93 134/110/93 -f 135/112/9 136/113/9 137/114/9 -f 137/114/9 138/115/9 135/112/9 -f 136/113/97 139/116/104 140/117/109 -f 140/117/109 137/114/109 136/113/97 -f 137/114/94 140/117/94 141/118/93 -f 141/118/93 138/119/93 137/114/94 -f 140/117/100 139/116/105 132/108/102 -f 132/108/102 133/109/102 140/117/100 -f 134/110/94 141/120/93 140/117/94 -f 140/117/94 133/109/93 134/110/94 -f 142/100/12 143/101/12 144/102/12 -f 144/102/12 145/103/12 142/100/12 -f 143/101/110 142/100/110 146/104/110 -f 146/104/110 147/105/111 143/101/110 -f 142/100/112 145/106/112 148/107/112 -f 148/107/112 146/104/112 142/100/112 -f 149/108/113 147/105/114 146/104/113 -f 146/104/113 150/109/113 149/108/113 -f 151/110/112 150/109/112 146/104/112 -f 146/104/112 148/111/112 151/110/112 -f 152/112/9 153/113/9 154/114/9 -f 154/114/9 155/115/9 152/112/9 -f 153/113/115 156/116/116 157/117/117 -f 157/117/117 154/114/115 153/113/115 -f 154/114/112 157/117/112 158/118/112 -f 158/118/112 155/119/112 154/114/112 -f 157/117/118 156/116/119 149/108/120 -f 149/108/120 150/109/120 157/117/118 -f 151/110/112 158/120/112 157/117/112 -f 157/117/112 150/109/112 151/110/112 -f 159/121/12 160/122/12 161/123/12 -f 161/123/12 162/124/12 159/121/12 -f 163/125/121 161/126/122 160/122/121 -f 160/122/121 164/127/121 163/125/121 -f 165/128/123 164/127/124 160/122/125 -f 160/122/125 159/121/126 165/128/123 -f 166/129/127 165/128/127 159/121/128 -f 159/121/128 162/130/127 166/129/127 -f 164/127/121 167/131/122 168/132/121 -f 168/132/121 163/125/121 164/127/121 -f 167/131/129 164/127/130 165/128/130 -f 165/128/130 169/133/131 167/131/129 -f 170/134/127 169/133/128 165/128/127 -f 165/128/127 166/129/127 170/134/127 -f 171/135/9 172/136/9 173/137/9 -f 173/137/9 174/138/9 171/135/9 -f 172/136/121 171/139/122 175/140/121 -f 175/140/121 176/141/121 172/136/121 -f 177/142/132 173/137/133 172/136/134 -f 172/136/134 176/141/134 177/142/132 -f 178/143/127 174/144/127 173/137/128 -f 173/137/128 177/142/127 178/143/127 -f 168/145/121 167/131/122 176/141/121 -f 176/141/121 175/140/121 168/145/121 -f 177/142/135 176/141/136 167/131/135 -f 167/131/135 169/133/137 177/142/135 -f 170/146/127 178/143/127 177/142/127 -f 177/142/127 169/133/128 170/146/127 -f 179/102/12 180/101/12 181/100/12 -f 181/100/12 182/103/12 179/102/12 -f 183/104/138 181/100/139 180/101/140 -f 180/101/140 184/105/138 183/104/138 -f 185/107/141 182/106/142 181/100/142 -f 181/100/142 183/104/142 185/107/141 -f 183/104/143 184/105/143 186/108/143 -f 186/108/143 187/109/143 183/104/143 -f 188/110/141 185/111/141 183/104/142 -f 183/104/142 187/109/144 188/110/141 -f 189/114/9 190/113/9 191/112/9 -f 191/112/9 192/115/9 189/114/9 -f 193/117/145 194/116/145 190/113/146 -f 190/113/146 189/114/147 193/117/145 -f 195/118/141 193/117/142 189/114/141 -f 189/114/141 192/119/142 195/118/141 -f 186/108/148 194/116/148 193/117/149 -f 193/117/149 187/109/148 186/108/148 -f 188/110/142 187/109/141 193/117/150 -f 193/117/150 195/120/141 188/110/142 -f 196/102/12 197/101/12 198/100/12 -f 198/100/12 199/103/12 196/102/12 -f 200/104/151 198/100/152 197/101/152 -f 197/101/152 201/105/151 200/104/151 -f 202/107/153 199/106/154 198/100/153 -f 198/100/153 200/104/154 202/107/153 -f 200/104/155 201/105/156 203/108/155 -f 203/108/155 204/109/155 200/104/155 -f 205/110/154 202/111/153 200/104/154 -f 200/104/154 204/109/154 205/110/154 -f 206/114/9 207/113/9 208/112/9 -f 208/112/9 209/115/9 206/114/9 -f 210/117/157 211/116/157 207/113/158 -f 207/113/158 206/114/159 210/117/157 -f 212/118/153 210/117/154 206/114/154 -f 206/114/154 209/119/154 212/118/153 -f 203/108/160 211/116/161 210/117/160 -f 210/117/160 204/109/160 203/108/160 -f 205/110/154 204/109/154 210/117/154 -f 210/117/154 212/120/153 205/110/154 -f 213/102/12 214/101/12 215/100/12 -f 215/100/12 216/103/12 213/102/12 -f 217/104/124 215/100/125 214/101/162 -f 214/101/162 218/105/124 217/104/124 -f 219/107/121 216/106/121 215/100/122 -f 215/100/122 217/104/122 219/107/121 -f 217/104/131 218/105/163 220/108/163 -f 220/108/163 221/109/131 217/104/131 -f 222/110/121 219/111/121 217/104/122 -f 217/104/122 221/109/121 222/110/121 -f 223/114/9 224/113/9 225/112/9 -f 225/112/9 226/115/9 223/114/9 -f 227/117/164 228/116/134 224/113/165 -f 224/113/165 223/114/134 227/117/164 -f 229/118/121 227/117/122 223/114/122 -f 223/114/122 226/119/121 229/118/121 -f 220/108/166 228/116/167 227/117/137 -f 227/117/137 221/109/137 220/108/166 -f 222/110/121 221/109/121 227/117/122 -f 227/117/122 229/120/121 222/110/121 -f 230/102/12 231/101/12 232/100/12 -f 232/100/12 233/103/12 230/102/12 -f 234/104/124 232/100/125 231/101/125 -f 231/101/125 235/105/168 234/104/124 -f 236/107/122 233/106/122 232/100/121 -f 232/100/121 234/104/122 236/107/122 -f 234/104/129 235/105/163 237/108/163 -f 237/108/163 238/109/129 234/104/129 -f 239/110/121 236/111/122 234/104/122 -f 234/104/122 238/109/122 239/110/121 -f 240/114/9 241/113/9 242/112/9 -f 242/112/9 243/115/9 240/114/9 -f 244/117/134 245/116/169 241/113/134 -f 241/113/134 240/114/134 244/117/134 -f 246/118/122 244/117/122 240/114/121 -f 240/114/121 243/119/122 246/118/122 -f 237/108/166 245/116/166 244/117/135 -f 244/117/135 238/109/135 237/108/166 -f 239/110/121 238/109/122 244/117/122 -f 244/117/122 246/120/122 239/110/121 -f 247/102/12 248/101/12 249/100/12 -f 249/100/12 250/103/12 247/102/12 -f 251/104/170 249/100/139 248/101/140 -f 248/101/140 252/105/138 251/104/170 -f 253/107/142 250/106/141 249/100/142 -f 249/100/142 251/104/142 253/107/142 -f 251/104/143 252/105/171 254/108/171 -f 254/108/171 255/109/172 251/104/143 -f 256/110/142 253/111/142 251/104/142 -f 251/104/142 255/109/141 256/110/142 -f 257/114/9 258/113/9 259/112/9 -f 259/112/9 260/115/9 257/114/9 -f 261/117/146 262/116/147 258/113/146 -f 258/113/146 257/114/147 261/117/146 -f 263/118/142 261/117/142 257/114/142 -f 257/114/142 260/119/141 263/118/142 -f 254/108/173 262/116/173 261/117/174 -f 261/117/174 255/109/175 254/108/173 -f 256/110/142 255/109/141 261/117/142 -f 261/117/142 263/120/142 256/110/142 -f 264/102/12 265/101/12 266/100/12 -f 266/100/12 267/103/12 264/102/12 -f 268/104/108 266/100/107 265/101/176 -f 265/101/176 269/105/108 268/104/108 -f 270/107/177 267/106/177 266/100/178 -f 266/100/178 268/104/177 270/107/177 -f 268/104/179 269/105/180 271/108/181 -f 271/108/181 272/109/96 268/104/179 -f 273/110/177 270/111/177 268/104/177 -f 268/104/177 272/109/177 273/110/177 -f 274/114/9 275/113/9 276/112/9 -f 276/112/9 277/115/9 274/114/9 -f 278/117/182 279/116/182 275/113/183 -f 275/113/183 274/114/109 278/117/182 -f 280/118/177 278/117/177 274/114/178 -f 274/114/178 277/119/177 280/118/177 -f 271/108/184 279/116/184 278/117/105 -f 278/117/105 272/109/102 271/108/184 -f 273/110/177 272/109/177 278/117/177 -f 278/117/177 280/120/177 273/110/177 -f 281/121/12 282/122/12 283/123/12 -f 283/123/12 284/124/12 281/121/12 -f 285/125/121 283/126/122 282/122/121 -f 282/122/121 286/127/122 285/125/121 -f 287/128/185 286/127/123 282/122/126 -f 282/122/126 281/121/126 287/128/185 -f 288/129/127 287/128/128 281/121/127 -f 281/121/127 284/130/127 288/129/127 -f 286/127/122 289/131/121 290/132/121 -f 290/132/121 285/125/121 286/127/122 -f 289/131/129 286/127/130 287/128/186 -f 287/128/186 291/133/131 289/131/129 -f 292/134/127 291/133/127 287/128/128 -f 287/128/128 288/129/127 292/134/127 -f 293/135/9 294/136/9 295/137/9 -f 295/137/9 296/138/9 293/135/9 -f 294/136/121 293/139/122 297/140/121 -f 297/140/121 298/141/122 294/136/121 -f 299/142/187 295/137/133 294/136/133 -f 294/136/133 298/141/132 299/142/187 -f 300/143/127 296/144/127 295/137/127 -f 295/137/127 299/142/128 300/143/127 -f 290/145/121 289/131/121 298/141/122 -f 298/141/122 297/140/121 290/145/121 -f 299/142/188 298/141/135 289/131/135 -f 289/131/135 291/133/137 299/142/188 -f 292/146/127 300/143/127 299/142/128 -f 299/142/128 291/133/127 292/146/127 -f 301/121/12 302/122/12 303/123/12 -f 303/123/12 304/124/12 301/121/12 -f 305/125/189 303/126/189 302/122/189 -f 302/122/189 306/127/190 305/125/189 -f 307/128/191 306/127/191 302/122/191 -f 302/122/191 301/121/192 307/128/191 -f 308/129/193 307/128/193 301/121/193 -f 301/121/193 304/130/194 308/129/193 -f 306/127/195 309/131/196 310/132/195 -f 310/132/195 305/125/189 306/127/195 -f 309/131/197 306/127/198 307/128/199 -f 307/128/199 311/133/197 309/131/197 -f 312/134/193 311/133/200 307/128/193 -f 307/128/193 308/129/193 312/134/193 -f 313/135/9 314/136/9 315/137/9 -f 315/137/9 316/138/9 313/135/9 -f 314/136/189 313/139/189 317/140/189 -f 317/140/189 318/141/190 314/136/189 -f 319/142/201 315/137/202 314/136/202 -f 314/136/202 318/141/203 319/142/201 -f 320/143/193 316/144/194 315/137/193 -f 315/137/193 319/142/193 320/143/193 -f 310/145/189 309/131/204 318/141/205 -f 318/141/205 317/140/189 310/145/189 -f 319/142/206 318/141/207 309/131/206 -f 309/131/206 311/133/206 319/142/206 -f 312/146/193 320/143/193 319/142/193 -f 319/142/193 311/133/200 312/146/193 -f 321/121/12 322/122/12 323/123/12 -f 323/123/12 324/124/12 321/121/12 -f 325/125/121 323/126/121 322/122/122 -f 322/122/122 326/127/121 325/125/121 -f 327/128/123 326/127/185 322/122/126 -f 322/122/126 321/121/126 327/128/123 -f 328/129/127 327/128/128 321/121/128 -f 321/121/128 324/130/127 328/129/127 -f 326/127/208 329/131/208 330/132/208 -f 330/132/208 325/125/121 326/127/208 -f 329/131/129 326/127/130 327/128/130 -f 327/128/130 331/133/129 329/131/129 -f 332/134/127 331/133/127 327/128/128 -f 327/128/128 328/129/127 332/134/127 -f 333/135/9 334/136/9 335/137/9 -f 335/137/9 336/138/9 333/135/9 -f 334/136/122 333/139/121 337/140/121 -f 337/140/121 338/141/121 334/136/122 -f 339/142/132 335/137/133 334/136/133 -f 334/136/133 338/141/187 339/142/132 -f 340/143/127 336/144/127 335/137/128 -f 335/137/128 339/142/128 340/143/127 -f 330/145/121 329/131/121 338/141/209 -f 338/141/209 337/140/121 330/145/121 -f 339/142/136 338/141/210 329/131/135 -f 329/131/135 331/133/135 339/142/136 -f 332/146/127 340/143/127 339/142/128 -f 339/142/128 331/133/127 332/146/127 -f 341/123/12 342/122/12 343/121/12 -f 343/121/12 344/124/12 341/123/12 -f 345/125/211 346/127/211 342/122/211 -f 342/122/211 341/126/212 345/125/211 -f 342/122/213 346/127/213 347/128/213 -f 347/128/213 343/121/214 342/122/213 -f 343/121/215 347/128/215 348/129/215 -f 348/129/215 344/130/215 343/121/215 -f 349/132/211 350/131/212 346/127/211 -f 346/127/211 345/125/211 349/132/211 -f 347/128/216 346/127/217 350/131/218 -f 350/131/218 351/133/218 347/128/216 -f 352/134/219 348/129/215 347/128/215 -f 347/128/215 351/133/215 352/134/219 -f 353/137/9 354/136/9 355/135/9 -f 355/135/9 356/138/9 353/137/9 -f 354/136/211 357/141/211 358/140/211 -f 358/140/211 355/139/212 354/136/211 -f 354/136/220 353/137/221 359/142/220 -f 359/142/220 357/141/222 354/136/220 -f 353/137/215 356/144/215 360/143/215 -f 360/143/215 359/142/215 353/137/215 -f 357/141/211 350/131/212 349/145/211 -f 349/145/211 358/140/211 357/141/211 -f 350/131/223 357/141/224 359/142/225 -f 359/142/225 351/133/223 350/131/223 -f 352/146/219 351/133/215 359/142/215 -f 359/142/215 360/143/215 352/146/219 -f 361/100/12 362/101/12 363/102/12 -f 363/102/12 364/103/12 361/100/12 -f 362/101/66 361/100/226 365/104/66 -f 365/104/66 366/105/227 362/101/66 -f 361/100/69 364/106/228 367/107/69 -f 367/107/69 365/104/69 361/100/69 -f 368/108/229 366/105/70 365/104/70 -f 365/104/70 369/109/70 368/108/229 -f 370/110/69 369/109/228 365/104/69 -f 365/104/69 367/111/69 370/110/69 -f 371/112/9 372/113/9 373/114/9 -f 373/114/9 374/115/9 371/112/9 -f 372/113/73 375/116/230 376/117/231 -f 376/117/231 373/114/232 372/113/73 -f 373/114/69 376/117/69 377/118/69 -f 377/118/69 374/119/228 373/114/69 -f 376/117/76 375/116/233 368/108/234 -f 368/108/234 369/109/75 376/117/76 -f 370/110/69 377/120/69 376/117/69 -f 376/117/69 369/109/228 370/110/69 -f 378/147/15 379/148/235 380/149/236 -f 380/149/236 381/150/237 378/147/15 -f 382/149/238 383/148/239 378/147/15 -f 378/147/15 381/150/237 382/149/238 -f 384/43/240 385/42/240 386/41/241 -f 386/41/241 387/44/241 384/43/240 -f 384/43/242 388/46/243 389/45/243 -f 389/45/243 385/42/242 384/43/242 -f 390/151/11 383/151/11 382/152/11 -f 382/152/11 391/152/11 390/151/11 -f 392/153/244 393/153/244 394/18/245 -f 394/18/245 395/18/245 392/153/244 -f 392/153/246 396/17/247 397/17/247 -f 397/17/247 393/153/246 392/153/246 -f 398/154/65 379/154/65 399/155/65 -f 399/155/65 400/155/65 398/154/65 -f 401/156/248 390/151/249 391/152/250 -f 391/152/250 402/157/251 401/156/248 -f 401/156/252 398/154/253 400/155/254 -f 400/155/254 403/158/255 401/156/252 -f 404/158/256 393/153/257 397/17/258 -f 397/17/258 399/155/259 404/158/256 -f 378/147/15 404/159/256 399/160/259 -f 399/160/259 379/148/235 378/147/15 -f 386/161/260 385/162/261 381/150/237 -f 381/150/237 380/149/236 386/161/260 -f 394/18/262 393/153/257 404/158/256 -f 404/158/256 405/163/263 394/18/262 -f 405/160/263 404/159/256 378/147/15 -f 378/147/15 383/148/239 405/160/263 -f 381/150/237 385/162/261 389/161/264 -f 389/161/264 382/149/238 381/150/237 -f 395/18/11 394/18/11 405/163/11 -f 405/163/11 406/163/11 395/18/11 -f 406/163/11 405/163/11 383/151/11 -f 383/151/11 390/151/11 406/163/11 -f 389/10/11 388/10/11 391/152/11 -f 391/152/11 382/152/11 389/10/11 -f 387/9/65 386/9/65 380/164/65 -f 380/164/65 407/164/65 387/9/65 -f 407/164/65 380/164/65 379/154/65 -f 379/154/65 398/154/65 407/164/65 -f 397/17/65 396/17/65 400/155/65 -f 400/155/65 399/155/65 397/17/65 -f 403/158/265 392/153/266 395/18/267 -f 395/18/267 406/163/268 403/158/265 -f 401/156/248 403/158/265 406/163/268 -f 406/163/268 390/151/249 401/156/248 -f 388/10/269 384/165/270 402/157/251 -f 402/157/251 391/152/250 388/10/269 -f 402/157/271 384/165/272 387/9/273 -f 387/9/273 407/164/274 402/157/271 -f 401/156/252 402/157/271 407/164/274 -f 407/164/274 398/154/253 401/156/252 -f 396/17/275 392/153/276 403/158/255 -f 403/158/255 400/155/254 396/17/275 -f 408/100/11 409/101/11 410/102/11 -f 410/102/11 411/103/10 408/100/11 -f 409/101/277 408/100/278 412/104/277 -f 412/104/277 413/105/277 409/101/277 -f 408/100/279 411/106/279 414/107/279 -f 414/107/279 412/104/279 408/100/279 -f 415/108/280 413/105/281 412/104/281 -f 412/104/281 416/109/282 415/108/280 -f 417/110/279 416/109/279 412/104/279 -f 412/104/279 414/111/279 417/110/279 -f 418/112/65 419/113/65 420/114/65 -f 420/114/65 421/115/64 418/112/65 -f 419/113/283 422/116/283 423/117/283 -f 423/117/283 420/114/283 419/113/283 -f 420/114/279 423/117/279 424/118/279 -f 424/118/279 421/119/279 420/114/279 -f 423/117/284 422/116/284 415/108/285 -f 415/108/285 416/109/285 423/117/284 -f 417/110/279 424/120/279 423/117/279 -f 423/117/279 416/109/279 417/110/279 -f 425/100/11 426/101/11 427/102/11 -f 427/102/11 428/103/11 425/100/11 -f 426/101/286 425/100/286 429/104/287 -f 429/104/287 430/105/286 426/101/286 -f 425/100/288 428/106/288 431/107/288 -f 431/107/288 429/104/288 425/100/288 -f 432/108/289 430/105/290 429/104/290 -f 429/104/290 433/109/291 432/108/289 -f 434/110/292 433/109/288 429/104/288 -f 429/104/288 431/111/288 434/110/292 -f 435/112/65 436/113/65 437/114/65 -f 437/114/65 438/115/65 435/112/65 -f 436/113/293 439/116/293 440/117/293 -f 440/117/293 437/114/294 436/113/293 -f 437/114/288 440/117/288 441/118/288 -f 441/118/288 438/119/288 437/114/288 -f 440/117/295 439/116/295 432/108/296 -f 432/108/296 433/109/296 440/117/295 -f 434/110/292 441/120/288 440/117/288 -f 440/117/288 433/109/288 434/110/292 -f 442/100/297 443/101/298 444/102/298 -f 444/102/298 445/103/297 442/100/297 -f 443/101/299 442/100/300 446/104/301 -f 446/104/301 447/105/300 443/101/299 -f 442/100/302 445/106/302 448/107/302 -f 448/107/302 446/104/303 442/100/302 -f 449/108/304 447/105/305 446/104/306 -f 446/104/306 450/109/304 449/108/304 -f 451/110/307 450/109/308 446/104/303 -f 446/104/303 448/111/308 451/110/307 -f 452/112/309 453/113/309 454/114/310 -f 454/114/310 455/115/311 452/112/309 -f 453/113/312 456/116/313 457/117/312 -f 457/117/312 454/114/314 453/113/312 -f 454/114/308 457/117/302 458/118/302 -f 458/118/302 455/119/315 454/114/308 -f 457/117/316 456/116/317 449/108/316 -f 449/108/316 450/109/318 457/117/316 -f 451/110/307 458/120/302 457/117/302 -f 457/117/302 450/109/308 451/110/307 -f 459/100/65 460/101/65 461/102/65 -f 461/102/65 462/103/65 459/100/65 -f 460/101/319 459/100/320 463/104/319 -f 463/104/319 464/105/319 460/101/319 -f 459/100/321 462/106/321 465/107/322 -f 465/107/322 463/104/321 459/100/321 -f 466/108/323 464/105/324 463/104/324 -f 463/104/324 467/109/323 466/108/323 -f 468/110/322 467/109/322 463/104/321 -f 463/104/321 465/111/322 468/110/322 -f 469/112/11 470/113/11 471/114/11 -f 471/114/11 472/115/11 469/112/11 -f 470/113/325 473/116/325 474/117/326 -f 474/117/326 471/114/327 470/113/325 -f 471/114/321 474/117/321 475/118/322 -f 475/118/322 472/119/321 471/114/321 -f 474/117/328 473/116/329 466/108/330 -f 466/108/330 467/109/330 474/117/328 -f 468/110/322 475/120/322 474/117/321 -f 474/117/321 467/109/322 468/110/322 -f 476/123/11 477/122/11 478/121/11 -f 478/121/11 479/124/11 476/123/11 -f 480/125/279 481/127/279 477/122/279 -f 477/122/279 476/126/279 480/125/279 -f 477/122/331 481/127/331 482/128/331 -f 482/128/331 478/121/278 477/122/331 -f 478/121/332 482/128/332 483/129/332 -f 483/129/332 479/130/332 478/121/332 -f 484/132/279 485/131/279 481/127/279 -f 481/127/279 480/125/279 484/132/279 -f 482/128/281 481/127/333 485/131/280 -f 485/131/280 486/133/282 482/128/281 -f 487/134/332 483/129/332 482/128/332 -f 482/128/332 486/133/332 487/134/332 -f 488/137/65 489/136/65 490/135/65 -f 490/135/65 491/138/65 488/137/65 -f 489/136/279 492/141/279 493/140/279 -f 493/140/279 490/139/279 489/136/279 -f 489/136/334 488/137/334 494/142/334 -f 494/142/334 492/141/334 489/136/334 -f 488/137/332 491/144/332 495/143/332 -f 495/143/332 494/142/332 488/137/332 -f 492/141/279 485/131/279 484/145/279 -f 484/145/279 493/140/279 492/141/279 -f 485/131/335 492/141/284 494/142/284 -f 494/142/284 486/133/285 485/131/335 -f 487/146/332 486/133/332 494/142/332 -f 494/142/332 495/143/332 487/146/332 -f 496/100/11 497/101/11 498/102/11 -f 498/102/11 499/103/11 496/100/11 -f 497/101/278 496/100/277 500/104/277 -f 500/104/277 501/105/331 497/101/278 -f 496/100/279 499/106/279 502/107/279 -f 502/107/279 500/104/279 496/100/279 -f 503/108/280 501/105/281 500/104/281 -f 500/104/281 504/109/280 503/108/280 -f 505/110/279 504/109/279 500/104/279 -f 500/104/279 502/111/279 505/110/279 -f 506/112/65 507/113/65 508/114/65 -f 508/114/65 509/115/65 506/112/65 -f 507/113/334 510/116/334 511/117/283 -f 511/117/283 508/114/283 507/113/334 -f 508/114/279 511/117/279 512/118/279 -f 512/118/279 509/119/279 508/114/279 -f 511/117/284 510/116/336 503/108/285 -f 503/108/285 504/109/285 511/117/284 -f 505/110/279 512/120/279 511/117/279 -f 511/117/279 504/109/279 505/110/279 -f 513/100/65 514/101/65 515/102/65 -f 515/102/65 516/103/65 513/100/65 -f 514/101/320 513/100/319 517/104/319 -f 517/104/319 518/105/319 514/101/320 -f 513/100/322 516/106/321 519/107/321 -f 519/107/321 517/104/321 513/100/322 -f 520/108/323 518/105/324 517/104/324 -f 517/104/324 521/109/323 520/108/323 -f 522/110/322 521/109/337 517/104/321 -f 517/104/321 519/111/321 522/110/322 -f 523/112/11 524/113/11 525/114/11 -f 525/114/11 526/115/11 523/112/11 -f 524/113/326 527/116/325 528/117/325 -f 528/117/325 525/114/325 524/113/326 -f 525/114/322 528/117/321 529/118/321 -f 529/118/321 526/119/322 525/114/322 -f 528/117/329 527/116/329 520/108/330 -f 520/108/330 521/109/330 528/117/329 -f 522/110/322 529/120/321 528/117/321 -f 528/117/321 521/109/337 522/110/322 -f 530/18/12 531/17/12 532/9/12 -f 532/9/12 533/10/12 530/18/12 -f 534/166/9 535/167/9 536/168/9 -f 536/168/9 537/169/9 534/166/9 -f 532/170/338 538/171/339 539/172/339 -f 539/172/339 533/173/338 532/170/338 -f 531/174/11 540/175/11 538/176/11 -f 538/176/11 532/177/11 531/174/11 -f 530/173/340 541/172/341 540/171/341 -f 540/171/341 531/170/340 530/173/340 -f 533/177/65 539/176/65 541/175/65 -f 541/175/65 530/174/65 533/177/65 -f 534/178/342 537/179/342 539/172/339 -f 539/172/339 538/171/339 534/178/342 -f 540/175/11 535/180/11 534/181/11 -f 534/181/11 538/176/11 540/175/11 -f 536/179/343 535/178/343 540/171/341 -f 540/171/341 541/172/341 536/179/343 -f 537/181/65 536/180/65 541/175/65 -f 541/175/65 539/176/65 537/181/65 -f 542/182/65 543/183/65 544/184/65 -f 544/184/65 545/185/65 542/182/65 -f 546/186/12 547/187/12 548/188/12 -f 548/188/12 549/189/12 546/186/12 -f 550/190/344 551/191/15 552/192/15 -f 552/192/15 553/193/344 550/190/344 -f 554/187/9 555/186/9 556/194/9 -f 556/194/9 557/195/9 554/187/9 -f 558/196/345 559/197/346 560/198/346 -f 560/198/346 561/199/345 558/196/345 -f 562/200/65 563/201/65 564/202/65 -f 565/203/65 566/204/65 551/205/65 -f 551/205/65 550/206/65 565/203/65 -f 567/207/65 568/208/65 569/209/65 -f 568/208/65 570/210/65 571/211/65 -f 571/211/65 569/209/65 568/208/65 -f 542/182/65 572/212/65 573/213/65 -f 573/213/65 543/183/65 542/182/65 -f 551/191/15 574/214/347 575/215/347 -f 575/215/347 552/192/15 551/191/15 -f 559/197/346 576/216/348 577/217/348 -f 577/217/348 560/198/346 559/197/346 -f 566/204/65 578/218/65 574/219/65 -f 574/219/65 551/205/65 566/204/65 -f 571/211/65 570/210/65 563/201/65 -f 563/201/65 562/200/65 571/211/65 -f 545/220/9 544/221/9 565/222/9 -f 565/222/9 579/223/9 545/220/9 -f 544/221/349 543/224/350 566/225/350 -f 566/225/350 565/222/349 544/221/349 -f 543/224/351 573/226/352 578/227/352 -f 578/227/352 566/225/351 543/224/351 -f 573/226/12 572/228/12 580/229/12 -f 580/229/12 578/227/12 573/226/12 -f 572/230/353 542/231/354 581/232/354 -f 581/232/354 580/233/353 572/230/353 -f 542/231/355 545/234/356 579/235/356 -f 579/235/356 581/232/355 542/231/355 -f 582/236/65 574/219/65 578/218/65 -f 578/218/65 580/237/65 582/236/65 -f 583/238/9 575/215/9 574/214/9 -f 574/214/9 582/239/9 583/238/9 -f 584/240/12 550/190/12 553/193/12 -f 553/193/12 585/241/12 584/240/12 -f 584/242/65 579/243/65 565/203/65 -f 565/203/65 550/206/65 584/242/65 -f 586/194/12 587/195/12 547/187/12 -f 547/187/12 546/186/12 586/194/12 -f 564/244/357 563/245/357 579/235/357 -f 579/235/357 584/246/357 564/244/357 -f 563/245/356 570/247/355 581/232/355 -f 581/232/355 579/235/356 563/245/356 -f 570/247/354 568/248/353 580/233/353 -f 580/233/353 581/232/354 570/247/354 -f 568/248/358 567/249/358 582/250/359 -f 582/250/359 580/233/359 568/248/358 -f 588/188/9 589/189/9 555/186/9 -f 555/186/9 554/187/9 588/188/9 -f 569/251/345 571/252/345 559/197/345 -f 559/197/345 558/196/345 569/251/345 -f 571/252/360 562/253/348 576/216/348 -f 576/216/348 559/197/360 571/252/360 -f 548/254/15 547/255/15 584/246/15 -f 584/246/15 585/256/15 548/254/15 -f 547/255/15 587/257/15 564/244/15 -f 564/244/15 584/246/15 547/255/15 -f 587/258/65 586/259/65 562/200/65 -f 562/200/65 564/202/65 587/258/65 -f 586/260/346 546/261/346 576/216/346 -f 576/216/346 562/253/346 586/260/346 -f 546/261/346 549/262/346 577/217/346 -f 577/217/346 576/216/346 546/261/346 -f 556/263/346 555/264/346 558/196/346 -f 558/196/346 561/199/346 556/263/346 -f 555/264/346 589/265/346 569/251/346 -f 569/251/346 558/196/346 555/264/346 -f 589/266/65 588/267/65 567/207/65 -f 567/207/65 569/209/65 589/266/65 -f 588/268/15 554/269/15 582/250/15 -f 582/250/15 567/249/15 588/268/15 -f 554/269/15 557/270/15 583/271/15 -f 583/271/15 582/250/15 554/269/15 -f 590/272/361 591/273/361 592/274/362 -f 592/274/362 593/275/361 590/272/361 -f 594/274/363 595/273/364 596/272/364 -f 596/272/364 597/275/364 594/274/363 -f 591/276/11 595/277/11 594/278/11 -f 594/278/11 592/279/11 591/276/11 -f 590/280/365 596/281/365 595/277/365 -f 595/277/365 591/276/365 590/280/365 -f 593/282/65 597/283/65 596/281/65 -f 596/281/65 590/280/65 593/282/65 -f 598/284/9 599/285/9 600/286/9 -f 600/286/9 601/287/9 598/284/9 -f 602/284/12 603/287/12 604/286/12 -f 604/286/12 605/285/12 602/284/12 -f 601/288/64 600/289/65 604/290/65 -f 604/290/65 603/291/64 601/288/64 -f 606/292/9 607/293/9 608/294/9 -f 608/294/9 609/295/9 606/292/9 -f 610/296/11 611/297/11 612/298/11 -f 612/298/11 613/299/11 610/296/11 -f 614/299/65 615/298/366 616/297/367 -f 616/297/367 617/296/65 614/299/65 -f 606/292/9 618/300/9 619/301/9 -f 619/301/9 607/293/9 606/292/9 -f 613/302/9 612/303/9 620/304/9 -f 620/304/9 621/305/9 613/302/9 -f 612/306/9 622/307/9 623/308/9 -f 623/308/9 620/309/9 612/306/9 -f 615/310/9 624/311/9 623/308/9 -f 623/308/9 622/307/9 615/310/9 -f 614/302/9 625/305/9 624/304/9 -f 624/304/9 615/303/9 614/302/9 -f 626/312/15 606/313/15 609/314/368 -f 609/314/368 625/315/368 626/312/15 -f 621/316/15 618/317/15 606/313/15 -f 606/313/15 626/312/15 621/316/15 -f 620/318/65 619/319/65 618/320/65 -f 618/320/65 621/321/65 620/318/65 -f 625/321/11 609/320/11 608/319/11 -f 608/319/11 624/318/11 625/321/11 -f 627/184/12 628/183/12 629/182/12 -f 629/182/12 630/185/12 627/184/12 -f 631/188/65 632/187/65 633/186/65 -f 633/186/65 634/189/65 631/188/65 -f 635/192/15 636/191/15 637/190/369 -f 637/190/369 638/193/369 635/192/15 -f 639/194/11 640/186/11 641/187/11 -f 641/187/11 642/195/11 639/194/11 -f 643/198/346 644/197/346 645/196/370 -f 645/196/370 646/199/370 643/198/346 -f 647/200/12 648/202/12 649/201/12 -f 636/205/12 650/204/12 651/203/12 -f 651/203/12 637/206/12 636/205/12 -f 652/207/12 653/209/12 654/208/12 -f 655/211/12 656/210/12 654/208/12 -f 654/208/12 653/209/12 655/211/12 -f 657/213/12 658/212/12 629/182/12 -f 629/182/12 628/183/12 657/213/12 -f 659/215/371 660/214/371 636/191/15 -f 636/191/15 635/192/15 659/215/371 -f 661/217/372 662/216/372 644/197/346 -f 644/197/346 643/198/346 661/217/372 -f 660/219/12 663/218/12 650/204/12 -f 650/204/12 636/205/12 660/219/12 -f 655/211/12 647/200/12 649/201/12 -f 649/201/12 656/210/12 655/211/12 -f 651/222/11 627/221/11 630/220/11 -f 630/220/11 664/223/11 651/222/11 -f 650/225/373 628/224/373 627/221/373 -f 627/221/373 651/222/373 650/225/373 -f 663/227/374 657/226/374 628/224/374 -f 628/224/374 650/225/374 663/227/374 -f 665/229/65 658/228/65 657/226/65 -f 657/226/65 663/227/65 665/229/65 -f 666/232/375 629/231/375 658/230/376 -f 658/230/376 665/233/376 666/232/375 -f 664/235/377 630/234/377 629/231/377 -f 629/231/377 666/232/377 664/235/377 -f 663/218/12 660/219/12 667/236/12 -f 667/236/12 665/237/12 663/218/12 -f 660/214/11 659/215/11 668/238/11 -f 668/238/11 667/239/11 660/214/11 -f 638/193/65 637/190/65 669/240/65 -f 669/240/65 670/241/65 638/193/65 -f 669/242/12 637/206/12 651/203/12 -f 651/203/12 664/243/12 669/242/12 -f 632/187/65 671/195/65 672/194/65 -f 672/194/65 633/186/65 632/187/65 -f 664/235/378 649/245/378 648/244/378 -f 648/244/378 669/246/378 664/235/378 -f 666/232/377 656/247/377 649/245/377 -f 649/245/377 664/235/377 666/232/377 -f 665/233/376 654/248/376 656/247/375 -f 656/247/375 666/232/375 665/233/376 -f 667/250/379 652/249/379 654/248/379 -f 654/248/379 665/233/379 667/250/379 -f 640/186/11 673/189/11 674/188/11 -f 674/188/11 641/187/11 640/186/11 -f 644/197/380 655/252/380 653/251/370 -f 653/251/370 645/196/370 644/197/380 -f 662/216/372 647/253/372 655/252/381 -f 655/252/381 644/197/381 662/216/372 -f 669/246/15 632/255/15 631/254/15 -f 631/254/15 670/256/15 669/246/15 -f 648/244/15 671/257/15 632/255/15 -f 632/255/15 669/246/15 648/244/15 -f 647/200/12 672/259/12 671/258/12 -f 671/258/12 648/202/12 647/200/12 -f 662/216/346 633/261/346 672/260/346 -f 672/260/346 647/253/346 662/216/346 -f 661/217/346 634/262/346 633/261/346 -f 633/261/346 662/216/346 661/217/346 -f 645/196/346 640/264/346 639/263/346 -f 639/263/346 646/199/346 645/196/346 -f 653/251/346 673/265/346 640/264/346 -f 640/264/346 645/196/346 653/251/346 -f 652/207/12 674/267/12 673/266/12 -f 673/266/12 653/209/12 652/207/12 -f 667/250/15 641/269/15 674/268/15 -f 674/268/15 652/249/15 667/250/15 -f 668/271/15 642/270/15 641/269/15 -f 641/269/15 667/250/15 668/271/15 -f 675/184/11 676/183/11 677/182/11 -f 677/182/11 678/185/11 675/184/11 -f 679/188/12 680/187/12 681/186/12 -f 681/186/12 682/189/12 679/188/12 -f 683/192/15 684/191/15 685/190/344 -f 685/190/344 686/193/344 683/192/15 -f 687/194/9 688/186/9 689/187/9 -f 689/187/9 690/195/9 687/194/9 -f 691/198/346 692/197/346 693/196/345 -f 693/196/345 694/199/345 691/198/346 -f 695/200/11 696/202/11 697/201/11 -f 684/205/11 698/204/11 699/203/11 -f 699/203/11 685/206/11 684/205/11 -f 700/207/11 701/209/11 702/208/11 -f 703/211/11 704/210/11 702/208/11 -f 702/208/11 701/209/11 703/211/11 -f 705/213/11 706/212/11 677/182/11 -f 677/182/11 676/183/11 705/213/11 -f 707/215/347 708/214/347 684/191/15 -f 684/191/15 683/192/15 707/215/347 -f 709/217/348 710/216/348 692/197/346 -f 692/197/346 691/198/346 709/217/348 -f 708/219/11 711/218/11 698/204/11 -f 698/204/11 684/205/11 708/219/11 -f 703/211/11 695/200/11 697/201/11 -f 697/201/11 704/210/11 703/211/11 -f 699/222/9 675/221/9 678/220/9 -f 678/220/9 712/223/9 699/222/9 -f 698/225/350 676/224/350 675/221/349 -f 675/221/349 699/222/349 698/225/350 -f 711/227/352 705/226/352 676/224/351 -f 676/224/351 698/225/351 711/227/352 -f 713/229/12 706/228/12 705/226/12 -f 705/226/12 711/227/12 713/229/12 -f 714/232/354 677/231/354 706/230/353 -f 706/230/353 713/233/353 714/232/354 -f 712/235/356 678/234/356 677/231/355 -f 677/231/355 714/232/355 712/235/356 -f 711/218/11 708/219/11 715/236/11 -f 715/236/11 713/237/11 711/218/11 -f 708/214/9 707/215/9 716/238/9 -f 716/238/9 715/239/9 708/214/9 -f 686/193/12 685/190/12 717/240/12 -f 717/240/12 718/241/12 686/193/12 -f 717/242/11 685/206/11 699/203/11 -f 699/203/11 712/243/11 717/242/11 -f 680/187/12 719/195/12 720/194/12 -f 720/194/12 681/186/12 680/187/12 -f 712/235/357 697/245/357 696/244/357 -f 696/244/357 717/246/357 712/235/357 -f 714/232/355 704/247/355 697/245/356 -f 697/245/356 712/235/356 714/232/355 -f 713/233/353 702/248/353 704/247/354 -f 704/247/354 714/232/354 713/233/353 -f 715/250/359 700/249/359 702/248/359 -f 702/248/359 713/233/359 715/250/359 -f 688/186/9 721/189/9 722/188/9 -f 722/188/9 689/187/9 688/186/9 -f 692/197/345 703/252/345 701/251/345 -f 701/251/345 693/196/345 692/197/345 -f 710/216/348 695/253/348 703/252/360 -f 703/252/360 692/197/360 710/216/348 -f 717/246/15 680/255/15 679/254/15 -f 679/254/15 718/256/15 717/246/15 -f 696/244/15 719/257/15 680/255/15 -f 680/255/15 717/246/15 696/244/15 -f 695/200/11 720/259/11 719/258/11 -f 719/258/11 696/202/11 695/200/11 -f 710/216/346 681/261/346 720/260/346 -f 720/260/346 695/253/346 710/216/346 -f 709/217/346 682/262/346 681/261/346 -f 681/261/346 710/216/346 709/217/346 -f 693/196/346 688/264/346 687/263/346 -f 687/263/346 694/199/346 693/196/346 -f 701/251/346 721/265/346 688/264/346 -f 688/264/346 693/196/346 701/251/346 -f 700/207/11 722/267/11 721/266/11 -f 721/266/11 701/209/11 700/207/11 -f 715/250/15 689/269/15 722/268/15 -f 722/268/15 700/249/15 715/250/15 -f 716/271/15 690/270/15 689/269/15 -f 689/269/15 715/250/15 716/271/15 -f 723/10/15 724/18/15 725/17/15 -f 725/17/15 726/9/15 723/10/15 -f 727/9/10 724/17/11 723/18/11 -f 723/18/11 728/10/10 727/9/10 -f 729/322/12 725/323/12 724/324/12 -f 724/324/12 727/325/12 729/322/12 -f 730/10/64 726/18/65 725/17/65 -f 725/17/65 729/9/64 730/10/64 -f 731/326/382 732/327/346 733/328/346 -f 733/328/346 734/329/382 731/326/382 -f 735/330/12 736/331/12 732/332/12 -f 732/332/12 731/333/12 735/330/12 -f 737/334/383 738/335/15 736/336/15 -f 736/336/15 735/337/383 737/334/383 -f 734/338/65 737/334/65 735/337/65 -f 735/337/65 731/339/65 734/338/65 -f 739/340/11 740/341/11 741/342/11 -f 741/342/11 742/343/11 739/340/11 -f 741/344/384 740/345/384 733/328/346 -f 733/328/346 732/327/346 741/344/384 -f 742/346/12 741/347/12 732/332/12 -f 732/332/12 736/331/12 742/346/12 -f 739/340/385 742/343/385 736/336/15 -f 736/336/15 738/335/15 739/340/385 -f 743/10/15 744/18/15 745/17/15 -f 745/17/15 746/9/15 743/10/15 -f 747/9/10 744/17/11 743/18/11 -f 743/18/11 748/10/10 747/9/10 -f 749/322/12 745/323/12 744/324/12 -f 744/324/12 747/325/12 749/322/12 -f 750/10/64 746/18/65 745/17/65 -f 745/17/65 749/9/64 750/10/64 -f 751/184/12 752/183/12 753/182/12 -f 753/182/12 754/185/12 751/184/12 -f 755/188/65 756/187/65 757/186/65 -f 757/186/65 758/189/65 755/188/65 -f 759/192/15 760/191/15 761/190/386 -f 761/190/386 762/193/386 759/192/15 -f 763/194/11 764/186/11 765/187/11 -f 765/187/11 766/195/11 763/194/11 -f 767/198/346 768/197/346 769/196/387 -f 769/196/387 770/199/387 767/198/346 -f 771/200/12 772/202/12 773/201/12 -f 760/205/12 774/204/12 775/203/12 -f 775/203/12 761/206/12 760/205/12 -f 776/207/12 777/209/12 778/208/12 -f 779/211/12 780/210/12 778/208/12 -f 778/208/12 777/209/12 779/211/12 -f 781/213/12 782/212/12 753/182/12 -f 753/182/12 752/183/12 781/213/12 -f 783/215/388 784/214/388 760/191/15 -f 760/191/15 759/192/15 783/215/388 -f 785/217/389 786/216/389 768/197/346 -f 768/197/346 767/198/346 785/217/389 -f 784/219/12 787/218/12 774/204/12 -f 774/204/12 760/205/12 784/219/12 -f 779/211/12 771/200/12 773/201/12 -f 773/201/12 780/210/12 779/211/12 -f 775/222/11 751/221/11 754/220/11 -f 754/220/11 788/223/11 775/222/11 -f 774/225/390 752/224/390 751/221/373 -f 751/221/373 775/222/373 774/225/390 -f 787/227/374 781/226/374 752/224/391 -f 752/224/391 774/225/391 787/227/374 -f 789/229/65 782/228/65 781/226/65 -f 781/226/65 787/227/65 789/229/65 -f 790/232/375 753/231/375 782/230/375 -f 782/230/375 789/233/375 790/232/375 -f 788/235/392 754/234/392 753/231/392 -f 753/231/392 790/232/392 788/235/392 -f 787/218/12 784/219/12 791/236/12 -f 791/236/12 789/237/12 787/218/12 -f 784/214/11 783/215/11 792/238/11 -f 792/238/11 791/239/11 784/214/11 -f 762/193/65 761/190/65 793/240/65 -f 793/240/65 794/241/65 762/193/65 -f 793/242/12 761/206/12 775/203/12 -f 775/203/12 788/243/12 793/242/12 -f 756/187/65 795/195/65 796/194/65 -f 796/194/65 757/186/65 756/187/65 -f 788/235/393 773/245/393 772/244/378 -f 772/244/378 793/246/378 788/235/393 -f 790/232/392 780/247/392 773/245/392 -f 773/245/392 788/235/392 790/232/392 -f 789/233/375 778/248/375 780/247/375 -f 780/247/375 790/232/375 789/233/375 -f 791/250/394 776/249/394 778/248/394 -f 778/248/394 789/233/394 791/250/394 -f 764/186/11 797/189/11 798/188/11 -f 798/188/11 765/187/11 764/186/11 -f 768/197/395 779/252/395 777/251/387 -f 777/251/387 769/196/387 768/197/395 -f 786/216/389 771/253/389 779/252/396 -f 779/252/396 768/197/396 786/216/389 -f 793/246/15 756/255/15 755/254/15 -f 755/254/15 794/256/15 793/246/15 -f 772/244/15 795/257/15 756/255/15 -f 756/255/15 793/246/15 772/244/15 -f 771/200/12 796/259/12 795/258/12 -f 795/258/12 772/202/12 771/200/12 -f 786/216/346 757/261/346 796/260/346 -f 796/260/346 771/253/346 786/216/346 -f 785/217/346 758/262/346 757/261/346 -f 757/261/346 786/216/346 785/217/346 -f 769/196/346 764/264/346 763/263/346 -f 763/263/346 770/199/346 769/196/346 -f 777/251/346 797/265/346 764/264/346 -f 764/264/346 769/196/346 777/251/346 -f 776/207/12 798/267/12 797/266/12 -f 797/266/12 777/209/12 776/207/12 -f 791/250/15 765/269/15 798/268/15 -f 798/268/15 776/249/15 791/250/15 -f 792/271/15 766/270/15 765/269/15 -f 765/269/15 791/250/15 792/271/15 -f 799/348/397 800/349/398 801/350/399 -f 801/350/399 802/351/400 799/348/397 -f 800/352/401 803/353/402 804/354/403 -f 804/354/403 801/355/404 800/352/401 -f 805/10/405 806/151/406 804/154/407 -f 804/154/407 803/9/408 805/10/405 -f 799/356/409 802/357/410 806/358/410 -f 806/358/410 805/359/409 799/356/409 -f 807/360/411 808/361/9 802/351/400 -f 802/351/400 801/350/399 807/360/411 -f 804/354/403 809/362/346 807/363/346 -f 807/363/346 801/355/404 804/354/403 -f 806/151/406 810/18/12 809/17/412 -f 809/17/412 804/154/407 806/151/406 -f 808/364/15 810/365/15 806/358/410 -f 806/358/410 802/357/410 808/364/15 -f 811/366/413 812/367/414 813/368/415 -f 813/368/415 814/369/416 811/366/413 -f 814/370/417 813/371/418 815/372/419 -f 815/372/419 816/373/420 814/370/417 -f 815/154/421 817/151/422 818/10/423 -f 818/10/423 816/9/424 815/154/421 -f 817/374/425 812/375/425 811/376/426 -f 811/376/426 818/377/426 817/374/425 -f 812/367/414 808/361/9 807/360/411 -f 807/360/411 813/368/415 812/367/414 -f 815/372/419 813/371/418 807/363/346 -f 807/363/346 809/362/346 815/372/419 -f 817/151/422 815/154/421 809/17/412 -f 809/17/412 810/18/12 817/151/422 -f 817/374/425 810/365/15 808/364/15 -f 808/364/15 812/375/425 817/374/425 -f 819/378/427 820/379/428 821/380/428 -f 821/380/428 822/381/427 819/378/427 -f 819/382/429 823/383/430 824/384/431 -f 824/384/431 820/385/432 819/382/429 -f 825/386/433 826/387/434 824/388/434 -f 824/388/434 823/389/433 825/386/433 -f 822/382/435 821/385/436 826/384/437 -f 826/384/437 825/383/438 822/382/435 -f 827/390/439 828/391/439 821/380/428 -f 821/380/428 820/379/428 827/390/439 -f 829/392/440 827/393/441 820/385/432 -f 820/385/432 824/384/431 829/392/440 -f 830/394/442 829/395/442 824/388/434 -f 824/388/434 826/387/434 830/394/442 -f 821/385/436 828/393/443 830/392/444 -f 830/392/444 826/384/437 821/385/436 -f 831/396/445 832/397/445 833/398/445 -f 833/398/445 834/399/445 831/396/445 -f 835/400/446 831/401/446 834/402/446 -f 834/402/446 836/403/446 835/400/446 -f 835/396/447 836/399/447 837/398/447 -f 837/398/447 838/397/447 835/396/447 -f 838/404/448 837/405/448 833/406/448 -f 833/406/448 832/407/448 838/404/448 -f 834/399/449 833/398/449 839/408/449 -f 839/408/449 840/409/449 834/399/449 -f 834/402/450 840/410/450 841/411/450 -f 841/411/450 836/403/450 834/402/450 -f 836/399/451 841/409/451 842/408/451 -f 842/408/451 837/398/451 836/399/451 -f 833/406/452 837/405/452 842/412/452 -f 842/412/452 839/413/452 833/406/452 -f 843/396/453 844/399/453 845/398/453 -f 845/398/453 846/397/453 843/396/453 -f 847/400/446 848/403/446 844/402/446 -f 844/402/446 843/401/446 847/400/446 -f 847/396/454 849/397/454 850/398/454 -f 850/398/454 848/399/454 847/396/454 -f 849/404/448 846/407/448 845/406/448 -f 845/406/448 850/405/448 849/404/448 -f 844/399/455 851/409/455 852/408/455 -f 852/408/455 845/398/455 844/399/455 -f 844/402/450 848/403/450 853/411/450 -f 853/411/450 851/410/450 844/402/450 -f 848/399/456 850/398/456 854/408/456 -f 854/408/456 853/409/456 848/399/456 -f 845/406/452 852/413/452 854/412/452 -f 854/412/452 850/405/452 845/406/452 -f 855/414/15 856/415/15 857/416/15 -f 857/416/15 858/417/15 855/414/15 -f 858/417/64 857/416/64 859/418/64 -f 859/418/64 860/419/64 858/417/64 -f 861/420/368 862/421/368 863/422/368 -f 863/422/368 864/423/368 861/420/368 -f 864/423/12 863/422/12 865/424/12 -f 865/424/12 866/425/12 864/423/12 -f 867/426/368 868/427/368 869/428/368 -f 869/428/368 870/429/368 867/426/368 -f 871/430/9 867/426/9 870/429/9 -f 870/429/9 872/431/9 871/430/9 -f 873/432/64 874/433/64 875/434/64 -f 875/434/64 876/435/64 873/432/64 -f 877/436/10 878/437/10 879/438/10 -f 879/438/10 880/439/10 877/436/10 -f 875/440/9 881/441/9 882/442/9 -f 882/442/9 876/443/9 875/440/9 -f 876/435/457 882/444/457 883/445/457 -f 883/445/457 873/432/457 876/435/457 -f 877/446/9 880/447/9 882/442/9 -f 882/442/9 881/441/9 877/446/9 -f 880/439/458 879/438/458 883/445/458 -f 883/445/458 882/444/458 880/439/458 -f 884/448/459 885/449/459 886/450/459 -f 886/450/459 887/451/459 884/448/459 -f 885/452/460 888/453/460 889/454/460 -f 889/454/460 886/455/460 885/452/460 -f 888/449/461 890/448/461 891/451/461 -f 891/451/461 889/450/461 888/449/461 -f 891/454/462 890/453/462 884/452/462 -f 884/452/462 887/455/462 891/454/462 -f 884/448/463 892/456/463 893/457/463 -f 893/457/463 885/449/463 884/448/463 -f 885/452/464 893/458/464 894/459/464 -f 894/459/464 888/453/464 885/452/464 -f 888/449/465 894/457/465 895/456/465 -f 895/456/465 890/448/465 888/449/465 -f 884/452/466 890/453/466 895/459/466 -f 895/459/466 892/458/466 884/452/466 -f 896/448/459 897/449/459 898/450/459 -f 898/450/459 899/451/459 896/448/459 -f 897/452/460 900/453/460 901/454/460 -f 901/454/460 898/455/460 897/452/460 -f 900/449/461 902/448/461 903/451/461 -f 903/451/461 901/450/461 900/449/461 -f 903/454/462 902/453/462 896/452/462 -f 896/452/462 899/455/462 903/454/462 -f 896/448/463 904/456/463 905/457/463 -f 905/457/463 897/449/463 896/448/463 -f 897/452/464 905/458/464 906/459/464 -f 906/459/464 900/453/464 897/452/464 -f 900/449/465 906/457/465 907/456/465 -f 907/456/465 902/448/465 900/449/465 -f 896/452/466 902/453/466 907/459/466 -f 907/459/466 904/458/466 896/452/466 -f 908/448/459 909/449/459 910/450/459 -f 910/450/459 911/451/459 908/448/459 -f 909/452/460 912/453/460 913/454/460 -f 913/454/460 910/455/460 909/452/460 -f 912/449/461 914/448/461 915/451/461 -f 915/451/461 913/450/461 912/449/461 -f 915/454/462 914/453/462 908/452/462 -f 908/452/462 911/455/462 915/454/462 -f 908/448/463 916/456/463 917/457/463 -f 917/457/463 909/449/463 908/448/463 -f 909/452/464 917/458/464 918/459/464 -f 918/459/464 912/453/464 909/452/464 -f 912/449/465 918/457/465 919/456/465 -f 919/456/465 914/448/465 912/449/465 -f 908/452/466 914/453/466 919/459/466 -f 919/459/466 916/458/466 908/452/466 -f 920/448/459 921/449/459 922/450/459 -f 922/450/459 923/451/459 920/448/459 -f 921/452/460 924/453/460 925/454/460 -f 925/454/460 922/455/460 921/452/460 -f 924/449/461 926/448/461 927/451/461 -f 927/451/461 925/450/461 924/449/461 -f 927/454/462 926/453/462 920/452/462 -f 920/452/462 923/455/462 927/454/462 -f 920/448/463 928/456/463 929/457/463 -f 929/457/463 921/449/463 920/448/463 -f 921/452/464 929/458/464 930/459/464 -f 930/459/464 924/453/464 921/452/464 -f 924/449/465 930/457/465 931/456/465 -f 931/456/465 926/448/465 924/449/465 -f 920/452/466 926/453/466 931/459/466 -f 931/459/466 928/458/466 920/452/466 -f 932/448/459 933/449/459 934/450/459 -f 934/450/459 935/451/459 932/448/459 -f 933/452/460 936/453/460 937/454/460 -f 937/454/460 934/455/460 933/452/460 -f 936/449/461 938/448/461 939/451/461 -f 939/451/461 937/450/461 936/449/461 -f 939/454/462 938/453/462 932/452/462 -f 932/452/462 935/455/462 939/454/462 -f 932/448/463 940/456/463 941/457/463 -f 941/457/463 933/449/463 932/448/463 -f 933/452/464 941/458/464 942/459/464 -f 942/459/464 936/453/464 933/452/464 -f 936/449/465 942/457/465 943/456/465 -f 943/456/465 938/448/465 936/449/465 -f 932/452/466 938/453/466 943/459/466 -f 943/459/466 940/458/466 932/452/466 -f 944/448/459 945/449/459 946/450/459 -f 946/450/459 947/451/459 944/448/459 -f 945/452/460 948/453/460 949/454/460 -f 949/454/460 946/455/460 945/452/460 -f 948/449/461 950/448/461 951/451/461 -f 951/451/461 949/450/461 948/449/461 -f 951/454/462 950/453/462 944/452/462 -f 944/452/462 947/455/462 951/454/462 -f 944/448/463 952/456/463 953/457/463 -f 953/457/463 945/449/463 944/448/463 -f 945/452/464 953/458/464 954/459/464 -f 954/459/464 948/453/464 945/452/464 -f 948/449/465 954/457/465 955/456/465 -f 955/456/465 950/448/465 948/449/465 -f 944/452/466 950/453/466 955/459/466 -f 955/459/466 952/458/466 944/452/466 -f 956/460/467 957/461/467 958/462/467 -f 958/462/467 959/463/467 956/460/467 -f 960/464/468 961/465/468 957/466/468 -f 957/466/468 956/467/468 960/464/468 -f 962/468/469 963/469/469 961/470/469 -f 961/470/469 960/471/469 962/468/469 -f 962/464/470 959/467/470 958/466/470 -f 958/466/470 963/465/470 962/464/470 -f 964/472/471 965/473/471 958/462/471 -f 958/462/471 957/461/471 964/472/471 -f 966/474/472 964/475/472 957/466/472 -f 957/466/472 961/465/472 966/474/472 -f 967/476/473 966/477/473 961/470/473 -f 961/470/473 963/469/473 967/476/473 -f 958/466/474 965/475/474 967/474/474 -f 967/474/474 963/465/474 958/466/474 -f 968/460/467 969/461/467 970/462/467 -f 970/462/467 971/463/467 968/460/467 -f 972/464/475 973/465/475 969/466/475 -f 969/466/475 968/467/475 972/464/475 -f 974/468/469 975/469/469 973/470/469 -f 973/470/469 972/471/469 974/468/469 -f 974/464/476 971/467/476 970/466/476 -f 970/466/476 975/465/476 974/464/476 -f 976/472/471 977/473/471 970/462/471 -f 970/462/471 969/461/471 976/472/471 -f 978/474/472 976/475/472 969/466/472 -f 969/466/472 973/465/472 978/474/472 -f 979/476/473 978/477/473 973/470/473 -f 973/470/473 975/469/473 979/476/473 -f 970/466/474 977/475/474 979/474/474 -f 979/474/474 975/465/474 970/466/474 -f 980/478/477 981/479/477 982/480/477 -f 982/480/477 983/481/477 980/478/477 -f 984/482/478 985/483/478 981/479/478 -f 981/479/478 980/478/478 984/482/478 -f 986/484/479 987/485/479 985/483/479 -f 985/483/479 984/482/479 986/484/479 -f 988/486/480 989/487/480 987/485/480 -f 987/485/480 986/484/480 988/486/480 -f 990/488/481 991/489/481 989/490/481 -f 989/490/481 988/491/481 990/488/481 -f 983/481/482 982/480/482 991/489/482 -f 991/489/482 990/488/482 983/481/482 -f 992/492/483 993/493/483 994/494/483 -f 994/494/483 995/495/483 992/492/483 -f 996/495/484 997/492/484 998/493/484 -f 998/493/484 999/494/484 996/495/484 -f 994/496/485 996/497/485 999/498/485 -f 999/498/485 995/499/485 994/496/485 -f 993/500/486 997/501/486 996/502/486 -f 996/502/486 994/503/486 993/500/486 -f 992/499/12 998/498/12 997/497/12 -f 997/497/12 993/496/12 992/499/12 -f 995/503/487 999/502/487 998/501/487 -f 998/501/487 992/500/487 995/503/487 -f 1000/504/488 1001/505/488 1002/506/488 -f 1002/506/488 1003/507/488 1000/504/488 -f 1004/506/481 1005/505/481 1006/504/481 -f 1006/504/481 1007/507/481 1004/506/481 -f 1002/508/9 1004/509/9 1007/510/9 -f 1007/510/9 1003/511/9 1002/508/9 -f 1001/512/489 1005/513/489 1004/514/489 -f 1004/514/489 1002/515/489 1001/512/489 -f 1008/511/12 1009/510/12 1010/509/12 -f 1010/509/12 1011/508/12 1008/511/12 -f 1000/504/478 1008/516/478 1011/517/478 -f 1011/517/478 1001/505/478 1000/504/478 -f 1010/517/481 1009/516/481 1006/504/481 -f 1006/504/481 1005/505/481 1010/517/481 -f 1011/518/490 1010/519/490 1005/513/490 -f 1005/513/490 1001/512/490 1011/518/490 -f 1012/520/491 1013/521/491 1014/522/491 -f 1014/522/491 1015/523/491 1012/520/491 -f 1016/524/9 1017/525/9 1013/526/9 -f 1013/526/9 1012/527/9 1016/524/9 -f 1018/528/492 1019/529/492 1017/530/492 -f 1017/530/492 1016/531/492 1018/528/492 -f 1015/532/493 1014/533/493 1019/534/493 -f 1019/534/493 1018/535/493 1015/532/493 -f 1013/521/494 1020/536/494 1021/537/494 -f 1021/537/494 1014/522/494 1013/521/494 -f 1017/525/495 1022/538/495 1020/539/495 -f 1020/539/495 1013/526/495 1017/525/495 -f 1019/529/496 1023/540/496 1022/541/496 -f 1022/541/496 1017/530/496 1019/529/496 -f 1014/533/493 1021/542/493 1023/543/493 -f 1023/543/493 1019/534/493 1014/533/493 -f 1020/536/497 1024/544/497 1025/545/497 -f 1025/545/497 1021/537/497 1020/536/497 -f 1022/538/485 1026/546/485 1024/547/485 -f 1024/547/485 1020/539/485 1022/538/485 -f 1023/540/498 1027/548/498 1026/549/498 -f 1026/549/498 1022/541/498 1023/540/498 -f 1021/542/12 1025/550/12 1027/551/12 -f 1027/551/12 1023/543/12 1021/542/12 -f 1024/544/499 1028/552/499 1029/553/499 -f 1029/553/499 1025/545/499 1024/544/499 -f 1026/546/485 1030/554/485 1028/555/485 -f 1028/555/485 1024/547/485 1026/546/485 -f 1027/548/500 1031/556/500 1030/557/500 -f 1030/557/500 1026/549/500 1027/548/500 -f 1025/550/12 1029/558/12 1031/559/12 -f 1031/559/12 1027/551/12 1025/550/12 -f 1028/552/501 1032/560/501 1033/561/501 -f 1033/561/501 1029/553/501 1028/552/501 -f 1030/554/502 1034/562/502 1032/563/502 -f 1032/563/502 1028/555/502 1030/554/502 -f 1031/556/503 1035/564/503 1034/565/503 -f 1034/565/503 1030/557/503 1031/556/503 -f 1029/558/504 1033/566/504 1035/567/504 -f 1035/567/504 1031/559/504 1029/558/504 -f 1032/560/505 1036/568/505 1037/569/505 -f 1037/569/505 1033/561/505 1032/560/505 -f 1034/562/485 1038/570/485 1036/571/485 -f 1036/571/485 1032/563/485 1034/562/485 -f 1035/564/506 1039/572/506 1038/573/506 -f 1038/573/506 1034/565/506 1035/564/506 -f 1033/566/504 1037/574/504 1039/575/504 -f 1039/575/504 1035/567/504 1033/566/504 -f 1036/568/507 1040/576/507 1041/577/507 -f 1041/577/507 1037/569/507 1036/568/507 -f 1038/570/502 1042/578/502 1040/579/502 -f 1040/579/502 1036/571/502 1038/570/502 -f 1039/572/508 1043/580/508 1042/581/508 -f 1042/581/508 1038/573/508 1039/572/508 -f 1037/574/509 1041/582/509 1043/583/509 -f 1043/583/509 1039/575/509 1037/574/509 -f 1040/576/496 1044/584/496 1045/585/496 -f 1045/585/496 1041/577/496 1040/576/496 -f 1042/578/485 1046/586/485 1044/587/485 -f 1044/587/485 1040/579/485 1042/578/485 -f 1043/580/494 1047/588/494 1046/589/494 -f 1046/589/494 1042/581/494 1043/580/494 -f 1041/582/12 1045/590/12 1047/591/12 -f 1047/591/12 1043/583/12 1041/582/12 -f 1044/584/510 1048/592/510 1049/593/510 -f 1049/593/510 1045/585/510 1044/584/510 -f 1046/586/9 1050/594/9 1048/595/9 -f 1048/595/9 1044/587/9 1046/586/9 -f 1047/588/511 1051/596/511 1050/597/511 -f 1050/597/511 1046/589/511 1047/588/511 -f 1045/590/12 1049/598/12 1051/599/12 -f 1051/599/12 1047/591/12 1045/590/12 -f 1048/592/512 1052/600/512 1053/601/512 -f 1053/601/512 1049/593/512 1048/592/512 -f 1050/594/9 1054/602/9 1052/603/9 -f 1052/603/9 1048/595/9 1050/594/9 -f 1051/596/499 1055/604/499 1054/605/499 -f 1054/605/499 1050/597/499 1051/596/499 -f 1049/598/12 1053/606/12 1055/607/12 -f 1055/607/12 1051/599/12 1049/598/12 -f 1052/600/503 1056/608/503 1057/609/503 -f 1057/609/503 1053/601/503 1052/600/503 -f 1054/602/502 1058/610/502 1056/611/502 -f 1056/611/502 1052/603/502 1054/602/502 -f 1055/604/513 1059/612/513 1058/613/513 -f 1058/613/513 1054/605/513 1055/604/513 -f 1053/606/509 1057/614/509 1059/615/509 -f 1059/615/509 1055/607/509 1053/606/509 -f 1056/608/514 1012/616/514 1015/617/514 -f 1015/617/514 1057/609/514 1056/608/514 -f 1058/610/485 1016/524/485 1012/527/485 -f 1012/527/485 1056/611/485 1058/610/485 -f 1059/612/505 1018/618/505 1016/619/505 -f 1016/619/505 1058/613/505 1059/612/505 -f 1057/614/504 1015/532/504 1018/535/504 -f 1018/535/504 1059/615/504 1057/614/504 -f 1060/520/491 1061/521/491 1062/522/491 -f 1062/522/491 1063/523/491 1060/520/491 -f 1064/524/9 1065/525/9 1061/526/9 -f 1061/526/9 1060/527/9 1064/524/9 -f 1066/528/507 1067/529/507 1065/530/507 -f 1065/530/507 1064/531/507 1066/528/507 -f 1063/532/504 1062/533/504 1067/534/504 -f 1067/534/504 1066/535/504 1063/532/504 -f 1061/521/515 1068/536/515 1069/537/515 -f 1069/537/515 1062/522/515 1061/521/515 -f 1065/525/495 1070/538/495 1068/539/495 -f 1068/539/495 1061/526/495 1065/525/495 -f 1067/529/516 1071/540/516 1070/541/516 -f 1070/541/516 1065/530/516 1067/529/516 -f 1062/533/509 1069/542/509 1071/543/509 -f 1071/543/509 1067/534/509 1062/533/509 -f 1068/536/511 1072/544/511 1073/545/511 -f 1073/545/511 1069/537/511 1068/536/511 -f 1070/538/9 1074/546/9 1072/547/9 -f 1072/547/9 1068/539/9 1070/538/9 -f 1071/540/510 1075/548/510 1074/549/510 -f 1074/549/510 1070/541/510 1071/540/510 -f 1069/542/509 1073/550/509 1075/551/509 -f 1075/551/509 1071/543/509 1069/542/509 -f 1072/544/517 1076/552/517 1077/553/517 -f 1077/553/517 1073/545/517 1072/544/517 -f 1074/546/9 1078/554/9 1076/555/9 -f 1076/555/9 1072/547/9 1074/546/9 -f 1075/548/518 1079/556/518 1078/557/518 -f 1078/557/518 1074/549/518 1075/548/518 -f 1073/550/12 1077/558/12 1079/559/12 -f 1079/559/12 1075/551/12 1073/550/12 -f 1076/552/501 1080/560/501 1081/561/501 -f 1081/561/501 1077/553/501 1076/552/501 -f 1078/554/485 1082/562/485 1080/563/485 -f 1080/563/485 1076/555/485 1078/554/485 -f 1079/556/519 1083/564/519 1082/565/519 -f 1082/565/519 1078/557/519 1079/556/519 -f 1077/558/504 1081/566/504 1083/567/504 -f 1083/567/504 1079/559/504 1077/558/504 -f 1080/560/520 1084/568/520 1085/569/520 -f 1085/569/520 1081/561/520 1080/560/520 -f 1082/562/502 1086/570/502 1084/571/502 -f 1084/571/502 1080/563/502 1082/562/502 -f 1083/564/514 1087/572/514 1086/573/514 -f 1086/573/514 1082/565/514 1083/564/514 -f 1081/566/504 1085/574/504 1087/575/504 -f 1087/575/504 1083/567/504 1081/566/504 -f 1084/568/492 1088/576/492 1089/577/492 -f 1089/577/492 1085/569/492 1084/568/492 -f 1086/570/495 1090/578/495 1088/579/495 -f 1088/579/495 1084/571/495 1086/570/495 -f 1087/572/491 1091/580/491 1090/581/491 -f 1090/581/491 1086/573/491 1087/572/491 -f 1085/574/493 1089/582/493 1091/583/493 -f 1091/583/493 1087/575/493 1085/574/493 -f 1088/576/516 1092/584/516 1093/585/516 -f 1093/585/516 1089/577/516 1088/576/516 -f 1090/578/485 1094/586/485 1092/587/485 -f 1092/587/485 1088/579/485 1090/578/485 -f 1091/580/515 1095/588/515 1094/589/515 -f 1094/589/515 1090/581/515 1091/580/515 -f 1089/582/504 1093/590/504 1095/591/504 -f 1095/591/504 1091/583/504 1089/582/504 -f 1092/584/510 1096/592/510 1097/593/510 -f 1097/593/510 1093/585/510 1092/584/510 -f 1094/586/485 1098/594/485 1096/595/485 -f 1096/595/485 1092/587/485 1094/586/485 -f 1095/588/511 1099/596/511 1098/597/511 -f 1098/597/511 1094/589/511 1095/588/511 -f 1093/590/12 1097/598/12 1099/599/12 -f 1099/599/12 1095/591/12 1093/590/12 -f 1096/592/518 1100/600/518 1101/601/518 -f 1101/601/518 1097/593/518 1096/592/518 -f 1098/594/502 1102/602/502 1100/603/502 -f 1100/603/502 1096/595/502 1098/594/502 -f 1099/596/517 1103/604/517 1102/605/517 -f 1102/605/517 1098/597/517 1099/596/517 -f 1097/598/12 1101/606/12 1103/607/12 -f 1103/607/12 1099/599/12 1097/598/12 -f 1100/600/519 1104/608/519 1105/609/519 -f 1105/609/519 1101/601/519 1100/600/519 -f 1102/602/9 1106/610/9 1104/611/9 -f 1104/611/9 1100/603/9 1102/602/9 -f 1103/604/501 1107/612/501 1106/613/501 -f 1106/613/501 1102/605/501 1103/604/501 -f 1101/606/509 1105/614/509 1107/615/509 -f 1107/615/509 1103/607/509 1101/606/509 -f 1104/608/514 1060/616/514 1063/617/514 -f 1063/617/514 1105/609/514 1104/608/514 -f 1106/610/485 1064/524/485 1060/527/485 -f 1060/527/485 1104/611/485 1106/610/485 -f 1107/612/520 1066/618/520 1064/619/520 -f 1064/619/520 1106/613/520 1107/612/520 -f 1105/614/504 1063/532/504 1066/535/504 -f 1066/535/504 1107/615/504 1105/614/504 -f 1108/504/521 1109/505/521 1110/506/521 -f 1110/506/521 1111/507/521 1108/504/521 -f 1112/506/522 1113/505/522 1114/504/522 -f 1114/504/522 1115/507/522 1112/506/522 -f 1110/508/502 1112/509/502 1115/510/502 -f 1115/510/502 1111/511/502 1110/508/502 -f 1109/512/523 1113/513/523 1112/514/523 -f 1112/514/523 1110/515/523 1109/512/523 -f 1116/511/509 1117/510/509 1118/509/509 -f 1118/509/509 1119/508/509 1116/511/509 -f 1108/504/524 1116/516/524 1119/517/524 -f 1119/517/524 1109/505/524 1108/504/524 -f 1118/517/522 1117/516/522 1114/504/522 -f 1114/504/522 1113/505/522 1118/517/522 -f 1119/518/525 1118/519/525 1113/513/525 -f 1113/513/525 1109/512/525 1119/518/525 -f 1120/620/526 1121/621/526 1122/622/526 -f 1122/622/526 1123/623/526 1120/620/526 -f 1124/624/527 1125/625/527 1121/626/527 -f 1121/626/527 1120/627/527 1124/624/527 -f 1121/621/528 1126/628/528 1127/629/528 -f 1127/629/528 1122/622/528 1121/621/528 -f 1125/625/529 1128/630/529 1126/631/529 -f 1126/631/529 1121/626/529 1125/625/529 -f 1126/628/530 1129/632/530 1130/633/530 -f 1130/633/530 1127/629/530 1126/628/530 -f 1128/630/531 1131/634/531 1129/635/531 -f 1129/635/531 1126/631/531 1128/630/531 -f 1129/632/532 1132/636/532 1133/637/532 -f 1133/637/532 1130/633/532 1129/632/532 -f 1131/634/533 1134/638/533 1132/639/533 -f 1132/639/533 1129/635/533 1131/634/533 -f 1132/640/534 1135/641/534 1136/642/534 -f 1136/642/534 1133/643/534 1132/640/534 -f 1134/644/535 1137/645/535 1135/646/535 -f 1135/646/535 1132/647/535 1134/644/535 -f 1135/641/536 1120/620/536 1123/623/536 -f 1123/623/536 1136/642/536 1135/641/536 -f 1137/645/537 1124/624/537 1120/627/537 -f 1120/627/537 1135/646/537 1137/645/537 -f 1138/492/65 1139/493/65 1140/494/65 -f 1140/494/65 1141/495/65 1138/492/65 -f 1142/495/11 1143/492/11 1144/493/11 -f 1144/493/11 1145/494/11 1142/495/11 -f 1140/496/495 1142/497/495 1145/498/495 -f 1145/498/495 1141/499/495 1140/496/495 -f 1139/500/538 1143/501/538 1142/502/538 -f 1142/502/538 1140/503/538 1139/500/538 -f 1138/499/509 1144/498/509 1143/497/509 -f 1143/497/509 1139/496/509 1138/499/509 -f 1141/503/368 1145/502/368 1144/501/368 -f 1144/501/368 1138/500/368 1141/503/368 -f 1146/492/487 1147/493/487 1148/494/487 -f 1148/494/487 1149/495/487 1146/492/487 -f 1150/495/486 1151/492/486 1152/493/486 -f 1152/493/486 1153/494/486 1150/495/486 -f 1148/496/502 1150/497/502 1153/498/502 -f 1153/498/502 1149/499/502 1148/496/502 -f 1147/500/483 1151/501/483 1150/502/483 -f 1150/502/483 1148/503/483 1147/500/483 -f 1146/499/509 1152/498/509 1151/497/509 -f 1151/497/509 1147/496/509 1146/499/509 -f 1149/503/484 1153/502/484 1152/501/484 -f 1152/501/484 1146/500/484 1149/503/484 -f 1154/504/539 1155/505/539 1156/506/539 -f 1156/506/539 1157/507/539 1154/504/539 -f 1158/506/540 1159/505/540 1160/504/540 -f 1160/504/540 1161/507/540 1158/506/540 -f 1156/508/9 1158/509/9 1161/510/9 -f 1161/510/9 1157/511/9 1156/508/9 -f 1155/512/541 1159/513/541 1158/514/541 -f 1158/514/541 1156/515/541 1155/512/541 -f 1162/511/12 1163/510/12 1164/509/12 -f 1164/509/12 1165/508/12 1162/511/12 -f 1154/504/542 1162/516/542 1165/517/542 -f 1165/517/542 1155/505/542 1154/504/542 -f 1164/517/543 1163/516/543 1160/504/543 -f 1160/504/543 1159/505/543 1164/517/543 -f 1165/518/544 1164/519/544 1159/513/544 -f 1159/513/544 1155/512/544 1165/518/544 -f 1166/504/545 1167/505/545 1168/506/545 -f 1168/506/545 1169/507/545 1166/504/545 -f 1170/506/546 1171/505/546 1172/504/546 -f 1172/504/546 1173/507/546 1170/506/546 -f 1168/508/485 1170/509/485 1173/510/485 -f 1173/510/485 1169/511/485 1168/508/485 -f 1167/512/547 1171/513/547 1170/514/547 -f 1170/514/547 1168/515/547 1167/512/547 -f 1174/511/12 1175/510/12 1176/509/12 -f 1176/509/12 1177/508/12 1174/511/12 -f 1166/504/548 1174/516/548 1177/517/548 -f 1177/517/548 1167/505/548 1166/504/548 -f 1176/517/549 1175/516/549 1172/504/549 -f 1172/504/549 1171/505/549 1176/517/549 -f 1177/518/550 1176/519/550 1171/513/550 -f 1171/513/550 1167/512/550 1177/518/550 -f 1178/492/551 1179/493/551 1180/494/551 -f 1180/494/551 1181/495/551 1178/492/551 -f 1182/495/368 1183/492/368 1184/493/368 -f 1184/493/368 1185/494/368 1182/495/368 -f 1180/496/485 1182/497/485 1185/498/485 -f 1185/498/485 1181/499/485 1180/496/485 -f 1179/500/10 1183/501/10 1182/502/10 -f 1182/502/10 1180/503/10 1179/500/10 -f 1178/499/504 1184/498/504 1183/497/504 -f 1183/497/504 1179/496/504 1178/499/504 -f 1181/503/64 1185/502/64 1184/501/64 -f 1184/501/64 1178/500/64 1181/503/64 -f 1186/504/552 1187/505/552 1188/506/552 -f 1188/506/552 1189/507/552 1186/504/552 -f 1190/506/553 1191/505/553 1192/504/553 -f 1192/504/553 1193/507/553 1190/506/553 -f 1188/508/485 1190/509/485 1193/510/485 -f 1193/510/485 1189/511/485 1188/508/485 -f 1187/512/554 1191/513/554 1190/514/554 -f 1190/514/554 1188/515/554 1187/512/554 -f 1194/511/504 1195/510/504 1196/509/504 -f 1196/509/504 1197/508/504 1194/511/504 -f 1186/504/555 1194/516/555 1197/517/555 -f 1197/517/555 1187/505/555 1186/504/555 -f 1196/517/556 1195/516/556 1192/504/556 -f 1192/504/556 1191/505/556 1196/517/556 -f 1197/518/557 1196/519/557 1191/513/557 -f 1191/513/557 1187/512/557 1197/518/557 -f 1198/504/558 1199/505/558 1200/506/558 -f 1200/506/558 1201/507/558 1198/504/558 -f 1202/506/559 1203/505/559 1204/504/559 -f 1204/504/559 1205/507/559 1202/506/559 -f 1200/508/9 1202/509/9 1205/510/9 -f 1205/510/9 1201/511/9 1200/508/9 -f 1199/512/560 1203/513/560 1202/514/560 -f 1202/514/560 1200/515/560 1199/512/560 -f 1206/511/12 1207/510/12 1208/509/12 -f 1208/509/12 1209/508/12 1206/511/12 -f 1198/504/561 1206/516/561 1209/517/561 -f 1209/517/561 1199/505/561 1198/504/561 -f 1208/517/562 1207/516/562 1204/504/562 -f 1204/504/562 1203/505/562 1208/517/562 -f 1209/518/563 1208/519/563 1203/513/563 -f 1203/513/563 1199/512/563 1209/518/563 -f 1210/504/564 1211/505/564 1212/506/564 -f 1212/506/564 1213/507/564 1210/504/564 -f 1214/506/565 1215/505/565 1216/504/565 -f 1216/504/565 1217/507/565 1214/506/565 -f 1212/508/9 1214/509/9 1217/510/9 -f 1217/510/9 1213/511/9 1212/508/9 -f 1211/512/566 1215/513/566 1214/514/566 -f 1214/514/566 1212/515/566 1211/512/566 -f 1218/511/504 1219/510/504 1220/509/504 -f 1220/509/504 1221/508/504 1218/511/504 -f 1210/504/567 1218/516/567 1221/517/567 -f 1221/517/567 1211/505/567 1210/504/567 -f 1220/517/565 1219/516/565 1216/504/565 -f 1216/504/565 1215/505/565 1220/517/565 -f 1221/518/568 1220/519/568 1215/513/568 -f 1215/513/568 1211/512/568 1221/518/568 -f 1222/504/569 1223/505/569 1224/506/569 -f 1224/506/569 1225/507/569 1222/504/569 -f 1226/506/570 1227/505/570 1228/504/570 -f 1228/504/570 1229/507/570 1226/506/570 -f 1224/508/485 1226/509/485 1229/510/485 -f 1229/510/485 1225/511/485 1224/508/485 -f 1223/512/571 1227/513/571 1226/514/571 -f 1226/514/571 1224/515/571 1223/512/571 -f 1230/511/504 1231/510/504 1232/509/504 -f 1232/509/504 1233/508/504 1230/511/504 -f 1222/504/569 1230/516/569 1233/517/569 -f 1233/517/569 1223/505/569 1222/504/569 -f 1232/517/572 1231/516/572 1228/504/572 -f 1228/504/572 1227/505/572 1232/517/572 -f 1233/518/573 1232/519/573 1227/513/573 -f 1227/513/573 1223/512/573 1233/518/573 -f 1234/492/551 1235/493/551 1236/494/551 -f 1236/494/551 1237/495/551 1234/492/551 -f 1238/495/368 1239/492/368 1240/493/368 -f 1240/493/368 1241/494/368 1238/495/368 -f 1236/496/485 1238/497/485 1241/498/485 -f 1241/498/485 1237/499/485 1236/496/485 -f 1235/500/10 1239/501/10 1238/502/10 -f 1238/502/10 1236/503/10 1235/500/10 -f 1234/499/504 1240/498/504 1239/497/504 -f 1239/497/504 1235/496/504 1234/499/504 -f 1237/503/64 1241/502/64 1240/501/64 -f 1240/501/64 1234/500/64 1237/503/64 -f 1242/492/483 1243/493/483 1244/494/483 -f 1244/494/483 1245/495/483 1242/492/483 -f 1246/495/484 1247/492/484 1248/493/484 -f 1248/493/484 1249/494/484 1246/495/484 -f 1244/496/495 1246/497/495 1249/498/495 -f 1249/498/495 1245/499/495 1244/496/495 -f 1243/500/486 1247/501/486 1246/502/486 -f 1246/502/486 1244/503/486 1243/500/486 -f 1242/499/12 1248/498/12 1247/497/12 -f 1247/497/12 1243/496/12 1242/499/12 -f 1245/503/487 1249/502/487 1248/501/487 -f 1248/501/487 1242/500/487 1245/503/487 -f 1250/492/487 1251/493/487 1252/494/487 -f 1252/494/487 1253/495/487 1250/492/487 -f 1254/495/486 1255/492/486 1256/493/486 -f 1256/493/486 1257/494/486 1254/495/486 -f 1252/496/502 1254/497/502 1257/498/502 -f 1257/498/502 1253/499/502 1252/496/502 -f 1251/500/483 1255/501/483 1254/502/483 -f 1254/502/483 1252/503/483 1251/500/483 -f 1250/499/509 1256/498/509 1255/497/509 -f 1255/497/509 1251/496/509 1250/499/509 -f 1253/503/484 1257/502/484 1256/501/484 -f 1256/501/484 1250/500/484 1253/503/484 -f 1258/620/478 1259/621/478 1260/622/478 -f 1260/622/478 1261/623/478 1258/620/478 -f 1262/624/574 1263/625/574 1259/626/574 -f 1259/626/574 1258/627/574 1262/624/574 -f 1259/621/575 1264/628/575 1265/629/575 -f 1265/629/575 1260/622/575 1259/621/575 -f 1263/625/576 1266/630/576 1264/631/576 -f 1264/631/576 1259/626/576 1263/625/576 -f 1264/628/482 1267/632/482 1268/633/482 -f 1268/633/482 1265/629/482 1264/628/482 -f 1266/630/577 1269/634/577 1267/635/577 -f 1267/635/577 1264/631/577 1266/630/577 -f 1267/632/578 1270/636/578 1271/637/578 -f 1271/637/578 1268/633/578 1267/632/578 -f 1269/634/579 1272/638/579 1270/639/579 -f 1270/639/579 1267/635/579 1269/634/579 -f 1270/640/580 1273/641/580 1274/642/580 -f 1274/642/580 1271/643/580 1270/640/580 -f 1272/644/581 1275/645/581 1273/646/581 -f 1273/646/581 1270/647/581 1272/644/581 -f 1273/641/479 1258/620/479 1261/623/479 -f 1261/623/479 1274/642/479 1273/641/479 -f 1275/645/582 1262/624/582 1258/627/582 -f 1258/627/582 1273/646/582 1275/645/582 -f 1276/492/64 1277/493/64 1278/494/64 -f 1278/494/64 1279/495/64 1276/492/64 -f 1280/495/10 1281/492/10 1282/493/10 -f 1282/493/10 1283/494/10 1280/495/10 -f 1278/496/485 1280/497/485 1283/498/485 -f 1283/498/485 1279/499/485 1278/496/485 -f 1277/500/538 1281/501/538 1280/502/538 -f 1280/502/538 1278/503/538 1277/500/538 -f 1276/499/504 1282/498/504 1281/497/504 -f 1281/497/504 1277/496/504 1276/499/504 -f 1279/503/368 1283/502/368 1282/501/368 -f 1282/501/368 1276/500/368 1279/503/368 -f 1284/504/583 1285/505/583 1286/506/583 -f 1286/506/583 1287/507/583 1284/504/583 -f 1288/506/584 1289/505/584 1290/504/584 -f 1290/504/584 1291/507/584 1288/506/584 -f 1286/508/502 1288/509/502 1291/510/502 -f 1291/510/502 1287/511/502 1286/508/502 -f 1285/512/585 1289/513/585 1288/514/585 -f 1288/514/585 1286/515/585 1285/512/585 -f 1292/511/509 1293/510/509 1294/509/509 -f 1294/509/509 1295/508/509 1292/511/509 -f 1284/504/583 1292/516/583 1295/517/583 -f 1295/517/583 1285/505/583 1284/504/583 -f 1294/517/586 1293/516/586 1290/504/586 -f 1290/504/586 1289/505/586 1294/517/586 -f 1295/518/587 1294/519/587 1289/513/587 -f 1289/513/587 1285/512/587 1295/518/587 -f 1296/504/588 1297/505/588 1298/506/588 -f 1298/506/588 1299/507/588 1296/504/588 -f 1300/506/589 1301/505/589 1302/504/589 -f 1302/504/589 1303/507/589 1300/506/589 -f 1298/508/485 1300/509/485 1303/510/485 -f 1303/510/485 1299/511/485 1298/508/485 -f 1297/512/590 1301/513/590 1300/514/590 -f 1300/514/590 1298/515/590 1297/512/590 -f 1304/511/12 1305/510/12 1306/509/12 -f 1306/509/12 1307/508/12 1304/511/12 -f 1296/504/591 1304/516/591 1307/517/591 -f 1307/517/591 1297/505/591 1296/504/591 -f 1306/517/592 1305/516/592 1302/504/592 -f 1302/504/592 1301/505/592 1306/517/592 -f 1307/518/593 1306/519/593 1301/513/593 -f 1301/513/593 1297/512/593 1307/518/593 -f 1308/504/594 1309/505/594 1310/506/594 -f 1310/506/594 1311/507/594 1308/504/594 -f 1312/506/595 1313/505/595 1314/504/595 -f 1314/504/595 1315/507/595 1312/506/595 -f 1310/508/495 1312/509/495 1315/510/495 -f 1315/510/495 1311/511/495 1310/508/495 -f 1309/512/596 1313/513/596 1312/514/596 -f 1312/514/596 1310/515/596 1309/512/596 -f 1316/511/12 1317/510/12 1318/509/12 -f 1318/509/12 1319/508/12 1316/511/12 -f 1308/504/594 1316/516/594 1319/517/594 -f 1319/517/594 1309/505/594 1308/504/594 -f 1318/517/595 1317/516/595 1314/504/595 -f 1314/504/595 1313/505/595 1318/517/595 -f 1319/518/597 1318/519/597 1313/513/597 -f 1313/513/597 1309/512/597 1319/518/597 -f 1320/504/598 1321/505/598 1322/506/598 -f 1322/506/598 1323/507/598 1320/504/598 -f 1324/506/599 1325/505/599 1326/504/599 -f 1326/504/599 1327/507/599 1324/506/599 -f 1322/508/9 1324/509/9 1327/510/9 -f 1327/510/9 1323/511/9 1322/508/9 -f 1321/512/600 1325/513/600 1324/514/600 -f 1324/514/600 1322/515/600 1321/512/600 -f 1328/511/504 1329/510/504 1330/509/504 -f 1330/509/504 1331/508/504 1328/511/504 -f 1320/504/601 1328/516/601 1331/517/601 -f 1331/517/601 1321/505/601 1320/504/601 -f 1330/517/602 1329/516/602 1326/504/602 -f 1326/504/602 1325/505/602 1330/517/602 -f 1331/518/603 1330/519/603 1325/513/603 -f 1325/513/603 1321/512/603 1331/518/603 -f 1332/648/604 1333/649/604 1334/650/604 -f 1334/650/604 1335/651/604 1332/648/604 -f 1333/652/605 1336/653/605 1337/654/605 -f 1337/654/605 1334/655/605 1333/652/605 -f 1337/656/606 1336/657/606 1338/658/606 -f 1338/658/606 1339/659/606 1337/656/606 -f 1339/660/607 1338/661/607 1332/662/607 -f 1332/662/607 1335/663/607 1339/660/607 -f 1332/648/608 1340/664/608 1341/665/608 -f 1341/665/608 1333/649/608 1332/648/608 -f 1336/653/609 1333/652/609 1341/666/609 -f 1341/666/609 1342/667/609 1336/653/609 -f 1336/657/610 1342/668/610 1343/669/610 -f 1343/669/610 1338/658/610 1336/657/610 -f 1338/661/611 1343/670/611 1340/671/611 -f 1340/671/611 1332/662/611 1338/661/611 -f 1344/504/612 1345/505/612 1346/506/612 -f 1346/506/612 1347/507/612 1344/504/612 -f 1348/506/613 1349/505/613 1350/504/613 -f 1350/504/613 1351/507/613 1348/506/613 -f 1346/508/502 1348/509/502 1351/510/502 -f 1351/510/502 1347/511/502 1346/508/502 -f 1345/512/614 1349/513/614 1348/514/614 -f 1348/514/614 1346/515/614 1345/512/614 -f 1352/511/12 1353/510/12 1354/509/12 -f 1354/509/12 1355/508/12 1352/511/12 -f 1344/504/615 1352/516/615 1355/517/615 -f 1355/517/615 1345/505/615 1344/504/615 -f 1354/517/616 1353/516/616 1350/504/616 -f 1350/504/616 1349/505/616 1354/517/616 -f 1355/518/617 1354/519/617 1349/513/617 -f 1349/513/617 1345/512/617 1355/518/617 -f 1356/504/618 1357/505/618 1358/506/618 -f 1358/506/618 1359/507/618 1356/504/618 -f 1360/506/619 1361/505/619 1362/504/619 -f 1362/504/619 1363/507/619 1360/506/619 -f 1358/508/502 1360/509/502 1363/510/502 -f 1363/510/502 1359/511/502 1358/508/502 -f 1357/512/620 1361/513/620 1360/514/620 -f 1360/514/620 1358/515/620 1357/512/620 -f 1364/511/12 1365/510/12 1366/509/12 -f 1366/509/12 1367/508/12 1364/511/12 -f 1356/504/621 1364/516/621 1367/517/621 -f 1367/517/621 1357/505/621 1356/504/621 -f 1366/517/622 1365/516/622 1362/504/622 -f 1362/504/622 1361/505/622 1366/517/622 -f 1367/518/623 1366/519/623 1361/513/623 -f 1361/513/623 1357/512/623 1367/518/623 -f 1368/504/624 1369/505/624 1370/506/624 -f 1370/506/624 1371/507/624 1368/504/624 -f 1372/506/625 1373/505/625 1374/504/625 -f 1374/504/625 1375/507/625 1372/506/625 -f 1370/508/502 1372/509/502 1375/510/502 -f 1375/510/502 1371/511/502 1370/508/502 -f 1369/512/626 1373/513/626 1372/514/626 -f 1372/514/626 1370/515/626 1369/512/626 -f 1376/511/509 1377/510/509 1378/509/509 -f 1378/509/509 1379/508/509 1376/511/509 -f 1368/504/627 1376/516/627 1379/517/627 -f 1379/517/627 1369/505/627 1368/504/627 -f 1378/517/628 1377/516/628 1374/504/628 -f 1374/504/628 1373/505/628 1378/517/628 -f 1379/518/629 1378/519/629 1373/513/629 -f 1373/513/629 1369/512/629 1379/518/629 -f 1380/504/630 1381/505/630 1382/506/630 -f 1382/506/630 1383/507/630 1380/504/630 -f 1384/506/631 1385/505/631 1386/504/631 -f 1386/504/631 1387/507/631 1384/506/631 -f 1382/508/9 1384/509/9 1387/510/9 -f 1387/510/9 1383/511/9 1382/508/9 -f 1381/512/632 1385/513/632 1384/514/632 -f 1384/514/632 1382/515/632 1381/512/632 -f 1388/511/12 1389/510/12 1390/509/12 -f 1390/509/12 1391/508/12 1388/511/12 -f 1380/504/630 1388/516/630 1391/517/630 -f 1391/517/630 1381/505/630 1380/504/630 -f 1390/517/633 1389/516/633 1386/504/633 -f 1386/504/633 1385/505/633 1390/517/633 -f 1391/518/634 1390/519/634 1385/513/634 -f 1385/513/634 1381/512/634 1391/518/634 -f 1392/672/9 1393/673/9 1394/674/9 -f 1394/674/9 1395/675/9 1392/672/9 -f 1394/676/11 1396/677/11 1397/678/11 -f 1397/678/11 1395/679/11 1394/676/11 -f 1393/680/635 1398/681/635 1396/682/635 -f 1396/682/635 1394/683/635 1393/680/635 -f 1393/676/64 1392/679/64 1399/678/64 -f 1399/678/64 1398/677/64 1393/676/64 -f 1395/683/636 1397/682/636 1399/681/636 -f 1399/681/636 1392/680/636 1395/683/636 -f 1400/684/11 1401/685/11 1397/678/11 -f 1397/678/11 1396/677/11 1400/684/11 -f 1402/686/637 1400/687/637 1396/682/637 -f 1396/682/637 1398/681/637 1402/686/637 -f 1399/678/65 1403/685/65 1402/684/65 -f 1402/684/65 1398/677/65 1399/678/65 -f 1401/687/638 1403/686/638 1399/681/638 -f 1399/681/638 1397/682/638 1401/687/638 -f 1404/396/453 1405/397/453 1406/398/453 -f 1406/398/453 1407/399/453 1404/396/453 -f 1408/400/639 1404/401/639 1407/402/639 -f 1407/402/639 1409/403/639 1408/400/639 -f 1408/396/454 1409/399/454 1410/398/454 -f 1410/398/454 1411/397/454 1408/396/454 -f 1411/404/640 1410/405/640 1406/406/640 -f 1406/406/640 1405/407/640 1411/404/640 -f 1407/399/641 1406/398/641 1412/408/641 -f 1412/408/641 1413/409/641 1407/399/641 -f 1407/402/642 1413/410/642 1414/411/642 -f 1414/411/642 1409/403/642 1407/402/642 -f 1409/399/643 1414/409/643 1415/408/643 -f 1415/408/643 1410/398/643 1409/399/643 -f 1406/406/644 1410/405/644 1415/412/644 -f 1415/412/644 1412/413/644 1406/406/644 -f 1416/672/64 1417/673/64 1418/674/64 -f 1418/674/64 1419/675/64 1416/672/64 -f 1420/675/10 1421/672/10 1422/673/10 -f 1422/673/10 1423/674/10 1420/675/10 -f 1418/676/9 1424/677/9 1425/678/9 -f 1425/678/9 1419/679/9 1418/676/9 -f 1417/680/645 1426/681/645 1424/682/645 -f 1424/682/645 1418/683/645 1417/680/645 -f 1417/676/509 1416/679/509 1427/678/509 -f 1427/678/509 1426/677/509 1417/676/509 -f 1419/683/646 1425/682/646 1427/681/646 -f 1427/681/646 1416/680/646 1419/683/646 -f 1420/684/9 1423/685/9 1425/678/9 -f 1425/678/9 1424/677/9 1420/684/9 -f 1421/686/647 1420/687/647 1424/682/647 -f 1424/682/647 1426/681/647 1421/686/647 -f 1427/678/509 1422/685/509 1421/684/509 -f 1421/684/509 1426/677/509 1427/678/509 -f 1423/687/648 1422/686/648 1427/681/648 -f 1427/681/648 1425/682/648 1423/687/648 -f 1428/396/453 1429/399/453 1430/398/453 -f 1430/398/453 1431/397/453 1428/396/453 -f 1432/400/446 1433/403/446 1429/402/446 -f 1429/402/446 1428/401/446 1432/400/446 -f 1432/396/454 1434/397/454 1435/398/454 -f 1435/398/454 1433/399/454 1432/396/454 -f 1434/404/448 1431/407/448 1430/406/448 -f 1430/406/448 1435/405/448 1434/404/448 -f 1429/399/649 1436/409/649 1437/408/649 -f 1437/408/649 1430/398/649 1429/399/649 -f 1429/402/650 1433/403/650 1438/411/650 -f 1438/411/650 1436/410/650 1429/402/650 -f 1433/399/651 1435/398/651 1439/408/651 -f 1439/408/651 1438/409/651 1433/399/651 -f 1430/406/652 1437/413/652 1439/412/652 -f 1439/412/652 1435/405/652 1430/406/652 -f 1440/648/653 1441/651/653 1442/650/653 -f 1442/650/653 1443/649/653 1440/648/653 -f 1443/652/605 1442/655/605 1444/654/605 -f 1444/654/605 1445/653/605 1443/652/605 -f 1444/656/654 1446/659/654 1447/658/654 -f 1447/658/654 1445/657/654 1444/656/654 -f 1446/660/607 1441/663/607 1440/662/607 -f 1440/662/607 1447/661/607 1446/660/607 -f 1440/648/655 1443/649/655 1448/665/655 -f 1448/665/655 1449/664/655 1440/648/655 -f 1445/653/656 1450/667/656 1448/666/656 -f 1448/666/656 1443/652/656 1445/653/656 -f 1445/657/657 1447/658/657 1451/669/657 -f 1451/669/657 1450/668/657 1445/657/657 -f 1447/661/658 1440/662/658 1449/671/658 -f 1449/671/658 1451/670/658 1447/661/658 -f 1452/688/538 1453/689/538 1454/690/538 -f 1454/690/538 1455/691/538 1452/688/538 -f 1456/692/10 1457/693/10 1453/694/10 -f 1453/694/10 1452/695/10 1456/692/10 -f 1458/691/368 1459/690/368 1457/689/368 -f 1457/689/368 1456/688/368 1458/691/368 -f 1460/696/551 1461/697/551 1462/698/551 -f 1462/698/551 1463/699/551 1460/696/551 -f 1464/700/9 1465/701/9 1461/702/9 -f 1461/702/9 1460/703/9 1464/700/9 -f 1466/699/659 1467/698/659 1465/697/659 -f 1465/697/659 1464/696/659 1466/699/659 -f 1468/672/9 1469/673/9 1470/674/9 -f 1470/674/9 1471/675/9 1468/672/9 -f 1470/676/10 1472/677/10 1473/678/10 -f 1473/678/10 1471/679/10 1470/676/10 -f 1469/680/635 1474/681/635 1472/682/635 -f 1472/682/635 1470/683/635 1469/680/635 -f 1469/676/64 1468/679/64 1475/678/64 -f 1475/678/64 1474/677/64 1469/676/64 -f 1471/683/636 1473/682/636 1475/681/636 -f 1475/681/636 1468/680/636 1471/683/636 -f 1476/684/10 1477/685/10 1473/678/10 -f 1473/678/10 1472/677/10 1476/684/10 -f 1478/686/660 1476/687/660 1472/682/660 -f 1472/682/660 1474/681/660 1478/686/660 -f 1475/678/64 1479/685/64 1478/684/64 -f 1478/684/64 1474/677/64 1475/678/64 -f 1477/687/661 1479/686/661 1475/681/661 -f 1475/681/661 1473/682/661 1477/687/661 -f 1480/704/64 1481/705/64 1482/706/64 -f 1482/706/64 1483/707/64 1480/704/64 -f 1484/708/662 1480/709/662 1483/710/662 -f 1483/710/662 1485/711/662 1484/708/662 -f 1486/712/663 1481/713/663 1480/714/663 -f 1480/714/663 1484/715/663 1486/712/663 -f 1486/708/664 1487/711/664 1482/710/664 -f 1482/710/664 1481/709/664 1486/708/664 -f 1485/715/665 1483/714/665 1482/713/665 -f 1482/713/665 1487/712/665 1485/715/665 -f 1488/706/10 1489/705/10 1490/704/10 -f 1490/704/10 1491/707/10 1488/706/10 -f 1491/706/666 1490/705/666 1492/704/666 -f 1492/704/666 1493/707/666 1491/706/666 -f 1490/706/667 1489/705/667 1494/704/667 -f 1494/704/667 1492/707/667 1490/706/667 -f 1494/707/668 1489/706/668 1488/705/668 -f 1488/705/668 1495/704/668 1494/707/668 -f 1488/706/669 1491/705/669 1493/704/669 -f 1493/704/669 1495/707/669 1488/706/669 -f 1496/716/368 1497/717/368 1498/718/368 -f 1498/718/368 1499/719/368 1496/716/368 -f 1500/720/12 1501/721/12 1497/717/12 -f 1497/717/12 1496/716/12 1500/720/12 -f 1502/722/368 1503/723/368 1504/724/368 -f 1504/724/368 1505/725/368 1502/722/368 -f 1505/725/12 1504/724/12 1506/726/12 -f 1506/726/12 1507/727/12 1505/725/12 -f 1508/728/368 1509/729/368 1510/730/368 -f 1510/730/368 1511/731/368 1508/728/368 -f 1511/731/10 1510/730/10 1512/732/10 -f 1512/732/10 1513/733/10 1511/731/10 -f 750/734/493 728/735/493 723/736/493 -f 723/736/493 746/737/493 750/734/493 -f 1514/738/670 1515/739/670 1516/740/670 -f 1516/740/670 1517/741/670 1514/738/670 -f 1517/742/671 1516/743/671 1518/744/671 -f 1518/744/671 1519/745/671 1517/742/671 -f 1518/740/672 1520/739/672 1521/738/672 -f 1521/738/672 1519/741/672 1518/740/672 -f 1520/744/673 1515/743/673 1514/742/673 -f 1514/742/673 1521/745/673 1520/744/673 -f 1514/738/674 1517/741/674 1522/746/674 -f 1522/746/674 1523/747/674 1514/738/674 -f 1517/742/675 1519/745/675 1524/748/675 -f 1524/748/675 1522/749/675 1517/742/675 -f 1521/738/676 1525/747/676 1524/746/676 -f 1524/746/676 1519/741/676 1521/738/676 -f 1521/745/677 1514/742/677 1523/749/677 -f 1523/749/677 1525/748/677 1521/745/677 -f 1526/738/670 1527/741/670 1528/740/670 -f 1528/740/670 1529/739/670 1526/738/670 -f 1527/742/678 1530/745/678 1531/744/678 -f 1531/744/678 1528/743/678 1527/742/678 -f 1531/740/672 1530/741/672 1532/738/672 -f 1532/738/672 1533/739/672 1531/740/672 -f 1533/744/679 1532/745/679 1526/742/679 -f 1526/742/679 1529/743/679 1533/744/679 -f 1526/738/674 1534/747/674 1535/746/674 -f 1535/746/674 1527/741/674 1526/738/674 -f 1527/742/680 1535/749/680 1536/748/680 -f 1536/748/680 1530/745/680 1527/742/680 -f 1532/738/676 1530/741/676 1536/746/676 -f 1536/746/676 1537/747/676 1532/738/676 -f 1532/745/681 1537/748/681 1534/749/681 -f 1534/749/681 1526/742/681 1532/745/681 -f 1538/750/653 1539/751/653 1540/752/653 -f 1540/752/653 1541/753/653 1538/750/653 -f 1539/754/682 1542/755/682 1543/756/682 -f 1543/756/682 1540/757/682 1539/754/682 -f 1543/758/654 1542/759/654 1544/760/654 -f 1544/760/654 1545/761/654 1543/758/654 -f 1545/762/683 1544/763/683 1538/764/683 -f 1538/764/683 1541/765/683 1545/762/683 -f 1538/750/655 1546/766/655 1547/767/655 -f 1547/767/655 1539/751/655 1538/750/655 -f 1542/755/684 1539/754/684 1547/768/684 -f 1547/768/684 1548/769/684 1542/755/684 -f 1542/759/657 1548/770/657 1549/771/657 -f 1549/771/657 1544/760/657 1542/759/657 -f 1544/763/685 1549/772/685 1546/773/685 -f 1546/773/685 1538/764/685 1544/763/685 -f 1550/774/538 1551/775/538 1552/776/538 -f 1552/776/538 1553/777/538 1550/774/538 -f 1554/778/12 1555/779/12 1551/780/12 -f 1551/780/12 1550/781/12 1554/778/12 -f 1556/777/368 1557/776/368 1555/775/368 -f 1555/775/368 1554/774/368 1556/777/368 -f 1558/750/604 1559/753/604 1560/752/604 -f 1560/752/604 1561/751/604 1558/750/604 -f 1561/754/682 1560/757/682 1562/756/682 -f 1562/756/682 1563/755/682 1561/754/682 -f 1562/758/606 1564/761/606 1565/760/606 -f 1565/760/606 1563/759/606 1562/758/606 -f 1564/762/683 1559/765/683 1558/764/683 -f 1558/764/683 1565/763/683 1564/762/683 -f 1558/750/608 1561/751/608 1566/767/608 -f 1566/767/608 1567/766/608 1558/750/608 -f 1563/755/686 1568/769/686 1566/768/686 -f 1566/768/686 1561/754/686 1563/755/686 -f 1563/759/610 1565/760/610 1569/771/610 -f 1569/771/610 1568/770/610 1563/759/610 -f 1565/763/687 1558/764/687 1567/773/687 -f 1567/773/687 1569/772/687 1565/763/687 -f 1570/620/526 1571/621/526 1572/622/526 -f 1572/622/526 1573/623/526 1570/620/526 -f 1574/624/527 1575/625/527 1571/626/527 -f 1571/626/527 1570/627/527 1574/624/527 -f 1571/621/528 1576/628/528 1577/629/528 -f 1577/629/528 1572/622/528 1571/621/528 -f 1575/625/529 1578/630/529 1576/631/529 -f 1576/631/529 1571/626/529 1575/625/529 -f 1576/628/530 1579/632/530 1580/633/530 -f 1580/633/530 1577/629/530 1576/628/530 -f 1578/630/531 1581/634/531 1579/635/531 -f 1579/635/531 1576/631/531 1578/630/531 -f 1579/632/532 1582/636/532 1583/637/532 -f 1583/637/532 1580/633/532 1579/632/532 -f 1581/634/533 1584/638/533 1582/639/533 -f 1582/639/533 1579/635/533 1581/634/533 -f 1582/640/534 1585/641/534 1586/642/534 -f 1586/642/534 1583/643/534 1582/640/534 -f 1584/644/535 1587/645/535 1585/646/535 -f 1585/646/535 1582/647/535 1584/644/535 -f 1585/641/688 1570/620/688 1573/623/688 -f 1573/623/688 1586/642/688 1585/641/688 -f 1587/645/537 1574/624/537 1570/627/537 -f 1570/627/537 1585/646/537 1587/645/537 -f 1588/782/689 1589/783/689 1590/784/689 -f 1590/784/689 1591/785/689 1588/782/689 -f 1592/786/690 1588/787/690 1591/788/690 -f 1591/788/690 1593/789/690 1592/786/690 -f 1594/790/691 1589/791/691 1588/792/691 -f 1588/792/691 1592/793/691 1594/790/691 -f 1595/794/692 1590/795/692 1589/796/692 -f 1589/796/692 1594/797/692 1595/794/692 -f 1593/793/693 1591/792/693 1590/791/693 -f 1590/791/693 1595/790/693 1593/793/693 -# 2214 faces - diff --git a/showcase/original/shaders/resources/models/watermill_diffuse.png b/showcase/original/shaders/resources/models/watermill_diffuse.png deleted file mode 100644 index 70649561..00000000 Binary files a/showcase/original/shaders/resources/models/watermill_diffuse.png and /dev/null differ diff --git a/showcase/original/shaders/resources/shaders/glsl330/grayscale.fs b/showcase/original/shaders/resources/shaders/glsl330/grayscale.fs deleted file mode 100644 index 5b3e11be..00000000 --- a/showcase/original/shaders/resources/shaders/glsl330/grayscale.fs +++ /dev/null @@ -1,26 +0,0 @@ -#version 330 - -// Input vertex attributes (from vertex shader) -in vec2 fragTexCoord; -in vec4 fragColor; - -// Input uniform values -uniform sampler2D texture0; -uniform vec4 colDiffuse; - -// Output fragment color -out vec4 finalColor; - -// NOTE: Add here your custom variables - -void main() -{ - // Texel color fetching from texture sampler - vec4 texelColor = texture(texture0, fragTexCoord)*colDiffuse*fragColor; - - // Convert texel color to grayscale using NTSC conversion weights - float gray = dot(texelColor.rgb, vec3(0.299, 0.587, 0.114)); - - // Calculate final fragment color - finalColor = vec4(gray, gray, gray, texelColor.a); -} \ No newline at end of file diff --git a/showcase/src/example/others/mod.rs b/showcase/src/example/others/mod.rs deleted file mode 100644 index 71624a36..00000000 --- a/showcase/src/example/others/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -#[cfg(target_os = "windows")] -pub mod rlgl_standalone; diff --git a/showcase/src/example/text/resources/fonts/alagard.png b/showcase/src/example/text/resources/fonts/alagard.png deleted file mode 100644 index c0c54273..00000000 Binary files a/showcase/src/example/text/resources/fonts/alagard.png and /dev/null differ diff --git a/testshell.html b/testshell.html new file mode 100644 index 00000000..c537aca1 --- /dev/null +++ b/testshell.html @@ -0,0 +1,89 @@ + + + + + + + raylib web game + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ + + + \ No newline at end of file